#!/bin/bash # Docker Image Export Script # Exports all project Docker images for migration to another environment set -e echo "🚀 Legal Document Masker - Docker Image Export" echo "==============================================" # Function to check if Docker is running check_docker() { if ! docker info > /dev/null 2>&1; then echo "❌ Docker is not running. Please start Docker and try again." exit 1 fi echo "✅ Docker is running" } # Function to check if images exist check_images() { echo "🔍 Checking for required images..." local missing_images=() if ! docker images | grep -q "legal-doc-masker-backend-api"; then missing_images+=("legal-doc-masker-backend-api") fi if ! docker images | grep -q "legal-doc-masker-frontend"; then missing_images+=("legal-doc-masker-frontend") fi if ! docker images | grep -q "legal-doc-masker-mineru-api"; then missing_images+=("legal-doc-masker-mineru-api") fi if ! docker images | grep -q "redis:alpine"; then missing_images+=("redis:alpine") fi if [ ${#missing_images[@]} -ne 0 ]; then echo "❌ Missing images: ${missing_images[*]}" echo "Please build the images first using: docker-compose build" exit 1 fi echo "✅ All required images found" } # Function to create export directory create_export_dir() { local export_dir="docker-images-export-$(date +%Y%m%d-%H%M%S)" mkdir -p "$export_dir" cd "$export_dir" echo "📁 Created export directory: $export_dir" echo "$export_dir" } # Function to export images export_images() { local export_dir="$1" echo "📦 Exporting Docker images..." # Export backend image echo " 📦 Exporting backend-api image..." docker save legal-doc-masker-backend-api:latest -o backend-api.tar # Export frontend image echo " 📦 Exporting frontend image..." docker save legal-doc-masker-frontend:latest -o frontend.tar # Export mineru image echo " 📦 Exporting mineru-api image..." docker save legal-doc-masker-mineru-api:latest -o mineru-api.tar # Export redis image echo " 📦 Exporting redis image..." docker save redis:alpine -o redis.tar echo "✅ All images exported successfully!" } # Function to show export summary show_summary() { echo "" echo "📊 Export Summary:" echo "==================" ls -lh *.tar echo "" echo "📋 Files to transfer:" echo "====================" for file in *.tar; do echo " - $file" done echo "" echo "💾 Total size: $(du -sh . | cut -f1)" } # Function to create compressed archive create_archive() { echo "" echo "🗜️ Creating compressed archive..." local archive_name="legal-doc-masker-images-$(date +%Y%m%d-%H%M%S).tar.gz" tar -czf "$archive_name" *.tar echo "✅ Created archive: $archive_name" echo "📊 Archive size: $(du -sh "$archive_name" | cut -f1)" echo "" echo "📋 Transfer options:" echo "===================" echo "1. Transfer individual .tar files" echo "2. Transfer compressed archive: $archive_name" } # Function to show transfer instructions show_transfer_instructions() { echo "" echo "📤 Transfer Instructions:" echo "========================" echo "" echo "Option 1: Transfer individual files" echo "-----------------------------------" echo "scp *.tar user@target-server:/path/to/destination/" echo "" echo "Option 2: Transfer compressed archive" echo "-------------------------------------" echo "scp legal-doc-masker-images-*.tar.gz user@target-server:/path/to/destination/" echo "" echo "Option 3: USB Drive" echo "-------------------" echo "cp *.tar /Volumes/USB_DRIVE/docker-images/" echo "cp legal-doc-masker-images-*.tar.gz /Volumes/USB_DRIVE/" echo "" echo "Option 4: Cloud Storage" echo "----------------------" echo "aws s3 cp *.tar s3://your-bucket/docker-images/" echo "aws s3 cp legal-doc-masker-images-*.tar.gz s3://your-bucket/docker-images/" } # Main execution main() { check_docker check_images local export_dir=$(create_export_dir) export_images "$export_dir" show_summary create_archive show_transfer_instructions echo "" echo "🎉 Export completed successfully!" echo "📁 Export location: $(pwd)" echo "" echo "Next steps:" echo "1. Transfer the files to your target environment" echo "2. Use import-images.sh on the target environment" echo "3. Copy docker-compose.yml and other config files" } # Run main function main "$@"