Acerca del proyecto
Para poder publicar o descargar imagenes del repositorio de docker hub o de cualquier repositorio de imágenes usando docker tenemos dos comandos que permite hacer estas acciones, estos son e push
y pull
, en este post aprenderemos a usar estos dos comandos para bajar una imagen, hacer cambios y luego crear un repositorio y subir la imagen a docker hub.
Conocimiento previo
Para realizar este proyecto se requiere conocimiento previo de los siguientes temas, si aun no has trabajado con lo que se menciona en la siguiente tabla, allí están los links a los post para que puedas dar un repaso adicional o puedas recordar el conocimiento necesario para poder realizar este proyecto.
Proyecto | Descripción |
---|---|
Introducción docker | Iniciamos con docker, donde conoceremos los temas que vamos a trabajar en este curso, aprenderemos a usar este gestor de contenedores con todas sus funcionalidades, ademas realizaremos ejercicios prácticos para reforzar el conocimiento aprendido. |
Ciclo de vida del contenedor docker | Aprenderás el ciclo de vida del contenedor en docker y los comandos básicos para poder ejecutar acciones sobre un contenedor. Estos comandos son utilizados en todo el ciclo de vida del contenedor y permiten realizar diferentes acciones para cada estados que puede tener el contenedor. |
Docker comandos básicos | Vamos a ver los comandos con los que podemos crear, gestionar e ingresar a la terminal bash de un contenedor, estos comandos son útiles y necesarios para poder realizar los ejemplos que tiene este curso, así que es muy importante que los aprendas. |
Docker commit | Si queremos persistir los cambios realizados en un contenedor, podemos hacer uso del comando commit, este permite crear una nueva imagen a partir del contenedor y la capa de escritura donde estamos creando las nuevas funcionalidades de la aplicación. |
Docker Hub
Docker hub es un repositorio público de imágenes en la nube para docker, mantenido por el propio docker donde podemos encontrar multitud de imágenes gratuitas en repositorios públicos y privados que se pueden descargar y usar. Adicionalmente podemos crear nuestros propios repositorios donde se cargan las imágenes que hemos creado y poder compartirlas a quien la necesite..
Docker hub tiene las siguientes características:
- Repositorios Para la gestión (push and pull) de las imágenes.
- Equipos y organizaciones Para la gestión del acceso a los depósitos privados de imágenes.
- Imágenes oficiales Son imágenes de alta calidad de los contenedores proporcionadas por Docker.
- Imágenes de editores Son imágenes de alta calidad de contenedores proporcionadas por proveedores externos. Estás imágenes certificadas, también incluyen soporte y garantía de compatibilidad con Docker Enterprise.
- Creaciones Imágenes de contenedores propias creadas desde GitHub y Bitbucket, que luego son cargadas a Docker Hub.
- Webhooks Acciones programadas sobre un repositorio cargado para integrar Docker Hub con otros servicios.
¿Como usar docker hub?
Primero vamos a ingresar a el sitio oficial del repositorio que es docker hub donde tenemos la siguiente pantalla:
En esta pantalla tenemos tres elementos principales, el primero es crear una cuenta si aun no la tienes, la opción de iniciar sesión para acceder a su repositorio y por ultimo un buscador donde podemos encontrar por palabras clave las imágenes que necesitamos.
Crear cuenta en docker hub
Si aun no tienes una cuenta en docker hub, puedes crear una cuenta, es gratuita y cuenta con limitaciones que puede leer en los precios de docker. El formulario de registro es el siguiente:
Podemos observar que el formulario no pide muchos datos, es muy importante el docker ID ya que este es el nombre del repositorio y este es con el que vamos a interactuar con los comandos pull
y push
.
Iniciar sesión docker hub
Si tenemos o acabamos de crear una cuenta, ya podemos ingresar al administrador de los repositorios para ello podemos iniciar sesión desde el siguiente formulario, en donde nos pedirá que coloquemos el docker ID y la contraseña:
Docker hub repositorio de imágenes
Al iniciar sesión re-direccionara al repositorio principal de docker donde encontraremos las imágenes creadas y cargadas por nosotros, aquí podemos realizar varios acciones, estas las veremos en otro post para no alargar el contenido de este post.
Iniciar sesión en docker
Ahora vamos a realizar el inicio de sesión pero desde la terminal de comandos, esto lo hacemos para que podamos acceder al repositorio de docker hub y cargar las imágenes creadas a docker, para ello usamos el siguiente comando:
c:\code>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:
Password:
Login Succeeded
Nomenclatura para las imágenes
Lo siguiente es preparar tu imagen para que sea aceptada en este registro público. Todos los registros siguen una nomenclatura a la hora de almacenar los repositorios. En el caso de Docker Hub necesitamos que nuestra imagen se llame nombre_de_usuario/nombre_del_repositorio:etiqueta. En nuestro caso, recuerda que el nombre de nuestra imagen era nodejs-webapp, por lo que, en mi caso, debería cambiarlo a codigoelectronica/nodejs-webapp:v1. Utiliza docker tag para generar una variante de tu imagen con ese nombre.
Docker pull
Como mencionamos en el apartado anterior, la mayoría de las imágenes se encuentran en un repositorio ya sea público o privado, o principalmente en docker hub, en estos repositorios contienen las imágenes bases prediseñadas para que puedan crear sus proprias imágenes; ahora para poder usar estas imágenes en nuestros equipos y manipularlas es necesarios hacer la descarga, para ello usamos el comando docker pull
, el cual permite extraer la imagen de un repositorio.[1].
c:\code>docker pull debian
Using default tag: latest
latest: Pulling from library/debian
0ecb575e629c: Pull complete
Digest: sha256:1092695e843ad975267131f27a2b523128c4e03d2d96574bbdd7cf949ed51475
Status: Downloaded newer image for debian:latest
docker.io/library/debian:latest
c:\code>docker images ls
REPOSITORY TAG IMAGE ID CREATED SIZE
debian latest 5890f8ba95f6 2 weeks ago 114MB
También podemos descargar una versión especifica de la imagen, veamos el siguiente ejemplo:
c:\code>docker pull debian:jessie
jessie: Pulling from library/debian
1282799df2f8: Pull complete
Digest: sha256:40d6faa8c33e8ab03428ad97fc109c369fb510d99f4700df9058940ac9944f09
Status: Downloaded newer image for debian:jessie
docker.io/library/debian:jessie
c:\code>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
debian jessie 51cc11b6a471 3 weeks ago 129MB
debian latest 5890f8ba95f6 3 weeks ago 114MB
Con esto podemos trabajar con la ultima versión de alguna imagen o descargar una versión especifica.
Docker push
Para compartir o subir las imágenes creadas desde docker, tenemos a disposición un comando que nos permite realizar esta acción, docker push
permite cargar las images creadas a cualquier repositorio principalmente a docker hub, para entender este comando realicemos un ejemplo.[2]
Primero vamos a descargar una imagen, con esta imagen creamos un contenedor e ingresamos a realizar los cambios que necesitamos para nuestro proyecto, en este caso solo la voy a actualizar para el ejemplo.
c:\code>docker run -it ubuntu bash
root@0f96e600bc7f:/# apt-get update
Get:1 http://archive.ubuntu.com/ubuntu focal InRelease [265 kB]
Get:2 http://security.ubuntu.com/ubuntu focal-security InRelease [109 kB]
Get:3 http://security.ubuntu.com/ubuntu focal-security/universe amd64 Packages [671 kB]
....
Get:17 http://archive.ubuntu.com/ubuntu focal-backports/universe amd64 Packages [4301 B]
Fetched 17.2 MB in 38s (456 kB/s)
Reading package lists... Done
Luego salimos de la imagen para poder efectuar los cambios, para ello usamos docker commit
sobre el contenedor para crear la imagen nueva, en este paso le podemos cambiar el nombre.
c:\code>docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0f96e600bc7f ubuntu "bash" About a minute ago Up About a minute hungry_napier
c:\code>docker container commit 0f96e600bc7f ubuntu-update:latest
sha256:4fcc71f0598f6c8452eef1ed67eaba8c1d149d0c49637e8bd3114d66d5401251
c:\code>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-update latest 4fcc71f0598f 13 seconds ago 100MB
Ahora vamos a crear un tag a la imagen para indicar la versión que subiremos al repositorio, para ello seguimos el siguiente ejemplo donde tenemos en cuenta la nomenclatura para crear la imagen.
c:\code>docker tag ubuntu-update codigoelectronica/ubuntu-update:v1
c:\code>docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu-update latest 4fcc71f0598f 5 hours ago 100MB
codigoelectronica/ubuntu-update v1 4fcc71f0598f 5 hours ago 100MB
Por ultimo realizamos la carga de la imagen al repositorio, para ello vemos el ejemplo a continuación:
docker push codigoelectronica/ubuntu-update:v1
The push refers to repository [docker.io/codigoelectronica/ubuntu-update]
daed74d62261: Pushed
02473afd360b: Mounted from library/ubuntu
dbf2c0f42a39: Mounted from library/ubuntu
9f32931c9d28: Mounted from library/ubuntu
v1: digest: sha256:eb53f8ddadcd4d244038f64a40244ff9d4b9c151757519512d2789ea2272301c size: 1155
Observe que indicamos el repositorio y la imagen que vamos a cargar a docker hub, antes de hacer esta carga debemos iniciar sesión desde la terminal de comandos para poder hacer esta acción.
Referencias
[1] docker pull https://docs.docker.com/engine/reference/commandline/pull/, Consultado Marzo 2021
[2] docker push https://docs.docker.com/engine/reference/commandline/push/, Consultado Marzo 2021