Compilar y publicar tu primera imagen
Explicación
Ahora que has actualizado la aplicación de lista de tareas pendientes, estás listo para crear una imagen de contenedor para la aplicación y compartirla en Docker Hub. Para hacerlo, deberás seguir los siguientes pasos:
- Iniciar sesión con tu cuenta de Docker
- Crear un repositorio de imágenes en Docker Hub
- Compilar la imagen de contenedor
- Publicar la imagen en Docker Hub
Antes de sumergirte en la guía práctica, a continuación se presentan algunos conceptos fundamentales que debes tener en cuenta.
Imágenes de contenedor
Si eres nuevo en el tema de las imágenes de contenedor, piénsalas como un paquete estandarizado que contiene todo lo necesario para ejecutar una aplicación, incluyendo sus archivos, configuración y dependencias. Estos paquetes pueden luego distribuirse y compartirse con otros.
Docker Hub
Para compartir tus imágenes de Docker, necesitas un lugar para almacenarlas. Aquí es donde entran en juego los registros (registries). Aunque existen muchos registros, Docker Hub es el registro predeterminado y de referencia para las imágenes. Docker Hub ofrece un lugar tanto para almacenar tus propias imágenes como para encontrar imágenes de otros, ya sea para ejecutarlas o para utilizarlas como base para tus propias imágenes.
Al elegir imágenes base, Docker Hub ofrece dos categorías de imágenes confiables mantenidas por Docker:
- Imágenes Oficiales de Docker (Docker Official Images - DOI) – Imágenes seleccionadas para software popular, que siguen las mejores prácticas y se actualizan con regularidad.
- Imágenes Protegidas de Docker (Docker Hardened Images - DHI) – Imágenes mínimas, seguras y listas para producción con casi cero CVE, diseñadas para reducir la superficie de ataque y simplificar el cumplimiento normativo. Las imágenes DHI son gratuitas y de código abierto bajo Apache 2.0.
En Desarrollar con contenedores, utilizaste las siguientes imágenes provenientes de Docker Hub, cada una de las cuales es una Imagen Oficial de Docker:
- node: proporciona un entorno Node y se utiliza como base para tus esfuerzos de desarrollo. Esta imagen también se usa como base para la imagen final de la aplicación.
- mysql: proporciona una base de datos MySQL para almacenar los elementos de la lista de tareas pendientes
- phpmyadmin: proporciona phpMyAdmin, una interfaz basada en web para la base de datos MySQL
- traefik: proporciona Traefik, un proxy inverso HTTP moderno y equilibrador de carga que enruta las solicitudes al contenedor adecuado en función de las reglas de enrutamiento
Explora el catálogo completo de contenido confiable en Docker Hub:
- Imágenes Oficiales de Docker – Imágenes seleccionadas para software popular
- Imágenes Protegidas de Docker – Imágenes de producción mínimas y con seguridad reforzada (también disponibles en dhi.io)
- Editores Verificados por Docker – Imágenes de proveedores de software verificados
- Código Abierto Patrocinado por Docker – Imágenes de proyectos OSS patrocinados
Pruébalo
En esta guía práctica, aprenderás a iniciar sesión en Docker Hub y a publicar imágenes en el repositorio de Docker Hub.
Inicia sesión con tu cuenta de Docker
Para publicar imágenes en Docker Hub, deberás iniciar sesión con una cuenta de Docker.
Abre el Docker Dashboard.
Selecciona Sign in en la esquina superior derecha.
Si es necesario, crea una cuenta y luego completa el flujo de inicio de sesión.
Una vez que hayas terminado, deberías ver que el botón Sign in se convierte en una foto de perfil.
Crear un repositorio de imágenes
Ahora que tienes una cuenta, puedes crear un repositorio de imágenes. De la misma manera que un repositorio de Git contiene código fuente, un repositorio de imágenes almacena imágenes de contenedor.
Ve a Docker Hub.
Selecciona Create repository.
En la página Create repository, ingresa la siguiente información:
- Repository name:
getting-started-todo-app - Short description: siéntete libre de ingresar una descripción si lo deseas
- Visibility: selecciona Public para permitir que otros descarguen tu aplicación de lista de tareas personalizada
- Repository name:
Selecciona Create para crear el repositorio.
Compilar y publicar la imagen
Ahora que tienes un repositorio, estás listo para compilar y publicar tu imagen. Una nota importante es que la imagen que estás compilando amplía la imagen de Node, lo que significa que no necesitas instalar ni configurar Node, yarn, etc. Puedes concentrarte en lo que hace que tu aplicación sea única.
¿Qué es una imagen/Dockerfile?
Sin profundizar demasiado todavía, piensa en una imagen de contenedor como un único paquete que contiene todo lo necesario para ejecutar un proceso. En este caso, contendrá un entorno Node, el código del backend y el código compilado de React.
Cualquier máquina que ejecute un contenedor utilizando la imagen podrá entonces ejecutar la aplicación tal como fue compilada sin necesidad de tener nada más preinstalado en la máquina.
Un
Dockerfilees un script basado en texto que proporciona el conjunto de instrucciones sobre cómo compilar la imagen. Para este inicio rápido, el repositorio ya contiene el Dockerfile.
Para comenzar, clona o descarga el proyecto como un archivo ZIP en tu máquina local.
$ git clone https://github.com/docker/getting-started-todo-appY una vez el proyecto esté clonado, navega al nuevo directorio creado por la clonación:
$ cd getting-started-todo-appCompila el proyecto ejecutando el siguiente comando, reemplazando
DOCKER_USERNAMEcon tu nombre de usuario.$ docker build -t <DOCKER_USERNAME>/getting-started-todo-app .Por ejemplo, si tu nombre de usuario de Docker fuera
mobydock, ejecutarías lo siguiente:$ docker build -t mobydock/getting-started-todo-app .Para verificar que la imagen existe localmente, puedes usar el comando
docker image ls:$ docker image lsVerás una salida similar a la siguiente:
REPOSITORY TAG IMAGE ID CREATED SIZE mobydock/getting-started-todo-app latest 1543656c9290 2 minutes ago 1.12GB ...Para publicar la imagen, utiliza el comando
docker push. Asegúrate de reemplazarDOCKER_USERNAMEcon tu nombre de usuario:$ docker push <DOCKER_USERNAME>/getting-started-todo-appDependiendo de tu velocidad de subida, esto puede tardar un momento en publicarse.
Abre Visual Studio Code. Asegúrate de tener instalada la extensión de Docker para VS Code desde el Extension Marketplace.

