- ¿Cómo se puede trasladar un contenedor Docker completo y seguro a otro servidor?
- Generalidades y requisitos previos
- Estrategias de copia de seguridad y migración: cómo elegir el método adecuado.
- Escenario 1: Imagen local y volumen con nombre (por ejemplo, aplicación web + MySQL)
- Escenario 2: Contenedor con montaje de enlace (carpeta del host)
- Escenario 3: Migración sin tiempo de inactividad para bases de datos sensibles
- Comparación de opciones de transferencia (ventajas/desventajas)
- Consejos de seguridad (muy importantes)
- Consejos prácticos y optimización para big data
- Compatibilidad y versiones de Docker
- Elegir una ubicación y un tipo de servidor para la migración
- Ejemplo completo: Migración web + MySQL con docker-compose
- Lista de verificación final antes de la puesta en marcha
- Preguntas frecuentes
¿Cómo se puede trasladar un contenedor Docker completo y seguro a otro servidor?
Una copia de seguridad y migración completa de un contenedor Docker implica tres componentes principales: imagen, datos (volúmenes o montajes de enlace) y Configuración/Metadatos. Esta guía paso a paso describe métodos seguros, sin errores y reversibles para migrar servicios en contenedores (incluidas aplicaciones web y bases de datos).
Generalidades y requisitos previos
Antes de comenzar, asegúrese de tener lo siguiente:
- Acceso SSH a ambos servidores con el usuario o root apropiado.
- Instala Docker (y docker-compose si es necesario) en el origen y el destino. Ejemplo de instalación rápida:
curl -fsSL https://get.docker.com | sh
# or follow your distribution guide- Compruebe que dispone de suficiente espacio en disco para los archivos.
- Clave SSH para transferencia segura y herramientas como sincronización r O SCP-1811.
- Planificación de la programación de interrupciones del servicio o métodos de baja latencia.
Comandos iniciales para comprobar:
docker ps -a
docker volume ls
df -h
du -sh /var/lib/docker/volumes/*Estrategias de copia de seguridad y migración: cómo elegir el método adecuado.
Tres componentes clave para una transición completa:
- Imagen Contenedor (código/binarios)
- Datos estables (volúmenes o montajes de enlace)
- Configuraciones y metadatos (docker-compose.yml, archivos de entorno, redes, secretos)
Métodos comunes:
- Exportación de Docker / Importación de Docker: Incluye el sistema de archivos del contenedor, pero no transfiere metadatos ni volúmenes con nombre.
- Docker guardar / Docker cargar: Adecuado para imágenes creadas.
- Copia de seguridad de volúmenes Comprima el archivo en formato tar y transfiéralo con rsync/scp o cárguelo a S3.
- Utilizando un registro privado Para imágenes push/pull.
- Utilice herramientas de gestión Como docker-compose o Kubernetes para reconstruir el servicio con definiciones.
Escenario 1: Imagen local y volumen con nombre (por ejemplo, aplicación web + MySQL)
Suposición: Contenedor web y MySQL con volumen llamado mysql_data. Pasos en orden:
1) Obtención de la imagen del contenedor
Si dispone de una imagen local o se han realizado cambios en el contenedor, primero busque el nombre de la imagen y el ID del contenedor, y guarde el contenedor si es necesario.
docker ps --no-trunc --format '{{.Image}} {{.ID}}'
docker commit CONTAINER_ID myapp:backup-2026-07-14
docker save -o /tmp/myapp_backup_image.tar myapp:backup-2026-07-142) Copia de seguridad de volumen con nombre
Método seguro con un contenedor auxiliar que comprime el contenido del volumen en el host:
docker run --rm \
-v mysql_data:/data \
-v /tmp/backup:/backup \
ubuntu \
bash -lc "cd /data && tar czf /backup/mysql_data.tar.gz ."Para grandes cantidades de datos, puede utilizar un compresor más rápido como zstd:
docker run --rm -v mysql_data:/data -v /tmp/backup:/backup ubuntu bash -lc "cd /data && tar -I 'zstd -19' -cf /backup/mysql_data.tar.zst ."3) Copia de seguridad de la base de datos (preferible)
Para garantizar la coherencia e integridad de la base de datos, lo mejor es realizar un volcado lógico:
docker exec CONTAINER_ID sh -c 'exec mysqldump --all-databases --single-transaction -u root -p"$MYSQL_ROOT_PASSWORD"' > /tmp/all_databases.sqlExplicación: Este método elimina la dependencia del sistema de archivos del volumen y produce un volcado lógico correcto.
4) Transferir al servidor de destino
Se recomienda utilizar rsync para transferencias seguras y continuas, especialmente para archivos grandes.
rsync -avP -e "ssh -p 22" /tmp/myapp_backup_image.tar user@target:/tmp/
rsync -avP -e "ssh -p 22" /tmp/mysql_data.tar.gz user@target:/tmp/O más sencillo con scp:
scp /tmp/myapp_backup_image.tar user@target:/tmp/Nota: Para transferencias grandes, utilice rsync --partial --progress o herramientas como rclone a S3/MinIO.
5) Restaurar en el servidor de destino.
Sube la imagen y restaura el volumen, luego inicia el servicio con docker-compose:
docker load -i /tmp/myapp_backup_image.tar
docker volume create --name mysql_data
docker run --rm -v mysql_data:/data -v /tmp/backup:/backup ubuntu bash -lc "cd /data && tar xzf /backup/mysql_data.tar.gz"Si utilizó SQL dump, cree un contenedor mysql temporal y realice la importación:
docker run --name mysql-temp -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql:8
cat /tmp/all_databases.sql | docker exec -i mysql-temp sh -c 'mysql -u root -p"$MYSQL_ROOT_PASSWORD"'Luego, coloque los archivos docker-compose.yml y env e inicie el servicio:
docker-compose -f docker-compose.yml up -d6) Pruebas y revisión
No olvides revisar los registros, la integridad de los datos y las sumas de verificación:
docker logs -f CONTAINER
sha256sum /tmp/mysql_data.tar.gz
sha256sum /tmp/backup/mysql_data.tar.gzEscenario 2: Contenedor con montaje de enlace (carpeta del host)
Si el contenedor utiliza un montaje de enlace (por ejemplo, /srv/app/data en el host), simplemente sincronice o comprima la ruta del host con rsync o tar, prepare la misma ruta en el destino e inicie el contenedor.
rsync -avP -e "ssh" /srv/app/data/ user@target:/srv/app/data/A continuación, inicie el contenedor en el destino con la misma ruta de montaje de enlace.
Escenario 3: Migración sin tiempo de inactividad para bases de datos sensibles
Para reducir las interrupciones del servicio:
- Replicación Implementar (replicación MySQL o transmisión PostgreSQL) y realizar la transición después de la sincronización.
- Sincronización rsync inicial y final: Sincronización inicial con rsync para datos grandes, y luego sincronización final con rsync con –inplace y –delete para sincronizar cambios pequeños.
rsync -azP --delete --inplace /var/lib/docker/volumes/mysql_data/_data/ user@target:/var/lib/docker/volumes/mysql_data/_data/Tras la última sincronización con rsync, detenga el servicio durante unos segundos y luego reinícielo en el destino.
Comparación de opciones de transferencia (ventajas/desventajas)
- Docker guardar/cargar: Rápido para imágenes, pero no incluye volúmenes.
- Exportación/importación de Docker: Incluye el sistema de archivos del contenedor, pero pierde los metadatos y los volúmenes.
- rsync en volúmenes: Control y reanudación precisos, pero requiere gestión y pruebas.
- Volcado lógico de la base de datos: Fiable y adecuado para la migración entre diferentes versiones de bases de datos.
- Registro privado: Buenas prácticas para distribuir imágenes entre varios servidores; los datos persistentes deben transferirse por separado.
Consejos de seguridad (muy importantes)
Algunos consejos prácticos de seguridad:
- Utilice SSH con una clave privada protegida y restricciones de acceso.
- Proteja los datos confidenciales antes de la transmisión con herramientas como: gpg O edad Cifrar. Ejemplo:
gpg --encrypt --recipient [email protected] /tmp/mysql_data.tar.gzDespués de la transferencia, verifique siempre la integridad de los archivos con suma sha256 Controlar.
En el destino, antes de activar el servicio, compruebe el cortafuegos y las restricciones de puertos, y establezca restricciones de acceso estrictas si fuera necesario.
Consejos prácticos y optimización para big data
- Compresión Con zstd o gzip con el nivel apropiado: tar -I 'zstd -19' -cf backup.tar.zst /data
- Utilice rsync con --partial para reanudar la operación si la conexión es inestable.
- Para transferencias de varios terabytes, considere la posibilidad de enviar discos físicos o utilizar almacenamiento de objetos cerca del destino.
Compatibilidad y versiones de Docker
Antes de migrar, compruebe las versiones de Docker de origen y destino. Normalmente, las imágenes son compatibles, pero algunas funciones nuevas de Compose o de los controladores pueden requerir adaptaciones.
Elegir una ubicación y un tipo de servidor para la migración
La elección de la ubicación del centro de datos y del tipo de servidor depende de la aplicación:
- Comercio y Forex: Ubicación cercana a los servidores de Exchange para obtener la menor latencia posible.
- Juego: Ubicaciones adecuadas en Europa/EE. UU. o cerca de jugadores con sistemas anti-DDoS.
- Inteligencia artificial y renderizado: Servidores GPU y NVMe para E/S de alto rendimiento.
- Sitios web: Servidor en la nube con CDN y ubicación cercana a los usuarios principales.
Nuestra empresa ofrece más de 85 ubicaciones globales, servidores GPU y redes BGP que pueden cubrir diversas necesidades de migración.
Ejemplo completo: Migración web + MySQL con docker-compose
Resumen de los pasos:
- Salida de la configuración de docker-compose y la creación de la imagen local:
docker-compose -f docker-compose.yml config > /tmp/compose_config.yml
docker-compose build
docker save $(docker-compose images -q web) -o /tmp/web_image.tar- Volúmenes de copia de seguridad:
docker run --rm -v project_mysql:/data -v /tmp/backup:/backup ubuntu bash -lc "cd /data && tar czf /backup/mysql_data.tar.gz ."- Transfiere los archivos al destino con rsync y luego restaura y ejecuta docker-compose en el destino.
Lista de verificación final antes de la puesta en marcha
- Se ha realizado una copia de seguridad de la imagen y los volúmenes, y se ha verificado la suma de comprobación.
- Los env y los secretos están protegidos o almacenados en una bóveda.
- Se han comprobado las versiones de Docker y Compose.
- La red de destino y el cortafuegos están configurados.
- Se ha definido el escenario de reversión.
- El calendario definitivo ya ha sido anunciado y el seguimiento está en marcha.









