Los contenedores han transformado la forma en que implementamos, escalamos y gestionamos aplicaciones al empaquetar código y dependencias en una unidad estandarizada que puede ejecutarse de manera consistente en cualquier entorno. Cuando se utilizan en entornos en la nube, los contenedores ofrecen:
- Portabilidad a lo largo del desarrollo, pruebas y producción.
- Escalabilidad para adaptarse rápidamente al tráfico y la demanda.
- Eficiencia con una sobrecarga reducida en comparación con las máquinas virtuales tradicionales.
En este tutorial, recorreremos la configuración completa de una aplicación contenerizada alojada en la nube, cubriendo:
- Conceptos básicos de contenedores y por qué son ideales para la nube.
- Configuración de una aplicación Dockerizada.
- Implementación del contenedor en un proveedor de la nube (usando Google Cloud Platform como ejemplo).
- Escala y gestión de su contenedor en la nube.
Conceptos básicos de contenedores: Cómo encajan los contenedores en los flujos de trabajo en la nube
Los contenedores encapsulan todas las bibliotecas y dependencias necesarias para ejecutar una aplicación. A diferencia de las máquinas virtuales tradicionales, en las cuales cada una tiene un sistema operativo, los contenedores comparten el sistema operativo del host, lo que los hace ligeros y eficientes.
¿Por qué contenedores para la nube?
- Los tiempos de inicio rápidos significan una escalabilidad más rápida para manejar el tráfico variable.
- La consistencia entre entornos garantiza que el código se comporte de la misma manera desde las laptops de los desarrolladores hasta la producción.
- La eficiencia de recursos permite un despliegue de alta densidad en la misma infraestructura.
Componentes centrales de la contenedorización en la nube
- Motor de Contenedores: Gestiona y ejecuta contenedores (por ejemplo, Docker, containerd).
- Orquestación: Asegura la fiabilidad de la aplicación, escalado y balanceo de carga (por ejemplo, Kubernetes, ECS).
- Registro: Almacena imágenes de contenedores para acceso entre entornos (por ejemplo, Docker Hub, GCR).
Configuración de una aplicación Dockerizada
Comenzaremos contenedorizando una simple aplicación de Node.js.
Paso 1: Crear la Aplicación
1. En una carpeta de proyecto, inicializa un proyecto de Node.js:
mkdir cloud-container-app && cd cloud-container-app
npm init -y
2. Crea un archivo de servidor básico, app.js
:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello, Cloud Container!');
});
app.listen(3000, () => {
console.log('App running on port 3000');
});
3. Agrega Express al proyecto:
npm install express
Paso 2: Crear un Dockerfile
Este Dockerfile especifica cómo empaquetar la aplicación en un contenedor Docker.
# Use the Node.js image as a base
FROM node:14
# Set working directory
WORKDIR /app
# Copy files and install dependencies
COPY . .
RUN npm install
# Expose the app’s port
EXPOSE 3000
# Start the application
CMD ["node", "app.js"]
Paso 3: Construir y Probar la Imagen Docker Localmente
1. Construye la imagen Docker:
docker build -t cloud-container-app .
2. Ejecuta el contenedor localmente:
docker run -p 3000:3000 cloud-container-app
3. Visita `http://localhost:3000` en tu navegador. Deberías ver “¡Hola, Contenedor en la Nube!” mostrado.
Implementando el Contenedor en la Plataforma de Google Cloud (GCP)
En esta sección, vamos a subir la imagen del contenedor al Registro de Contenedores de Google (GCR) y desplegarlo en el Motor de Kubernetes de Google (GKE).
Paso 1: Configurar un Proyecto en GCP
1. Crea un Proyecto en GCP. Ve a la [Consola de Google Cloud] (https://console.cloud.google.com) y crea un nuevo proyecto.
2. Habilita las APIs de Kubernetes Engine y Container Registry para tu proyecto.
Paso 2: Subir la Imagen al Registro de Contenedores de Google
1. Etiqueta la imagen Docker para Google Cloud:
docker tag cloud-container-app gcr.io/<YOUR_PROJECT_ID>/cloud-container-app
2. Sube la imagen a GCR:
docker push gcr.io/<YOUR_PROJECT_ID>/cloud-container-app
Paso 3: Crear un Cluster de Kubernetes
1. Inicializa un Cluster de GKE:
gcloud container clusters create cloud-container-cluster --num-nodes=2
2. Configura kubectl
para conectarlo a tu nuevo cluster:
gcloud container clusters get-credentials cloud-container-cluster
Paso 4: Desplegar la Aplicación Contenerizada en GKE
1. Crea un archivo k8s-deployment.yaml
para definir el despliegue y el servicio:
apiVersion apps/v1
kind Deployment
metadata
name cloud-container-app
spec
replicas2
selector
matchLabels
app cloud-container-app
template
metadata
labels
app cloud-container-app
spec
containers
name cloud-container-app
image gcr.io/<YOUR_PROJECT_ID>/cloud-container-app
ports
containerPort3000
---
apiVersion v1
kind Service
metadata
name cloud-container-service
spec
type LoadBalancer
selector
app cloud-container-app
ports
protocol TCP
port80
targetPort3000
2. Despliega la aplicación en GKE:
kubectl apply -f k8s-deployment.yaml
3. Obtiene la IP externa para acceder a la aplicación:
kubectl get services
Escalar y Gestionar Contenedores en GKE
Paso 1: Escalar el Despliegue
Para ajustar el número de réplicas (por ejemplo, para manejar un tráfico más alto), utiliza el siguiente comando:
kubectl scale deployment cloud-container-app --replicas=5
GKE escalará automáticamente la aplicación añadiendo réplicas y distribuyendo la carga.
Paso 2: Monitorear y Administrar Registros
1. Utiliza el siguiente comando para ver los registros de un pod específico en Kubernetes:
kubectl logs <POD_NAME>
2. Habilitar el panel de GKE para monitorear el estado y uso de recursos de los pods y administrar despliegues visualmente.
Conclusión: Aprovechando Contenedores para Despliegues Escalables en la Nube
Este tutorial cubrió:
- Contenerización de una aplicación Node.js usando Docker.
- Desplegar en Google Kubernetes Engine (GKE) para alojamiento escalable y administrado.
- Administrar y escalar contenedores de forma efectiva en la nube.
Con contenedores en la nube, tus aplicaciones obtienen escalabilidad, portabilidad y eficiencia, asegurando que estén listas para manejar la demanda, adaptarse rápidamente y mantenerse consistentes en diferentes entornos.
Source:
https://dzone.com/articles/a-step-by-step-guide-to-deploying-containers-in-the-cloud