Automatizar tu flujo de DevOps con Docker y GitHub Actions acelera cada entrega, reduce errores y libera tiempo. Aquí verás, paso a paso, cómo pasar de un simple commit a una imagen publicada en Docker Hub sin trabajo manual repetitivo, aprovechando workflows que compilan y publican por ti.
¿Por qué automatizar el despliegue de contenedores con CI/CD?
La gestión manual de muchos contenedores en producción se vuelve una tarea interminable. Con integración continua y despliegue continuo, cada commit en tu repositorio activa un flujo que construye y publica tus imágenes de forma consistente.
Menos errores humanos: ejecución repetible en cada cambio.
Velocidad de entrega: de commit a imagen publicada en minutos.
Trazabilidad: cada paso queda registrado en Actions.
Estandarización: un solo Dockerfile guía la compilación.
¿Cómo configurar el repositorio y el workflow en GitHub?
Primero se prepara el repositorio con una carpeta de CI y un Dockerfile base. Luego se crea un workflow manual en GitHub Actions que se ejecuta en la rama main y define los pasos: obtener el código, hacer login en Docker Hub, construir y publicar la imagen.
Crear carpeta de CI e incluir un Dockerfile con imagen base de NGINX y un HTML sencillo.
Subir cambios a GitHub con git.
git status
gitadd.git commit -m "Carpeta CI agregada"git push
En la pestaña Actions, crear un workflow manual y guardarlo en .github/workflows/ con nombre claro (por ejemplo, docker.yml).
Definir el workflow en YAML: nombre (docker_ci), disparador en main, un job que corre en Ubuntu y pasos secuenciales.
name: docker_ci
on:push:branches:[main]jobs:docker_build:runs-on: ubuntu-latest
steps:-name: Checkout
# obtiene el contenido del repositorio-name: Login Docker Hub
# usa secretos para autenticarse-name: Build image
# ejecuta docker build-name: Push image
# ejecuta docker push
Configurar Secrets del repositorio en Settings > Security > Secrets > Actions:
Usuario de Docker Hub: crear el secreto DOCKER_HUB_USER_NAME con el nombre de usuario.
Personal access token: generar el token en la cuenta de Docker Hub con permisos de leer, escribir y borrar; copiarlo una sola vez y guardarlo como secreto (en mayúsculas para identificarlo fácil). El token no es tu contraseña.
Habilidades y conceptos aplicados:
Repositorios y ramas: uso de main como rama de despliegue.
Workflows en YAML: definición de disparadores, jobs y pasos.
Gestión de credenciales: Secrets para autenticación segura.
Buenas prácticas: nombres de secretos en mayúsculas y verificación del token antes de cerrarlo.
¿Cómo compilar y publicar la imagen desde la acción?
Con el login realizado, el workflow ejecuta la compilación y la publicación en Docker Hub replicando lo que harías en tu terminal, pero de forma automatizada.
Construir la imagen con plataforma de Linux, etiqueta con usuario, proyecto y :latest, y ruta del Dockerfile ubicado en la carpeta de CI.
docker build --platform linux -t <usuario>/<proyecto>:latest -f CI/Dockerfile .
Publicar la imagen en Docker Hub.
docker push <usuario>/<proyecto>:latest
Ver el progreso en Actions: círculo amarillo mientras corre, registro de cada paso (construcción, publicación y limpieza tipo post login), y palomita verde al finalizar.
Confirmar en Docker Hub que la imagen aparece actualizada automáticamente gracias al Dockerfile y al workflow reciente.
Beneficios directos:
Automatización end-to-end: de commit a docker push sin pasos manuales.
Múltiples imágenes: cada Dockerfile en el repositorio puede publicarse con el mismo patrón.
Ahorro de tiempo: ya no necesitas compilar localmente ni publicar una por una.
¿Qué parte te gustaría optimizar después: estructura del YAML, manejo de etiquetas o organización de múltiples Dockerfiles? Comparte tus dudas en los comentarios.
name:DockerImageCIon:push:branches:["main"]pull_request:branches:["main"]jobs:build:name:Docker build
runs-on: ubuntu-latest
steps:- name:Checkout the repo
uses: actions/checkout@v3
- name:Build the Docker image
uses: docker/login-action@v2
with:username: ${{ secrets.DOCKERHUB_USERNAME}}password: ${{ secrets.DOCKERHUB_TOKEN}}- name:Build the Docker image
run: docker build --platform linux --tag ${{ secrets.DOCKERHUB_USERNAME}}/backenddockerci:latest -f Dockerfile.- name:Push the Docker image
run: docker push ${{ secrets.DOCKERHUB_USERNAME}}/backenddockerci:latest
```Igual se puede encontrar en el repositorio del profesor
Esta es una de las mejores clases del curso
Es una clase interesante para ver como el ciclo de devops es muy importante en el desarrollo, y que esto es solo una pequeña parte. Poder construir imagenes con el codigo fuente y luego poder desplegarlas a entornos productivos y todo esto a partir de flujos de CI/CD
jajajaja amo este profe. 10/10. Quieranlo mucho en Platzi
bitbucket:
----genial
Ese Check verde si que lo pone a uno de buenas, cuando falla empiezan los dolores de cabeza.
> [!TIP]
> A mi parecer esta es una de las mejores Clases de este curso, sin perdida.
En los recursos no esta el .yml del flujo de trabajo