Docker – Backup, Restore, Tagueo y Publicación de imágenes.

De Base de conocimiento
Ir a la navegación Ir a la búsqueda

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/


Comandos extras

  $ docker save haproxy:1.7 | gzip > haproxy-1.7.tar.gz