Creación de una nueva imagen a partir de un contenedor
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:
- Utilizar la secuencia de órdenes
docker commit
/docker save
/docker load
. En este caso la distribución se producirá a partir de un fichero. - Utilizar la pareja de órdenes
docker commit
/docker push
. En este caso la distribución se producirá a través de DockerHub. - 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 información 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á.
Distribución a partir de un fichero
-
Arranca un contenedor a a partir de una imagen base
$ docker run -it --name contenedor debian bash
-
Realizar modificaciones en el contenedor (instalaciones, modificación de archivos,…)
root@2df2bf1488c5:/# apt update && apt install apache2 -y
-
Crear una nueva imagen partiendo de ese contenedor usando
docker commit
. Con esta instrucción se creará una nueva imagen con las capas de la imagen base más la capa propia del contenedor. Al creala no voy a poner etiqueta, por lo que serálatest
.$ docker commit contenedor josedom24/myapache2 sha256:017a4489735f91f68366f505e4976c111129699785e1ef609aefb51615f98fc4 $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE josedom24/myapache2 latest 017a4489735f 44 seconds ago 243MB ...
-
Guardar esa imagen en un archivo .tar usando el comando
docker save
:$ docker save josedom24/myapache2 > myapache2.tar
-
Distribuir el fichero .tar
-
Si me llega un fichero .tar puedo añadir la imagen a mi repositorio local:
$ docker rmi josedom24/myapache2:latest Untagged: josedom24/myapache2:latest Deleted: sha256:017a4489735f91f68366f505e4976c111129699785e1ef609aefb51615f98fc4 Deleted: sha256:761d2ff599422097fcf3dd1a13f50b9bf924e453efee8617e29ba78602efcf21 $ docker load -i myapache2.tar 6a30654d94bc: Loading layer [==================================================>] 132.4MB/132.4MB Loaded image: josedom24/myapache2:latest
Distribución usando Docker Hub
Los tres primeros pasos son iguales, por lo tanto tenemos nuestra imagen ya creada después de ejecutar docker commit
, los siguientes pasos serían:
-
Autentificarme en Docker Hub usando el comando
docker login
.$ docker login Login with your Docker ID to push and pull images from Docker Hub... Username: usuario Password: ... Login Succeeded
-
Distribuir ese fichero subiendo la nueva imagen a DockerHub mediante
docker push
.$ docker push josedom24/myapache2 The push refers to repository [docker.io/josedom24/myapache2] 6a30654d94bc: Pushed 4762552ad7d8: Mounted from library/debian latest: digest: sha256:25b34b8342ac8b79610d3058aa07ec935dcf5d33db7544da9a216050e1d2077a size: 741
-
Ya cualquier persona puede bajar la imagen usando
docker pull
.