Cómo copiar/mover un contenedor de Docker a otro host

Dado que los contenedores de Docker son pequeñas cajas de software, puedes copiarlos y moverlos fácilmente de una computadora a otra. Puede ser que hayas trabajado en una instancia de Docker en tu computadora local y decidiste moverla a un servidor más potente. O tal vez solo quieras desplegar tu contenedor personalizado en múltiples computadoras, “copiar y pegar” a su alrededor. Otras veces, puede que no estés satisfecho con un proveedor de computación en la nube y quieras cambiar a otro diferente. Aquí te mostramos cómo mover la imagen de tu contenedor Docker existente y los volúmenes de datos de un host Linux a otro.
Tabla de Contenidos
- Guardar la Imagen del Contenedor desde el Host de Origen
- Exportar un Volumen de Docker desde Tu Contenedor
- Cargar la Imagen del Contenedor en el Host de Destino
- Importar un Volumen de Docker a Tu Contenedor
- Transferir Imagen sin Crear un Archivo
- Usar Docker Compose para Mover un Despliegue Completo de Docker
Es bueno saber: comienza a trabajar con contenedores instalando Docker en tu distribución de Linux.
Guardar la Imagen del Contenedor desde el Host de Origen
Comienza listando los contenedores de Docker disponibles que se están ejecutando en tu sistema. En mi caso, quiero exportar mi contenedor Docker Nginx a una nueva máquina:
docker ps
Encuentra el contenedor que deseas copiar y luego detén la instancia:
docker stop NOMBRE_DE_INSTANCIA
Un contenedor Docker se construye a partir de una imagen inicial genérica. Con el tiempo, agregas tus propios cambios a esta imagen base. Los procesos que se ejecutan dentro del contenedor también pueden guardar sus propios datos o hacer otros cambios. Para preservar todo esto, compromete el estado actual de tu contenedor a una nueva imagen:
docker commit NOMBRE_DE_INSTANCIA miimagencontenedor
Ten en cuenta que si la instancia se está ejecutando actualmente, esta acción la pausará mientras se guardan sus contenidos. Si esto es un problema, puedes evitar esta pausa ingresando docker commit -p=false NOMBRE_DE_INSTANCIA miimagencontenedor en su lugar. Sin embargo, no hagas esto a menos que sea absolutamente necesario. Las probabilidades de crear una imagen con datos inconsistentes/incompletos aumentan en este caso.
Ahora, guarda tu imagen de contenedor Docker recién comprometida en un archivo de archivo:
docker save -o miimagencontenedor.tar miimagencontenedorUsa tu método de transferencia de archivos preferido y copia tu archivo .tar al host donde deseas mover tu contenedor Docker. Por ejemplo, el siguiente comando transfiere mi imagen Docker Nginx usando scp:
scp ./miimagencontenedor.tar [email protected]ón.ip.aquí:/home/ramces/Exportar un Volumen de Docker desde Tu Contenedor
Uno de los inconvenientes de guardar una imagen de Docker es que no viene con los accesorios de Docker que has configurado junto a tu contenedor. Esto incluye cualquier enlace de red y los volúmenes que has creado para almacenar tus datos persistentes.
Para exportar correctamente tu volumen de datos, primero instala Git en tu máquina local:
sudo apt install gitEjecuta el siguiente comando para descargar el script de exportación de volúmenes para Docker:
git clone https://github.com/ricardobranco777/docker-volumes.sh.gitAsegúrate de que el script de exportación tenga los bits de permiso correctos, luego copíalo al directorio “/usr/local/bin” de tu máquina:
sudo chmod +x ./docker-volumes.sh/docker-volumes.sh
sudo cp ./docker-volumes.sh/docker-volumes.sh /usr/local/bin/Prueba si tu script está funcionando correctamente, luego extrae todos los volúmenes asociados a tu contenedor:
docker-volumes.sh -h
docker-volumes.sh NOMBRE_DE_INSTANCIA save miimagencontenedor-volumen.tar
Envía tus archivos de volúmenes Docker recién archivados a tu máquina remota:
scp ./miimagencontenedor-volumen.tar [email protected]ón.ip.aquí:/home/ramces/Cargar la Imagen del Contenedor en el Host de Destino
Inicia sesión en tu host remoto, luego ejecuta el siguiente comando para cargarlo en el demonio Docker de tu máquina remota:
docker load -i ./miimagencontenedor.tarUsa docker create para reinicializar tu imagen de contenedor Docker con sus flags de ejecución originales de tu máquina fuente. Por ejemplo, mi contenedor Docker Nginx originalmente tenía el puerto 80 mapeado al puerto 8080 de mi máquina host:
docker create --name mi-contenedor-nginx -p8080:80 miimagencontenedorEjecuta tu nuevo contenedor Docker importado:
docker start mi-contenedor-nginxConfirma que tu imagen importada está funcionando correctamente listando todos los contenedores activos en el sistema:
docker ps
FYI: convierte tu Raspberry Pi en una galería de fotos portátil capaz instalando Photoprism con Docker.
Importar un Volumen de Docker a Tu Contenedor
Para importar un archivo de volumen Docker .tar, primero descarga Git en tu nuevo host:
sudo apt install gitAl igual que en tu sistema original, descarga el script auxiliar docker-volume.sh, establece sus bits de permisos en “ejecutar”, y luego cópialo al directorio “/usr/local/bin” de tu nueva máquina.

