Introducción
En este módulo, exploraremos dos herramientas fundamentales en el ecosistema de CI/CD: Docker y Kubernetes. Docker facilita la creación y gestión de contenedores, mientras que Kubernetes se encarga de la orquestación de estos contenedores a gran escala. Juntas, estas tecnologías permiten una implementación más eficiente y escalable de aplicaciones.
Docker
Conceptos Básicos
- Contenedor: Un contenedor es una unidad estándar de software que empaqueta el código y todas sus dependencias para que la aplicación se ejecute de manera rápida y confiable en diferentes entornos.
- Imagen: Una imagen de Docker es una plantilla inmutable que contiene el conjunto de instrucciones necesarias para crear un contenedor.
- Dockerfile: Un archivo de texto que contiene todas las instrucciones para construir una imagen de Docker.
Instalación de Docker
Para instalar Docker, sigue las instrucciones específicas para tu sistema operativo en la documentación oficial de Docker.
Creación de una Imagen de Docker
Un ejemplo básico de un Dockerfile
para una aplicación Node.js podría ser:
# Usar una imagen base de Node.js FROM node:14 # Establecer el directorio de trabajo WORKDIR /app # Copiar el archivo package.json y package-lock.json COPY package*.json ./ # Instalar las dependencias RUN npm install # Copiar el resto del código de la aplicación COPY . . # Exponer el puerto en el que la aplicación se ejecutará EXPOSE 3000 # Comando para ejecutar la aplicación CMD ["node", "app.js"]
Construcción y Ejecución de una Imagen
Para construir y ejecutar una imagen de Docker, utiliza los siguientes comandos:
# Construir la imagen docker build -t my-node-app . # Ejecutar un contenedor basado en la imagen docker run -p 3000:3000 my-node-app
Ejercicio Práctico
Objetivo: Crear una imagen de Docker para una aplicación simple de Node.js y ejecutarla en un contenedor.
- Crea un archivo
Dockerfile
en el directorio raíz de tu proyecto. - Copia el contenido del ejemplo anterior en tu
Dockerfile
. - Construye la imagen usando el comando
docker build -t my-node-app .
. - Ejecuta el contenedor con el comando
docker run -p 3000:3000 my-node-app
. - Accede a
http://localhost:3000
en tu navegador para ver la aplicación en funcionamiento.
Kubernetes
Conceptos Básicos
- Cluster: Un conjunto de máquinas (nodos) que ejecutan contenedores gestionados por Kubernetes.
- Pod: La unidad más pequeña y básica de Kubernetes, que puede contener uno o más contenedores.
- Deployment: Un objeto de Kubernetes que gestiona la creación y escalado de Pods.
- Service: Un objeto de Kubernetes que define una política de acceso a los Pods.
Instalación de Kubernetes
Para instalar Kubernetes, puedes utilizar herramientas como Minikube para entornos locales o seguir las instrucciones de la documentación oficial de Kubernetes.
Creación de un Deployment
Un archivo de configuración YAML para un Deployment de Kubernetes podría ser:
apiVersion: apps/v1 kind: Deployment metadata: name: my-node-app spec: replicas: 3 selector: matchLabels: app: my-node-app template: metadata: labels: app: my-node-app spec: containers: - name: my-node-app image: my-node-app:latest ports: - containerPort: 3000
Creación de un Service
Un archivo de configuración YAML para un Service de Kubernetes podría ser:
apiVersion: v1 kind: Service metadata: name: my-node-app-service spec: selector: app: my-node-app ports: - protocol: TCP port: 80 targetPort: 3000 type: LoadBalancer
Despliegue en Kubernetes
Para desplegar tu aplicación en Kubernetes, sigue estos pasos:
- Asegúrate de tener una imagen de Docker disponible en un registro accesible por Kubernetes.
- Aplica los archivos de configuración YAML usando
kubectl
:
# Crear el Deployment kubectl apply -f deployment.yaml # Crear el Service kubectl apply -f service.yaml
Ejercicio Práctico
Objetivo: Desplegar una aplicación Node.js en un clúster de Kubernetes.
- Crea un archivo
deployment.yaml
con el contenido del ejemplo anterior. - Crea un archivo
service.yaml
con el contenido del ejemplo anterior. - Asegúrate de que tu imagen de Docker esté disponible en un registro (por ejemplo, Docker Hub).
- Aplica los archivos de configuración usando
kubectl apply -f deployment.yaml
ykubectl apply -f service.yaml
. - Verifica que los Pods y el Service se hayan creado correctamente usando
kubectl get pods
ykubectl get services
.
Conclusión
En este módulo, hemos cubierto los conceptos básicos y la configuración de Docker y Kubernetes. Docker permite empaquetar aplicaciones y sus dependencias en contenedores, mientras que Kubernetes facilita la orquestación y gestión de estos contenedores a gran escala. Con estas herramientas, puedes mejorar significativamente la eficiencia y escalabilidad de tus procesos de CI/CD.
Resumen
- Docker: Herramienta para crear y gestionar contenedores.
- Kubernetes: Plataforma para la orquestación de contenedores.
- Ejercicios Prácticos: Creación de imágenes de Docker y despliegue en Kubernetes.
Con estos conocimientos, estás preparado para integrar Docker y Kubernetes en tus pipelines de CI/CD, mejorando así la entrega continua de tus aplicaciones.
Curso de CI/CD: Integración y Despliegue Continuo
Módulo 1: Introducción a CI/CD
Módulo 2: Integración Continua (CI)
- Introducción a la Integración Continua
- Configuración de un Entorno de CI
- Automatización de la Construcción
- Pruebas Automatizadas
- Integración con Control de Versiones
Módulo 3: Despliegue Continuo (CD)
- Introducción al Despliegue Continuo
- Automatización del Despliegue
- Estrategias de Despliegue
- Monitoreo y Retroalimentación
Módulo 4: Prácticas Avanzadas de CI/CD
Módulo 5: Implementación de CI/CD en Proyectos Reales
Módulo 6: Herramientas y Tecnologías
Módulo 7: Ejercicios Prácticos
- Ejercicio 1: Configuración de un Pipeline Básico
- Ejercicio 2: Integración de Pruebas Automatizadas
- Ejercicio 3: Despliegue en un Entorno de Producción
- Ejercicio 4: Monitoreo y Retroalimentación