Introducción
Este completo tutorial de Docker proporciona a los desarrolladores una guía práctica para comprender los fundamentos de la contenedorización, la instalación de Docker y la gestión de contenedores, específicamente para aplicaciones Python Flask en Ubuntu. Al explorar los conceptos centrales de Docker, los procedimientos de instalación y los comandos esenciales, los participantes adquirirán habilidades prácticas para optimizar los flujos de trabajo de desarrollo e implementación de aplicaciones.
Conceptos Fundamentales de Docker
Introducción a los Fundamentos de Docker
Docker es una potente plataforma de contenedorización que revoluciona el desarrollo y la implementación de software. Como tecnología de contenedores, Docker permite a los desarrolladores empaquetar aplicaciones con todas sus dependencias, garantizando un rendimiento consistente en diferentes entornos informáticos.
Conceptos Fundamentales de la Contenedorización
graph TD
A[Imagen de Docker] --> B[Contenedor]
A --> C[Dockerfile]
B --> D[Entorno de Ejecución Aislado]
| Concepto | Descripción |
|---|---|
| Imagen de Docker | Plantilla de solo lectura que contiene el código de la aplicación y sus dependencias |
| Contenedor | Instancia ejecutable y ligera de una imagen |
| Dockerfile | Archivo de texto que define los pasos de construcción de la imagen |
Instalación de Docker en Ubuntu 22.04
## Actualizar paquetes del sistema
sudo apt update
## Instalar dependencias necesarias
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## Agregar la clave GPG oficial de Docker
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## Configurar el repositorio de Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Instalar Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
Comandos Básicos de Docker
## Comprobar la versión de Docker
## Extraer una imagen de Docker Hub
## Listar imágenes locales
## Ejecutar un contenedor
## Listar contenedores en ejecución
## Detener un contenedor
Entendiendo la Arquitectura de Docker
Docker utiliza una arquitectura cliente-servidor donde el cliente Docker se comunica con el demonio Docker, que gestiona contenedores, imágenes, redes y volúmenes de almacenamiento.
Gestión del Ciclo de Vida de los Contenedores
Los contenedores proporcionan un entorno aislado y reproducible para las aplicaciones. Pueden crearse, iniciarse, detenerse, moverse y eliminarse fácilmente, ofreciendo una flexibilidad sin precedentes en la implementación de software.
Creación de Aplicaciones Flask
Contenedorización de Aplicaciones Web Flask
Flask es un framework web Python ligero ideal para la contenedorización de aplicaciones web. Docker proporciona un método eficiente para empaquetar e implementar proyectos Flask con entornos consistentes.
Estructura del Proyecto y Preparación
graph TD
A[Raíz del Proyecto] --> B[app.py]
A --> C[requirements.txt]
A --> D[Dockerfile]
A --> E[templates/]
| Archivo | Propósito |
|---|---|
| app.py | Script principal de la aplicación Flask |
| requirements.txt | Dependencias de paquetes Python |
| Dockerfile | Instrucciones de construcción del contenedor |
| templates/ | Directorio de plantillas HTML |
Ejemplo de Aplicación Flask
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
Creación de Dockerfile
## Usar la imagen oficial de Python
FROM python:3.9-slim
## Establecer el directorio de trabajo
WORKDIR /app
## Copiar archivos del proyecto
COPY . /app
## Instalar dependencias
RUN pip install --no-cache-dir -r requirements.txt
## Exponer el puerto de la aplicación
EXPOSE 5000
## Ejecutar la aplicación
CMD ["python", "app.py"]
Configuración de Docker Compose
version: "3"
services:
web:
build: .
ports:
- "5000:5000"
volumes:
- .:/app
Construcción y Ejecución del Contenedor
## Construir la imagen de Docker
docker build -t flask-app .
## Ejecutar el contenedor
docker run -p 5000:5000 flask-app
## Alternativamente, usar docker-compose
docker-compose up
Beneficios de la Contenedorización
Docker permite a los desarrolladores de Flask crear aplicaciones web reproducibles y portables con dependencias aisladas y entornos de ejecución consistentes en diferentes sistemas.
Docker en Producción
Orquestación de Contenedores con Kubernetes
graph TD
A[Clúster Docker] --> B[Nodo Maestro]
A --> C[Nodos Trabajadores]
B --> D[Servidor API]
B --> E[Planificador]
C --> F[Contenedores Pods]
Estrategias de Implementación en Producción
| Estrategia | Descripción |
|---|---|
| Actualizaciones Incrementales | Implementaciones sin tiempo de inactividad |
| Implementación Azul-Verde | Cambio instantáneo de tráfico |
| Lanzamientos Canary | Migración gradual del tráfico |
Configuración del Servidor Ubuntu
## Actualizar paquetes del sistema
sudo apt update && sudo apt upgrade -y
## Instalar Docker
sudo apt install docker.io kubernetes-cli -y
## Configurar el demonio de Docker
sudo systemctl enable docker
sudo systemctl start docker
Docker Compose para Escalabilidad
version: "3"
services:
web:
image: myapp:latest
deploy:
replicas: 4
update_config:
parallelism: 2
ports:
- "80:8000"
Configuración de Monitoreo de Contenedores
## Instalar Prometheus
docker run -d \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
## Instalar Grafana
docker run -d \
-p 3000:3000 \
grafana/grafana
Buenas Prácticas de Seguridad
## Ejecutar contenedores con privilegios limitados
docker run --read-only \
--tmpfs /tmp \
--tmpfs /run \
-d myimage
## Usar la gestión de secretos de Docker
echo "mysecretpassword" | docker secret create db_password -
Optimización del Rendimiento
## Limitar los recursos del contenedor
docker run -d \
--cpus=2 \
--memory=4g \
myapplication
Gestión de la Configuración de la Red
## Crear una red puente personalizada
docker network create \
--driver bridge \
--subnet 192.168.0.0/24 \
production_network
Resumen
Docker revoluciona el desarrollo de software al permitir entornos de aplicación consistentes y portables a través de la contención. Este tutorial ha equipado a los desarrolladores con habilidades cruciales en los fundamentos de Docker, incluyendo la creación de imágenes, la gestión de contenedores y las estrategias de implementación. Al dominar estas técnicas, los desarrolladores pueden empaquetar, distribuir y ejecutar aplicaciones Flask de manera eficiente en diversas plataformas informáticas con mayor fiabilidad y rendimiento.



