
Automatiza tu Flujo de Trabajo de Desarrollo con CI/CD y Docker
TL;DR
Descubre cómo integrar Docker con el pipeline CI/CD de AWS para optimizar la entrega de software.
Introducción
El uso de herramientas de despliegue modernas ha revolucionado la forma en que gestionamos y entregamos software. Docker, una tecnología esencial para contenedorización, permite empaquetar aplicaciones y sus dependencias en contenedores portátiles. Junto con el pipeline CI/CD de AWS, Docker ofrece automatización, escalabilidad y eficiencia, adaptándose a proyectos de diferentes tamaños.
En este artículo, presentaremos una guía práctica para desplegar una aplicación Java en un contenedor Docker utilizando el pipeline CI/CD de AWS. Además, discutiremos la importancia de Docker y cómo Docker Compose facilita la gestión de aplicaciones multi-contenedor.
¿Por Qué Elegimos el CI/CD de AWS?
A AWS se destaca por su integración, escalabilidad y capacidades de automatización, haciendo su combinación con Docker altamente efectiva. Las razones principales incluyen:
- Escalabilidad: Servicios como EC2 se ajustan automáticamente a la demanda, garantizando eficiencia de costos y alta disponibilidad.
- Integración Fluida: Herramientas como CodePipeline, CodeBuild y CodeDeploy se conectan naturalmente a servicios como ECR, RDS y ALB.
- Automatización: La automatización de builds, pruebas y despliegues elimina errores manuales y ahorra tiempo.
Mejores Prácticas a Seguir
- Funciones IAM: Asigna solo los permisos necesarios para garantizar robustez en la seguridad.
- Etiquetado de Recursos: Facilita el seguimiento de costos e identificación de recursos.
- Optimización de Costos: Evalúa periódicamente el uso de recursos para mejorar la gestión de costos.
Prerrequisitos
1. Cuenta AWS
Una cuenta AWS activa con los permisos necesarios.
2. Instancia EC2
Una instancia Amazon EC2 actuará como servidor de despliegue, funcionando con un sistema operativo soportado.
3. Funciones IAM
Crea funciones IAM con los permisos apropiados:
- Función CodeDeploy: Permite que CodeDeploy interactúe con otros servicios de AWS.
- Función de la Instancia EC2: Necesaria para la comunicación con CodeDeploy y otros servicios de AWS.
4. Repositorio de Control de Código
Configura un repositorio de control de código, como AWS CodeCommit, GitLab o GitHub.
5. Amazon S3
Un bucket S3 configurado para almacenar artefactos de despliegue y registros.
Contenorizando Aplicaciones
La contenedorización es fundamental para nuestra estrategia de despliegue. Veamos cómo realizamos la contenedorización con Docker:
- Definiendo un Dockerfile: Especifica los pasos necesarios para crear la imagen de la aplicación.
# Usa la imagen oficial de OpenJDK como imagen base
FROM public.ecr.aws/docker/library/openjdk:17
# Configura el directorio de trabajo
WORKDIR /app
# Copia el archivo JAR de la aplicación al contenedor
COPY target/java-app.jar /root/ROOT.jar
# Expon la puerto de la aplicación
EXPOSE 8080
# Define el comando para ejecutar la aplicación
ENTRYPOINT /sbin/entrypoint.sh
Gestionando y Versionando Imágenes Docker con Amazon ECR
El Amazon ECR es crucial para gestionar y versionar nuestra integración Docker con AWS.
Crea un Repositorio en AWS ECR: Usar ECR garantiza control de versiones y simplifica despliegues.
Automatizando el Despliegue con AWS CodePipeline
El AWS CodePipeline gestiona el pipeline CI/CD de forma integrada:
- Fase de Fuente: Recupera el código más reciente del repositorio.
- Fase de Build (CodeBuild): Genera la imagen Docker y la envía a Amazon ECR.
Archivo BuildSpec
version: 0.2
phases:
install:
runtime-versions:
java: corretto17
docker: 20
commands:
- mvn clean install -DskipTests
pre_build:
commands:
- aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
build:
commands:
- mvn package -DskipTests
- docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .
post_build:
commands:
- docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
Configurando el Almacenamiento de Artefactos
Usa Amazon S3 como repositorio de artefactos para garantizar un almacenamiento eficaz y organizado.
1. Configurando el Bucket S3
- Accede al servicio S3 en el console de AWS.
- Selecciona crear bucket y asigna un nombre único.
- Activa la versionación para mantener el histórico de los artefactos.
2. Configurando Permisos del Bucket
Concede los permisos necesarios para permitir que CodePipeline y CodeBuild carguen artefactos.
Integrando con CodePipeline
- Crea un nuevo pipeline en AWS CodePipeline.
- Selecciona tu repositorio Git en la sección de proveedor de origen.
- Define la localización del artefacto en el bucket S3 creado anteriormente.
- Elige CodeDeploy como proveedor de despliegue.
Conclusión
La adopción de CI/CD en AWS ha transformado nuestro proceso de despliegue. Utilizando la contenedorización de Docker con servicios como EC2, ECR y CodePipeline, hemos creado un sistema automatizado y escalable. Esto permite que los equipos se concentren en la innovación y entrega de valor, mientras que AWS gestiona las complejidades.
CI/CD con Docker y AWS es una solución perfecta para modernizar flujos de trabajo de despliegue, promoviendo automatización y agilidad en las entregas.
Fuente: CI/CD con Docker y AWS: Automatizando tu Flujo de Trabajo de Desarrollo
Contenido seleccionado y editado con asistencia de IA. Fuentes originales referenciadas arriba.