Crea un nuevo contenedor Docker usando tu archivo de imagen exportada:
docker create --name mi-contenedor-nginx -v myvol:/usr/share/nginx/html -p8080:80 miimagencontenedorEjecuta el script docker-volume.sh con tu archivo .tar original para cargarlo en el demonio Docker de tu nuevo sistema:
docker-volumes.sh mi-contenedor-nginx load miimagencontenedor-volumen.tarInicia tu nuevo contenedor Docker ejecutando el siguiente comando:
docker start mi-contenedor-nginxPrueba si tu contenedor está cargando tu volumen correctamente observando sus datos de configuración internos:
docker inspect -f'{{ .Mounts }}' mi-contenedor-nginx
Transferir Imagen sin Crear un Archivo
A veces, tal vez quieras omitir la creación de un archivo miimagencontenedor.tar.gz. Tal vez no tengas suficiente espacio en disco ya que el contenedor tiene muchos datos en él. Puedes guardar, transferir y cargar la imagen en el host de destino en un solo comando. Después de ejecutar el comando docker commit mencionado anteriormente, puedes usar esto:
docker save miimagencontenedor | ssh [email protected]ón.ip docker loadTambién debería funcionar desde Windows, ya que ahora tiene un cliente SSH incorporado (PuTTY ya no es necesario).
Continúa con el comando docker create que se aplica a tu situación.
Nota: Asegúrate de que has montado correctamente cualquier volumen de Docker que estaba previamente adjunto a tu contenedor antes de iniciar la imagen importada.
Por último, inicia tu nuevo contenedor Docker importado ejecutando docker start seguido del nombre de tu contenedor.

Usar Docker Compose para Mover un Despliegue Completo de Docker
Con su plugin Compose, Docker permite construir, configurar y ejecutar programas complejos sin preocuparse por la pila de software subyacente del servidor. Esto, a su vez, te permite construir despliegues de aplicaciones reproducibles en diferentes sistemas Linux.
Para comenzar a migrar tu configuración de Docker existente a Docker Compose, primero asegúrate de que su plugin esté actualmente en tu sistema:
sudo apt install docker-compose-plugin docker-buildx-pluginCrea una nueva carpeta en tu directorio personal para tu instalación de Docker Compose:
mkdir ~/mi-docker-compose && cd ~/mi-docker-composeUsa tu editor de texto favorito para crear un archivo “docker-compose.yml” para tu aplicación:
nano ./docker-compose.ymlPega el siguiente bloque de código dentro de tu archivo de Compose, y luego ajústalo a tus necesidades específicas:
version: '3'
volumes:
myvol: # Reemplaza con el nombre de tu volumen importado.
services:
nginx:
image: miimagencontenedor # Reemplaza con el nombre de tu imagen Docker importada.
ports:
- "8080:80"
volumes:
- myvol:/usr/share/nginx/html # Reemplaza "myvol" con el nombre de tu imagen montada.Guarda tu nuevo archivo de Compose, luego ejecuta el siguiente comando para iniciarlo:
docker compose up -dPor último, prueba si tu despliegue de Compose está funcionando correctamente. En mi caso, probaré mi contenedor Docker Nginx abriendo un navegador web y navegando a “localhost:8080.”

Aprender a copiar y mover tu contenedor Docker a otros hosts de Linux es solo una de las pocas tareas que puedes realizar con tu máquina. Explora este maravilloso mundo de autoalojamiento instalando un servidor de Minecraft en Linux usando Docker.
Crédito de imagen: Max Duzij vía Unsplash. Todas las alteraciones y capturas de pantalla por Ramces Red.