Gestionando el registro Docker Hub

4 minuto de lectura

dockerhub

En artículos anteriores hemos estudiado la generación de imágenes docker utilizando ficheros Dockerfile y construyendo la nueva imagen con el comando docker buid. Las imágenes generadas por este método se crean en nuestro servidor docker. si queremos desplegar la aplicación o el servicio “dockerizado” desde nuestro entorno de prueba/desarrollo a nuestro entorno de producción, es necesario llevarnos la imagen de un entono a otro. Para transferir la imagen de un equipo a otro tenemos dos posibilidades:

  • Podríamos guardar la imagen en un fichero tar, que podemos copiar al otro equipo para restaurarlo en él.
  • Podríamos guardar la imagen en un registro docker. Podemos instalar un registro en nuestra infraestructura o utilizar docker hub, que es una aplicación web que nos proporciona la posibilidad de guardar nuestras imágenes. Una vez que la imagen esta guardada en el registro podemos descargarla desde el entorno de producción.

Para ver las distintas opciones que tenemos a nuestra disposición vamos a partir de la siguiente imagen que hemos creado:

docker images 
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
josedom24/apache2   latest              04800781aed6        17 seconds ago      183.7 MB

Exportación/importación de imágenes

Como hemos indicado anteriormente una imagen la podemos guardar en un fichero tar para exportarla a otro equipo.

Para exportar una imagen ejecutamos el siguiente comando:

$ docker save -o apache2.tar josedom24/apache2

Y se genera un fichero tar, que podemos ver:

$ ls -alh
-rw-r--r-- 1 usuario usuario 184M feb 17 21:02 apache2.tar

Este fichero lo podemos guardar en cualquier medio de almacenamiento, o enviarlo por internet a otro equipo, donde realizaríamos la importación:

$ docker load -i apache2.tar josedom24/apache2

Guardando nuestras imágenes en docker hub

Otra opción que tenemos es guardar nuestra imagen en el registro docker hub, de esta forma sería muy sencillo descargarlo en otro equipo. Es necesario tener una cuenta en docker hub, nosotros ya tenemos una cuenta con el usuario josedom24.

Para poder subir una imagen a nuestra cuenta de docker hub es necesario autentificarnos, para ello:

$ docker login
Username: josedom24
Password: 
Email: xxxxxxxx@gmail.com
WARNING: login credentials saved in /home/usuario/.docker/config.json
Login Succeeded

Y podemos subir nuestra imagen con el comando:

$ docker push josedom24/apache2
The push refers to a repository [docker.io/josedom24/apache2]
3155f6b09710: Pushed 
67331ad8a75e: Pushed 
5f70bf18a086: Pushed 
78dbfa5b7cbc: Pushed
latest: digest: sha256:bfe4d16f3e8d7f31b5f1bc0e1d989cbe6d762d1f4770fedf435685e24ee7bf8c size: 644

Podemos comprobar que la imagen se ha subido a docker hub:

dockerhub2

Ya podemos buscar la nueva imagen que hemos subido y bajarla en otro servidor:

$ docker search josedom24
NAME                DESCRIPTION   STARS     OFFICIAL   AUTOMATED
josedom24/apache2                 0

$ docker pull josedom24/apache2

Generación automática de imágenes en docker hub

También podemos generar una imagen directamente en docker hub. Esta solución es mucho más cómoda, porque no es necesario generar la imagen en nuestro ordenador para posteriormente subirla al registro. Para realizar la generación automática vamos a guardar los ficheros de nuestro contexto (el fichero Dockerfile y los ficheros que vamos a guardar en la imagen) en un repositorio en GitHub. Para realizar este ejemplo vamos a utilizar el contexto que utilizamos en la entrada anterior para crear la imagen con mysql. Lo primero que vamos a hacer es crear un repositorio en github donde vamos a guardar los ficheros del contexto:

$ git clone git@github.com:josedom24/docker_mysql.git
Cloning into 'docker_mysql'...
$ cd docker_mysql

Copiamos los ficheros del contexto en nuestro repositorio:

docker_mysql$ ls
Dockerfile  my.cnf  script.sh

Y los subimos al repositorio github:

docker_mysql$ git add *
docker_mysql$ git commit -m "Contexto docker mysql"
docker_mysql$ git push

A continuación desde docker hub tenemos que crear un “Automated Build”:

</a>

La primera vez que lo hacemos tenemos que conectar docker con github y permitir que docker hub pueda acceder a nuestro repositorio, elegimos que nos vamos a conectar a github y seleccionamos la primera opción (Public and Private) donde permitamos más opciones de trabajo, finalmente desde github autorizamos a la aplicación docker hub. Para conseguir todo esto tenemos que seguir los siguiente pasos:

dockerhub4dockerhub5dockerhub6dockerhub7Una vez realizado esta configuración, ya podemos crear un “Automated Build”, elegimos un repositorio github:

<a class=”thumbnail” href=”https://www.josedomingo.org/pledin/* src=”https://www.josedomingo.org/pledin*assets/wp-content/uploads/2016/02/dockerhub8-1-300x155.png 300w, https://www.josedomingo.org/pledin/assets/wp-content/uploads/2016/02/dockerhub8-1-768x396.png 768w, https://www.josedomingo.org/pledin/assets/wp-content/uploads/2016/02/dockerhub8-1.png 1312w” sizes=”(max-width: 770px) 100vw, 770px” /></a>

A continuación configuro la imagen que voy a crear, como se puede observar si tengo distintas ramas en el repositorio github, se podrán crear distintas imágenes con tag distintos:

dockerhub9

Y finalmente, tenemos nuestro nuevo repositorio. Si esperamos un tiempo prudencial para permitir que se cree la imagen o hacemos un nuevo push en el repositorio github, podremos obtener la siguiente información:

dockerhub10

  • Build details: Detalles de la construcción de la nueva imagen, por cada modificación que hagamos en el repositorio github (push) se creará una nueva tarea de construcción de la imagen.

dockerhub12

  • Dockerfile: Obtenemos el contenido del fichero utilizado para construir la imagen.

dockerhub13

Por último podemos comprobar que tenemos acceso a la nueva imagen y que podemos descargarla:

$ docker search josedom24
NAME                     DESCRIPTION    STARS     OFFICIAL   AUTOMATED
josedom24/docker_mysql   Docker mysql   0                    [OK]
josedom24/apache2                       0                    
$ docker pull josedom24/docker_mysql

Comentar