Saltar a contenido

Docker Hub, ¿Que es, para que sirve?

Docker Hub es un repositorio de artefactos Docker. Al igual que Maven tiene distintas plataformas para gestionar y distribuir software de naturaleza Maven, lo mismo pasa con los artefactos Docker, que existen plataformas para la distribucion de artefactos Docker.

Docker Hub es la plataforma global y publica donde podemos publicar nuestros artefactos Docker.

Publicar imagen en docker Hub

Para este ejemplo nos vamos a basar en crear una imagen propia basada en una imagen ya existente.

1. Crear un file .Dockerfile

Especificamos nuestra imagen y si esta basada en alguna imagen existente, en este caso en busybox. Y añadimos un punto de ejecucion (CMD) para cuando se ejecute la imagen.

FROM busybox:latest
CMD ["date"]

2. Construimos la imagen en local

Especificamos el nombre de la imagen que queremos crear, en este caso demotest_image

$ docker build -t demotest_image .
Sending build context to Docker daemon  75.26kB
Step 1/5 : FROM busybox:latest
 ---> beae173ccac6
Step 2/5 : LABEL version="1.0"
 ---> Running in 19629bb10c2d
Removing intermediate container 19629bb10c2d
 ---> 336971ddf3ee
Step 3/5 : LABEL description="Demo test Image"
 ---> Running in afca3593e1f6
Removing intermediate container afca3593e1f6
 ---> 99366c37d301
Step 4/5 : LABEL author="Daniel Peña Perez | danipenaperez@gmail.com"
 ---> Running in 55e68ab00a78
Removing intermediate container 55e68ab00a78
 ---> c392bd51fe76
Step 5/5 : CMD ["date"]
 ---> Running in 81ccf0032deb
Removing intermediate container 81ccf0032deb
 ---> 4844e8e78976
Successfully built 4844e8e78976
Successfully tagged demotest_image:latest

3. Consultamos la imagen creada

Podemos ver la definicion que ha creado haciendo un inspect de la imagen:

$ docker inspect demotest_image
[
    {
        "Id": "sha256:4844e8e78976134efb5323b4225048922903b4af7643c41b9630b292503a3d7d",
        "RepoTags": [
            "demotest_image:latest"
        ],
        "RepoDigests": [],
...
...

4. Ejecutamos la imagen

Utilizamos docker run para probar la ejecucion de la imagen. Si recordamos, el CMD imprimía un Date

$  docker run -it demotest_image
Wed May 22 12:20:30 UTC 2024

5. Publicando en DockerHub

Primero nos logueamos con el cliente docker al artifactory destinno, en este caso DockerHub

$ 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: danipenaperez
Password: xxxxxx
WARNING! Your password will be stored unencrypted in /home/dpena/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store

Login Succeeded

Tageamos la imagen en local, vamos a indicar que sea la imagen:latest y que este bajo nuestro namespace en dockerhub (en mi caso danipenaerez)

docker tag demotest_image:latest danipenaperez/demotest_image:latest

Pusheamos la imagen (automaticamente se creara el repositorio correspondiente en dockerhub, es decir no hace falta crear el repo en la web)

$ docker push danipenaperez/demotest_image:latest
The push refers to repository [docker.io/danipenaperez/demotest_image]
01fd6df81c8e: Mounted from library/busybox 
latest: digest: sha256:6c8722ea0cb9d15fca0ea15012989f3a0aba66fb85186b5484a03c8473c4b45f size: 527

Consultamos la imagen en nuestra cuenta dockerHub dockerhub_image_published.png

Comprobacion. Borramos la imagen local y la intentamos ejecutar asi veremos como cae la imagen desde dockerHub:

docker images
REPOSITORY                                                                      TAG                   IMAGE ID       CREATED          SIZE
danipenaperez/demotest_image                                                    latest                4844e8e78976   13 minutes ago   1.24MB
Borramos la imagen

$ docker image rm -f danipenaperez/demotest_image:latest 
Untagged: danipenaperez/demotest_image:latest
Untagged: danipenaperez/demotest_image@sha256:79d1dd0936899f5312136b51a2f41470aa880c02fdb941dccff044b857baaf9f
Deleted: sha256:4844e8e78976134efb5323b4225048922903b4af7643c41b9630b292503a3d7d
Deleted: sha256:c392bd51fe76c55f478c430be484ffa1d94c739c46dd209da616a58390829190
Deleted: sha256:99366c37d30181f487be17b8fbd743df46d8b56d53f3eb581f4c9985fe933c52
Deleted: sha256:336971ddf3ee0e44d3953028c6434793d77dbd67af248dd7a24f6fe871496813

Realizamos la ejecucion y como no existe en local, intentara traer la imagen de dockerhub:

$ docker run -it danipenaperez/demotest_image
Unable to find image 'danipenaperez/demotest_image:latest' locally
latest: Pulling from danipenaperez/demotest_image
5cc84ad355aa: Already exists 
Digest: sha256:79d1dd0936899f5312136b51a2f41470aa880c02fdb941dccff044b857baaf9f
Status: Downloaded newer image for danipenaperez/demotest_image:latest
Wed May 22 12:33:17 UTC 2024

Codigo

Tienes el codigo fuente de esta demo en https://github.com/deadveloper666/dockerhub-tutorial