Saltar la navegación

6.1 Desde un contenedor en ejecución

La primera forma para personalizar las imágenes y distribuirlas es partiendo de un contenedor en ejecución. Para ello vamos a tener varias posibilidades:

  1. Utilizar la secuencia de órdenes docker commit / docker save / docker load. En este caso la distribución se producirá a partir de un fichero.
  2. Utilizar la pareja de órdenes docker commit / docker push. En este caso la distribución se producirá a través de DockerHub.
  3. Utilizar la pareja de órdenes docker export / docker import. En este caso la distribución de producirá a través de un fichero.

En este curso nos vamos a ocupar  únicamente de las dos primeras ya que la tercera se limita a copiar el sistema de ficheros sin tener en cuenta la informácion de las imágenes de las que deriva el contenedor (capas, imagen de origen, autor etc..) y además si tenemos volúmenes o bind mounts montados los obviará.

En el primer caso el flujo es ejecución es el siguiente:

Creación y distribución de nuevas imágenes mediante ficheros
Juan Diego Pérez Jiménez. Creación y distribución de nuevas imágenes mediante ficheros (Dominio público)


Si optamos por la segunda opción el flujo de trabajo es el siguiente:

Creación y distribución a través de DockerHub
Juan Diego Pérez Jiménez. Creación y distribución a través de DockerHub (Dominio público)

IMPORTANTE: AL HACER COMMIT DEBEMOS AÑADIR EL NOMBRE DE NUESTRO USUARIO DE DOCKERHUB SI QUEREMOS SUBIRLO.


Cada uno de estos comandos tiene una serie de opciones algunas de las cuales las ilustraremos con una serie de ejemplos:

# Creación de una nueva imagen a partir del contenedor con nombre ejemplo (tag=latest)

> docker commit ejemplo usuarioDockerHub/ubuntu20netutils

# Igual que la anterior pero añadiendo versión (tag)

> docker commit ejemplo usuarioDockerHub/ubuntu20netutils:1.0

# Igual que la anterior pero pausando el contenedor durante el commit (--pause/-p) y añadiendo un mensaje describiendo el commit (--message/-m)

> docker commit -m "Versión con Nmap" -p ejemplo usuarioDockerHub/ubuntu20netutils:1.1

# Igual que la anterior pero añadiendo la información del autor (--author/-a)

> docker commit -a "Juan Diego Pérez" -m "Versión con Nmap" -p ejemplo usuarioDockerHub/ubuntu20netutils:1.1

# Guardar la imagen ubuntu20netutils:1.1 al ficher u20v1.1.tar

> docker save usuarioDockerHub/ubuntu20netutils:1.1 > u20v1.1.tar

# Lo mismo que en el apartado anterior sin la redirección y especificando el fichero (--output / -o)

> docker save --output u20v1.1.tar usuarioDockerHub/ubuntu20netutils:1.1

# Carga la imagen con nombre imagen.tar (--input / -i)

> docker load --input imagen.tar

# Autentificación en DockerHub

> docker login

# Subir una imagen ubuntu20netutils:1.1 a DockerHub

> docker push usuarioDockerHub/ubuntu20netutils:1.1

# Subir una imagen ubuntu20netutils:1.1 a DockerHub suprimiendo la salida que se muestra sobre la información del proceso de subida (--quiet /  -q)

> docker push -q usuarioDockerHub/ubuntu20netutils:1.1

# Subir a DockerHub todas las versiones (tags) de la imagen ubuntu20netutils (--all-tags / -a)

> docker push -a usuarioDockerHub/ubuntu20netutils

Lo entenderemos mejor con el siguiente vídeo.