¿Construyó una imagen de Docker que necesita compartir con un colega? Así es como puede distribuir una imagen sin que el destinatario necesite ejecutar docker build
ellos mismos.
Compartir una imagen prediseñada en lugar de un Dockerfile
le permite estar seguro de que su colega está ejecutando exactamente el mismo software. Volver a ejecutar la compilación podría dar como resultado un entorno sutilmente diferente. Tienes dos opciones para distribuir tu imagen, dependiendo de la situación.
Usar un registro de Docker
La forma más sencilla de compartir una imagen de Docker es subirla a un registro de Docker. Esta funcionalidad está totalmente integrada en la CLI de Docker. No necesita realizar transferencias de archivos manuales cuando utiliza este método.
El registro predeterminado es Docker Hub. Esto le permite compartir imágenes públicamente y también le brinda un repositorio privado. Cree una cuenta en Docker Hub, luego ejecute docker login
en tu terminal. Proporcione los detalles de su cuenta para conectar la CLI de Docker a su cuenta.
A continuación, cree su imagen como de costumbre, usando docker build
. Agregue una etiqueta que comience con su nombre de usuario de Docker Hub:
docker build -t my-account/my-image:latest .
Luego usa el docker push
comando para subir la imagen etiquetada a Docker Hub:
docker push my-account/my-image:latest
Ahora su imagen está almacenada de forma segura en Docker Hub. Otros usuarios podrán bajarlo usando docker pull
o docker run
comandos ¡Terminaste de compartir tu imagen!
Para el uso en el mundo real, Docker Hub podría no ser suficiente. Si forma parte de un equipo de desarrollo, probablemente querrá mantener las imágenes en su propio servidor, en lugar del registro público de Hub. En su lugar, puede crear un servidor de registro autohospedado para obtener almacenamiento privado que sea totalmente compatible con docker push
y docker pull
comandos Esto le permite compartir imágenes fácilmente con cualquier persona que pueda acceder a su registro privado.
Exportación de imágenes
Si usar un registro no es una opción, puede exportar manualmente los archivos de imágenes de Docker. Esta funcionalidad también está integrada en la CLI de Docker. Cree su imagen y luego use docker save
comando para obtener un tar
archivo de su contenido:
docker save my-image:latest > my-image.tar
La exportación puede tardar unos minutos en completarse. Docker incluirá todo lo necesario para recrear la imagen:esas son todas las capas en su Dockerfile
, así como las capas heredadas de su imagen base. El archivo también contendrá información sobre las etiquetas asociadas con la imagen.
Como la salida es un simple tar
archivo, ahora eres libre de distribuirlo de la forma que elijas. Los archivos pueden ser bastante grandes, por lo que normalmente lo mejor es cargarlos en un servidor de archivos o en un proveedor de almacenamiento en la nube.
Para usar una imagen exportada, ejecute docker load
dominio. Esto acepta un tar
archivo producido por docker save
como flujo de entrada. Docker cargará el contenido del archivo y lo agregará a su lista de imágenes locales.
docker load < my-image.tar
Ahora verá la imagen recién importada en sus docker images
producción. Está listo para iniciar un nuevo contenedor con docker run
.
Exportar e importar imágenes agrega algunos pasos adicionales sobre el uso de un registro de Docker. Deberá transferir manualmente el archivo entre los clientes. En consecuencia, este enfoque es menos adecuado para el uso frecuente, aunque también tiene sus ventajas.
Convertir imágenes a un tar
El archivo puede ser útil para el almacenamiento a largo plazo. Si se está quedando sin espacio en su servidor de registro, archivando imágenes antiguas y cargando sus tars
hacer una copia de seguridad del almacenamiento de archivos podría ser una forma rentable de recuperar algo de capacidad. Todavía podrá recuperar la imagen si alguna vez lo necesita en el futuro.
¿Qué pasa con la "exportación de docker"?
Docker tiene otro comando relacionado con la exportación, docker export
. Esto no debe confundirse con docker save
. Mientras que save
funciona con imágenes, export
en realidad gestiona contenedores individuales .
docker export
producirá un tar
archivo del sistema de archivos de un contenedor. Esto se puede usar para restaurar una réplica del contenedor en otra máquina. Si inspecciona el contenido del archivo, verá que es solo un sistema de archivos raíz normal de Linux, con directorios como /bin
, /etc
y /usr
.
docker export my-container > my-container.tar
docker export
es útil si desea tomar una instantánea de un contenedor para su posterior restauración. Sin embargo, los archivos de contenedores no se importan de la forma que cabría esperar. Como un contenedor representa un entorno en vivo y en ejecución, no puede "importarlo" directamente. En su lugar, la importación de un archivo contenedor construye un nuevo imagen.
docker import my-container.tar my-image:latest
En este ejemplo, Docker tomará el sistema de archivos en my-container.tar
y construye automáticamente una nueva imagen llamada my-image:latest
. Tendrá el mismo sistema de archivos pero no la misma imagen base o configuración de Docker que el contenedor original que exportó.
RELACIONADO: Cómo comenzar con el nuevo registro de contenedores Docker de Github
Resumen
Docker facilita compartir imágenes de aplicaciones y entornos de desarrollo con sus colaboradores. Por lo general, es mejor enviar imágenes a un repositorio centralizado del que todos los demás puedan extraer. En algunos escenarios, puede tener más sentido exportar una imagen a un archivo que distribuya manualmente.
Docker también le permite exportar el sistema de archivos de un contenedor para su posterior restauración en una imagen. Tenga cuidado al usar esto, ya que no es una reconstrucción exacta y no se incluyen todos los datos del sistema de archivos. Los volúmenes montados en el contenedor original no se incluirán en el archivo del sistema de archivos, por lo que debe tomar medidas para hacer una copia de seguridad de estos por separado.