Puntos de control
Publish your container image to Container Registry
/ 100
Introducción a Docker
GSP055
Descripción general
Docker es una plataforma abierta para desarrollar, enviar y ejecutar aplicaciones. Permite separar las aplicaciones de la infraestructura y tratar a la infraestructura como una aplicación administrada. Docker ayuda a enviar, implementar y probar código más rápido y a acortar el ciclo entre su escritura y ejecución.
Para esto, combina las funciones de creación de contenedores de kernel con flujos de trabajo y herramientas que ayudan a implementar y administrar aplicaciones.
Los contenedores de Docker pueden usarse directamente en Kubernetes, lo que permite ejecutarlos de manera sencilla en Kubernetes Engine. Después de aprender los aspectos esenciales de Docker, contarás con las habilidades para empezar a desarrollar aplicaciones de Kubernetes y alojadas en contenedores.
Objetivos
En este lab, aprenderás a hacer lo siguiente:
- Compilar, ejecutar y depurar contenedores de Docker
- Extraer imágenes de Docker desde Docker Hub y Google Artifact Registry
- Enviar imágenes de Docker a Google Artifact Registry
Requisitos previos
Este es un lab de nivel introductorio. Parte de la suposición de que la experiencia en Docker y contenedores que tiene el alumno es escasa o nula. Contar con conocimientos de Cloud Shell y la línea de comandos es recomendable, pero no es obligatorio.
Configuración y requisitos
Antes de hacer clic en el botón Comenzar lab
Lee estas instrucciones. Los labs son cronometrados y no se pueden pausar. El cronómetro, que comienza a funcionar cuando haces clic en Comenzar lab, indica por cuánto tiempo tendrás a tu disposición los recursos de Google Cloud.
Este lab práctico te permitirá realizar las actividades correspondientes en un entorno de nube real, no en uno de simulación o demostración. Para ello, se te proporcionan credenciales temporales nuevas que utilizarás para acceder a Google Cloud durante todo el lab.
Para completar este lab, necesitarás lo siguiente:
- Acceso a un navegador de Internet estándar (se recomienda el navegador Chrome)
- Tiempo para completar el lab: Recuerda que, una vez que comienzas un lab, no puedes pausarlo.
Cómo iniciar tu lab y acceder a la consola de Google Cloud
-
Haga clic en el botón Comenzar lab. Si debe pagar por el lab, se abrirá una ventana emergente para que seleccione su forma de pago. A la izquierda, se encuentra el panel Detalles del lab, que tiene estos elementos:
- El botón Abrir la consola de Google Cloud
- El tiempo restante
- Las credenciales temporales que debe usar para el lab
- Otra información para completar el lab, si es necesaria
-
Haz clic en Abrir la consola de Google Cloud (o haz clic con el botón derecho y selecciona Abrir el vínculo en una ventana de incógnito si ejecutas el navegador Chrome).
El lab inicia recursos y abre otra pestaña en la que se muestra la página de acceso.
Sugerencia: Ordene las pestañas en ventanas separadas, una junto a la otra.
Nota: Si ves el diálogo Elegir una cuenta, haz clic en Usar otra cuenta. -
De ser necesario, copia el nombre de usuario a continuación y pégalo en el diálogo Acceder.
{{{user_0.username | "Username"}}} También puedes encontrar el nombre de usuario en el panel Detalles del lab.
-
Haz clic en Siguiente.
-
Copia la contraseña que aparece a continuación y pégala en el diálogo Te damos la bienvenida.
{{{user_0.password | "Password"}}} También puedes encontrar la contraseña en el panel Detalles del lab.
-
Haz clic en Siguiente.
Importante: Debes usar las credenciales que te proporciona el lab. No uses las credenciales de tu cuenta de Google Cloud. Nota: Usar tu propia Cuenta de Google podría generar cargos adicionales. -
Haga clic para avanzar por las páginas siguientes:
- Acepta los Términos y Condiciones.
- No agregues opciones de recuperación o autenticación de dos factores (esta es una cuenta temporal).
- No te registres para obtener pruebas gratuitas.
Después de un momento, se abrirá la consola de Google Cloud en esta pestaña.
Activa Cloud Shell
Cloud Shell es una máquina virtual que cuenta con herramientas para desarrolladores. Ofrece un directorio principal persistente de 5 GB y se ejecuta en Google Cloud. Cloud Shell proporciona acceso de línea de comandos a tus recursos de Google Cloud.
- Haz clic en Activar Cloud Shell en la parte superior de la consola de Google Cloud.
Cuando te conectes, habrás completado la autenticación, y el proyecto estará configurado con tu PROJECT_ID. El resultado contiene una línea que declara el PROJECT_ID para esta sesión:
gcloud
es la herramienta de línea de comandos de Google Cloud. Viene preinstalada en Cloud Shell y es compatible con la función de autocompletado con tabulador.
- Puedes solicitar el nombre de la cuenta activa con este comando (opcional):
-
Haz clic en Autorizar.
-
Ahora, el resultado debería verse de la siguiente manera:
Resultado:
- Puedes solicitar el ID del proyecto con este comando (opcional):
Resultado:
Resultado de ejemplo:
gcloud
, consulta la guía con la descripción general de gcloud CLI en Google Cloud.
Tarea 1: Hello World
- En Cloud Shell, escribe el comando siguiente para ejecutar un contenedor de Hello World y empezar.
(Resultado del comando)
Este contenedor simple muestra Hello from Docker!
en la pantalla. Si bien el comando es simple, observa en el resultado la cantidad de pasos que ejecutó. El daemon de Docker buscó la imagen hello-world a nivel local, pero no la encontró. Luego, extrajo la imagen desde un registro público llamado Docker Hub, creó un contenedor a partir de esa imagen y ejecutó el contenedor por ti.
- Ejecuta el comando siguiente para consultar la imagen del contenedor que se extrajo de Docker Hub:
(Resultado del comando)
Esta es la imagen extraída del registro público Docker Hub. El ID de imagen está en formato hash SHA256. Este campo especifica la imagen de Docker que se aprovisionó. Cuando el daemon de Docker no puede encontrar una imagen a nivel local, la busca en el registro público de forma predeterminada.
- Vuelve a ejecutar el contenedor:
(Resultado del comando)
Ten en cuenta que, la segunda vez que ejecutas esto, el daemon de Docker encontrará la imagen en tu registro local y ejecutará el contenedor a partir de ella. No es necesario extraer la imagen de Docker Hub.
- Por último, ejecuta el comando siguiente para observar los contenedores que están en ejecución:
(Resultado del comando)
No hay contenedores en ejecución. Ya saliste de los contenedores de hello-world que ejecutaste con anterioridad.
- Para ver todos los contenedores, incluso los que terminaron de ejecutarse, ejecuta
docker ps -a
:
(Resultado del comando)
Aquí se muestra el Container ID
, un UUID que genera Docker para identificar el contenedor, junto con otros metadatos de la ejecución. En Names
, se muestran los nombres de los contenedores que también se generan de forma aleatoria, pero se pueden especificar con el comando docker run --name [container-name] hello-world
.
Tarea 2: Compilación
En esta sección, compilarás una imagen de Docker basada en una aplicación de nodo sencilla.
- Ejecuta el comando siguiente para crear una carpeta llamada
test
y cambiar a ella.
- Crea un
Dockerfile
:
Este archivo le indica al daemon de Docker cómo compilar la imagen.
- La línea inicial especifica la imagen superior base que, en este caso, es la imagen de Docker oficial de la versión con asistencia a largo plazo (LTS) del nodo.
- En la segunda, configuras el directorio de trabajo (actual) del contenedor.
- En la tercera, agregas el contenido del directorio actual (indicado por
"."
) al contenedor. - Luego, expones el puerto del contenedor, de manera que acepte conexiones en ese puerto. Por último, ejecutas el comando del nodo para iniciar la aplicación.
Dockerfile
. Ahora, escribirás la aplicación del nodo y, después, compilarás la imagen.
- Ejecuta los comandos siguientes para crear la aplicación del nodo:
Este es un servidor HTTP simple que escucha en el puerto 80 y muestra “Hello World”.
Ahora, compila la imagen.
- Observa otra vez que está el
“.”
, que hace referencia al directorio actual. Por ello, debes ejecutar este comando desde el directorio en el que se encuentra el Dockerfile:
Es posible que este comando tarde un par de minutos en terminar de ejecutarse. Cuando termine, el resultado debería ser similar al siguiente:
La marca -t
es para otorgar un nombre y una etiqueta a una imagen con la sintaxis name:tag
. El nombre de la imagen es node-app
y la etiqueta
es 0.1
. Se recomienda usar etiquetas cuando se compilan imágenes de Docker. Si no especificas una etiqueta, por configuración predeterminada será latest
y será más difícil distinguir las imágenes más recientes de las anteriores. Además, observa que cada línea del Dockerfile
anterior genera capas intermedias del contenedor a medida que se compila la imagen.
- Ahora, ejecuta el comando siguiente para observar las imágenes que compilaste:
El resultado debería ser similar al siguiente:
Ten en cuenta que node
es la imagen base, y node-app
es la imagen que compilaste. No se puede quitar node
si no quitas primero node-app
. El tamaño de la imagen es relativamente pequeño en comparación con las VMs. Otras versiones de la imagen del nodo, como node:slim
y node:alpine
pueden proporcionar imágenes aún más pequeñas para facilitar la portabilidad. El tema de reducir los tamaños de los contenedores se explora más a fondo en los temas avanzados. Puedes ver todas las versiones en el repositorio oficial del nodo.
Tarea 3: Realiza la ejecución
- Usa este código para ejecutar contenedores basados en la imagen que compilaste:
(Resultado del comando)
La marca --name
permite asignar un nombre al contenedor, si así lo deseas. La marca -p
indica a Docker que asigne el puerto 4000 del host al puerto 80 del contenedor. Ahora puedes alcanzar el servidor en http://localhost:4000
. Sin la asignación de puertos, no podrás alcanzar el contenedor en localhost.
- Abre otra terminal (en Cloud Shell, haz clic en el ícono
+
) y prueba el servidor:
(Resultado del comando)
El contenedor se ejecutará mientras se esté ejecutando la terminal inicial. Si quieres que el contenedor se ejecute en segundo plano (no vinculado a la sesión de la terminal), debes especificar la marca -d
.
- Cierra la terminal inicial y, luego, ejecuta el comando siguiente para detener y quitar el contenedor:
- Ahora, ejecuta el comando siguiente para iniciar el contenedor en segundo plano:
(Resultado del comando)
- Observa que el contenedor se ejecuta en el resultado de
docker ps
. Para ver los registros, ejecutadocker logs [container_id]
.
docker logs 17b
si el ID del contenedor es 17bcaca6f…
(Resultado del comando)
Ahora, modifica la aplicación.
- En Cloud Shell, abre el directorio de prueba que creaste con anterioridad en el lab:
- Edita
app.js
con el editor de texto que prefieras (por ejemplo, nano o vim) y reemplaza “Hello World” por otra cadena:
- Compila esta imagen nueva y agrégale la etiqueta
0.2
:
(Resultado del comando)
Ten en cuenta que, en el paso 2, se usa una capa de caché existente. A partir del paso 3, las capas se modifican debido a que hiciste un cambio en app.js
.
- Ejecuta otro contenedor con la nueva versión de la imagen. Observa cómo asignamos el puerto 8080 del host, en vez del 80. No se puede usar el puerto 4000 del host porque ya está en uso.
(Resultado del comando)
- Prueba los contenedores con el comando siguiente:
(Resultado del comando)
- Ahora, prueba el primer contenedor que creaste con el siguiente comando:
(Resultado del comando)
Tarea 4: Depuración
Ahora que te familiarizaste con la creación y ejecución de contenedores, revisa las prácticas de depuración.
- Para ver los registros de un contenedor, usa
docker logs [container_id]
. Si quieres seguir los resultados del registro mientras se ejecuta el contenedor, usa la opción-f
.
(Resultado del comando)
En algunos casos, necesitarás iniciar una sesión de Bash interactiva dentro del contenedor en ejecución.
- Puedes usar
docker exec
para hacerlo. Abre otra terminal (en Cloud Shell, haz clic en el ícono +) y, luego, ingresa el comando siguiente:
Las marcas -it
permiten interactuar con un contenedor, ya que asignan un seudo-TTY y mantienen stdin abierto. Observa que Bash se ejecutó en el directorio WORKDIR
(/app) especificado en el Dockerfile
. A partir de aquí, tienes una sesión de shell interactiva dentro del contenedor que depurarás.
(Resultado del comando)
- Observa el directorio con el comando siguiente:
(Resultado del comando)
- Sal de la sesión de Bash:
- Para examinar los metadatos de un contenedor en Docker, usa Docker inspect:
(Resultado del comando)
- Usa
--format
para inspeccionar campos específicos del JSON que se devuelve. Por ejemplo:
(Resultado de ejemplo)
Asegúrate de consultar los recursos siguientes de la documentación de Docker para conocer más sobre la depuración:
Tarea 5: Publicación
Ahora enviarás la imagen a Google Artifact Registry. Después, quitarás todos los contenedores y las imágenes para simular un entorno nuevo, y extraerás los contenedores y los ejecutarás. Esto demostrará la portabilidad de los contenedores de Docker.
Para enviar imágenes a tu registro privado alojado en Artifact Registry, debes etiquetar las imágenes con el nombre de un registro. El formato debe ser <repositorio-regional>-docker.pkg.dev/mi-proyecto/mi-repositorio/mi-imagen
.
Crea el repositorio de Docker de destino (con la consola de Cloud)
Debes crear un repositorio para poder enviarle imágenes. El envío de una imagen no activa la creación de un repositorio y la cuenta de servicio de Cloud Build no tiene permisos para crear repositorios.
-
En el Menú de navegación, en CI/CD navega a Artifact Registry > Repositorios.
-
Haz clic en el ícono + CREAR REPOSITORIO junto a los repositorios.
-
Asigna el nombre
my-repository
al repositorio. -
Elige Docker como formato.
-
En Tipo de ubicación, elige Región y, luego, la ubicación:
. -
Haz clic en Crear.
Configura la autenticación
Antes de poder enviar o extraer imágenes, debes configurar Docker para que use Google Cloud CLI con el objetivo de autenticar las solicitudes enviadas a Artifact Registry.
- Para configurar la autenticación en los repositorios de Docker de la región
, ejecuta el comando siguiente en Cloud Shell:
- Escribe
Y
cuando se te solicite.
El comando actualiza tu configuración de Docker. Ahora puedes conectarte con Artifact Registry en tu proyecto de Google Cloud para enviar y extraer imágenes.
Crea un repositorio de Artifact Registry (con la CLI)
- Ejecuta los siguientes comandos para crear un repositorio de artefactos.
Envía el contenedor a Artifact Registry
- Cambia al directorio con tu Dockerfile.
- Ejecuta el comando para etiquetar
node-app:0.2
.
- Ejecuta el comando siguiente para revisar tus imágenes de Docker compiladas.
(Resultado del comando)
- Envía esta imagen a Artifact Registry.
Resultado del comando (el tuyo puede variar):
-
Cuando el envío finalice, en el menú de navegación de CI/CD, navega a Artifact Registry > Repositorios.
-
Haz clic en my-repository. Deberías ver que se creó el contenedor de Docker
node-app
:
Prueba la imagen
Podrías iniciar una nueva VM, conectarte a ella a través de SSH y, luego, instalar gcloud. Para hacerlo más simple, solo quita todos los contenedores y las imágenes para simular un entorno nuevo.
- Detén y quita todos los contenedores:
Debes quitar las imágenes secundarias (de node:lts
) antes de quitar la imagen del nodo.
- Ejecuta el comando siguiente para quitar todas las imágenes de Docker.
(Resultado del comando)
En este punto, deberías tener un entorno que es casi nuevo.
- Extrae la imagen y ejecútala.
- Ejecuta un comando curl en relación con el contenedor en ejecución.
(Resultado del comando)
Prueba la tarea completada
Haz clic en Revisar mi progreso para verificar la tarea realizada. Si publicaste con éxito una imagen de contenedor en Artifact Registry, verás una puntuación de evaluación.
Aquí se demuestra la portabilidad de los contenedores. Siempre que Docker esté instalado en el host (ya sea una instalación local o en una VM), puedes extraer imágenes de registros privados o públicos y ejecutar contenedores según esa imagen. No hay dependencias de aplicación que se deban instalar en el host, excepto Docker.
¡Felicitaciones!
¡Felicitaciones! En este lab, realizaste varias actividades prácticas, como ejecutar contenedores basados en imágenes públicas de Docker Hub. También compilaste tus propias imágenes de contenedor y las enviaste correctamente a Google Artifact Registry. Además, el lab te permitió desarrollar habilidades para depurar contenedores en ejecución de manera eficaz y obtuviste experiencia en la ejecución de contenedores basados en imágenes que se extrajeron de Google Artifact Registry, lo que mejoró tu comprensión y dominio en Docker.
Próximos pasos y más información
- Referencia de Dockerfile
- Docker Hub
- Más información acerca de Docker en la documentación oficial
- Documentación de Artifact Registry
Capacitación y certificación de Google Cloud
Recibe la formación que necesitas para aprovechar al máximo las tecnologías de Google Cloud. Nuestras clases incluyen habilidades técnicas y recomendaciones para ayudarte a avanzar rápidamente y a seguir aprendiendo. Para que puedas realizar nuestros cursos cuando más te convenga, ofrecemos distintos tipos de capacitación de nivel básico a avanzado: a pedido, presenciales y virtuales. Las certificaciones te ayudan a validar y demostrar tus habilidades y tu conocimiento técnico respecto a las tecnologías de Google Cloud.
Última actualización del manual: 29 de febrero de 2024
Prueba más reciente del lab: 29 de febrero de 2024
Copyright 2024 Google LLC. All rights reserved. Google y el logotipo de Google son marcas de Google LLC. Los demás nombres de productos y empresas pueden ser marcas de las respectivas empresas a las que estén asociados.