Docker – Backup, Restore, Tagueo y Publicación de imágenes.
Es este último artículo dedicado a Docker se describirán los métodos más utilizados para el backup, restore, tagueo y publicación de imágenes.
Backup y Restore de imágenes
Una imagen que se encuentra en el cache de Docker puede ser guardada como un archivo tar usando el comando docker save
. Este archivos tar no es uno convencional ya que contiene metada y conserva las capas de la imagen original, por lo cual es posible recrearla exactamente como era. El comando genérico es el siguiente.
$ docker save [-o FILE_NAME] IMAGE_NAME[:TAG]
Se pueden utilizar los siguientes comando para realizar el backup de imágenes.
$ docker save -o mysql.tar mysql-56 $ docker save busybox > busybox.tar $ docker save --output busybox.tar busybox
Para hacer el restore de una imagen guardada en un archivo tar se debe utilizar el comando docker load
.
$ docker load -i mysql.tar
Export e Import de contenedores
Para hacer un backup de contenedores en un archivo tar, se utiliza el comando docker export
.
$ docker export wordpress > blog.tar $ docker export --output="blog.tar" wordpress
Para el restore de un contenedor que se exportó, es necesario utilizar el comando docker import
. Este comando permite importar archivos locales y archivos remotos con los protocolas http:// y https://
Se puede utilizar la opción -c ( –change ) para aplicar cambios que pueden ser instrucciones dentro de un archivo Dockerfile.
Los siguientes comando son válidos para un restore de contenedores.
$ docker import http://example.com/exampleimage.tgz $ docker import /ruta/hacia/exampleimage.tgz $ cat exampleimage.tgz | docker import - exampleimagelocal:new $ cat exampleimage.tgz | docker import --message "New image imported from tarball" - exampleimagelocal:new $ sudo tar -c . | docker import --change "ENV DEBUG true" - exampleimagedir
Recordar que import genera una nueva imagen en el caché de docker engine. Se puede listar con el comando
docker images
.
Borrar una imagen
Para borrar una imagen del cache de Docker, se debe utilizar el comando docker rmi
. El comando genérico es el que sigue.
$ docker rmi [OPTIONS] IMAGE [IMAGE...]
Para borrar una imagen es necesario que no se encuentre utilizada por algún contenedor. Usando la opción --force=true
borrará una imagen que se encuentre funcionando en un contenedor.
$ docker rmi apache2
Para borrar todas la imágenes que no se estén utilizando de una sola vez, se debe usar:
$ docker rmi $(docker images -q)
Modificando imágenes
Como dijimos, para crear una imagen es recomendable utilizar un Dockerfile. Pero existe la posibilidad de utilizar el comando docker commit
para crear una imagen de un contenedor que se encuentra en ejecución. En modo general el comando es el siguiente.
$ docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
El siguiente ejemplo muestra su utilización.
$ docker commit --author="Diego Calbo" --message="First commit" blog blog:v1.0
Con el comando dicker diff
se pueden verificar los cambios que se produjeron en un contenedor a partir de su imagen inicial.
$ docker diff blog
Para crear una nueva imagen que contenga estos cambios se puede utilizar el comando docker commit
.
$ docker commit blog blog01:v1.0
Publicar una imagen al Registry
Para enviar una imagen al registry, debe almacenarse en el caché de Docker y debe ser etiquetada (tagueada) con fines de identificación. Para «taguear» una imagen se utiliza el siguiente comando:
$ docker tag IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]
Por defecto, las imágenes se «taguean» con la etiqueta «latest».
Los siguientes comandos muestran como hacer uso de esta funcionalidad.
$ docker tag apache2 webserver $ docker tag mysql-56 devops/mysql
Para «taguear» una imagen con una etiqueta diferente se utiliza:
$ docker tag mysql-56 devops/mysql:snapshot
Cuando se «taguea» una imagen solamente se indica que la imagen con un ID en particular se marca con un nuevo tag de imagen. Por lo que una misma imagen puede tener más de un tag.
Para borrar etiquetas de las imágenes se utiliza el comando:
$ docker rmi devops/mysql:snapshot
Para publicar la imagen creada en un registry, que puede ser público o privado, se utiliza el siguiente comando:
$ docker push mysql-56
Para publicar una imagen en el hub de docker ( https://hub.docker.com) se debe tener una cuenta de usuario y renombrar la imagen incluyendo el nombre de imagen, como se muestra debajo.
$ docker push usuario/nombre_imagen
Recordar que para poder publicar la imagen al hub de docker primero se debe hacer la autenticación del usuario. Debajo se muestran los pasos a seguir.
$ docker tag wordpress username/wordpress $ docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username (username): username Password: ****** Login Succeeded $ docker push username/wordpress ... $ docker logout Removing login credentials for https://index.docker.io/v1/
En el siguiente video se muestra la utilización de todos los comandos descritos anteriormente.
De este modo terminamos la serie de artículos dedicados a Docker como manejador de contenedores. Recuerden compartir en los comentarios experiencias y opiniones para poder compartir con los demás visitantes de este blog. De ese modo podemos incrementar nuestro conocimiento.
Los invito a que nos sigan en nuestro twitter ( @ApuntesIT ) y a nuestros canales de YouTube y Dailymotion.
Enlaces útiles
Docker: https://www.docker.com
Hub: https://hub.docker.com
Twitter: @ApuntesIT
YouTube: https://www.youtube.com/channel/UCh_k8K1wP31GfOFdYJj5Eeg
Dailymotion: http://www.dailymotion.com/apuntesit
Trabajando desde el año 1990 en el mercado de la tecnología. Técnico en Electrónica. Administrador de Sistemas. Administrador de Redes. Técnico en telecomunicaciones. Técnico de plataforma satelital. Incursiono en el Software Libre desde mediados del 1997. Desde entonces utilicé varias distribuciones GNU/Linux comenzando con un RedHat 5.0
Formé parte del Core Team y miembro del grupo de desarrollo del Proyecto UTUTO.