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.
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
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)
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
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
$ 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