En el menú File, selecciona Open Folder. Elige Clone Git Repository y pega esta URL: https://github.com/docker/getting-started-todo-app

Haz clic derecho en el
Dockerfiley selecciona el elemento de menú Build Image....

En el cuadro de diálogo que aparece, ingresa un nombre como
DOCKER_USERNAME/getting-started-todo-app, reemplazandoDOCKER_USERNAMEcon tu nombre de usuario de Docker.Después de presionar Enter, verás aparecer una terminal donde se llevará a cabo la compilación. Una vez finalizada, siéntete libre de cerrar la terminal.
Abre la extensión de Docker para VS Code seleccionando el logotipo de Docker en el menú de navegación izquierdo.
Busca la imagen que creaste. Tendrá un nombre como
docker.io/DOCKER_USERNAME/getting-started-todo-app.Expande la imagen para ver las etiquetas (o diferentes versiones) de la misma. Deberías ver una etiqueta llamada
latest, que es la etiqueta predeterminada que se le asigna a una imagen.Haz clic derecho en el elemento latest y selecciona la opción Push....

Presiona Enter para confirmar y luego observa cómo se publica tu imagen en Docker Hub. Dependiendo de tu velocidad de subida, la publicación de la imagen puede tardar un momento.
Una vez que la subida haya finalizado, siéntete libre de cerrar la terminal.
Resumen
Antes de continuar, tómate un momento para reflexionar sobre lo que ha sucedido aquí. En pocos instantes, has podido compilar una imagen de contenedor que empaqueta tu aplicación y publicarla en Docker Hub.
En adelante, querrás recordar que:
Docker Hub es el registro de referencia para encontrar contenido confiable. Docker ofrece una colección de contenido confiable, compuesta por Imágenes Oficiales de Docker, Editores Verificados por Docker y Software de Código Abierto Patrocinado por Docker, para usar directamente o como base para tus propias imágenes.
Docker Hub proporciona un mercado para distribuir tus propias aplicaciones. Cualquiera puede crear una cuenta y distribuir imágenes. Aunque estés distribuyendo públicamente la imagen que creaste, los repositorios privados pueden garantizar que tus imágenes sean accesibles solo para usuarios autorizados.
Uso de otros registros
Aunque Docker Hub es el registro predeterminado, los registros están estandarizados y son interoperables gracias a la Open Container Initiative. Esto permite a las empresas y organizaciones ejecutar sus propios registros privados. Con bastante frecuencia, el contenido confiable se replica (o copia) desde Docker Hub en estos registros privados.
Siguientes pasos
Ahora que has compilado una imagen, es hora de analizar por qué tú, como desarrollador, deberías aprender más sobre Docker y cómo te ayudará en tus tareas diarias.
Qué sigue