Introducción
Este completo tutorial de Docker proporciona a los desarrolladores y profesionales de TI una comprensión fundamental de la tecnología de contenedores. Al explorar los conceptos centrales de Docker, su arquitectura y su implementación práctica, los participantes adquirirán habilidades cruciales en las estrategias modernas de despliegue de software y desarrollo de aplicaciones.
Fundamentos de Docker
Introducción a la Contenización con Docker
Docker es una potente tecnología de contenedores que revoluciona el despliegue de software y el desarrollo de aplicaciones. Permite a los desarrolladores empaquetar aplicaciones con todas sus dependencias en unidades estandarizadas llamadas contenedores, garantizando un rendimiento consistente en diferentes entornos informáticos.
Conceptos Fundamentales de la Tecnología de Contenedores
Docker proporciona una alternativa ligera a las máquinas virtuales tradicionales, permitiendo que el software se ejecute en entornos aislados con una sobrecarga mínima. Los componentes clave de Docker incluyen:
| Componente | Descripción |
|---|---|
| Docker Engine | Entorno de ejecución principal para crear y gestionar contenedores |
| Contenedor | Paquete ligero y ejecutable que contiene la aplicación y sus dependencias |
| Imagen Docker | Plantilla de solo lectura utilizada para crear contenedores |
| Registro Docker | Plataforma de almacenamiento y distribución de imágenes Docker |
Arquitectura de Docker
graph TD
A[Cliente Docker] --> B[Daemon de Docker]
B --> C[Entorno de Ejecución de Contenedores]
B --> D[Gestión de Imágenes]
B --> E[Gestión de Redes]
Instalación en Ubuntu 22.04
## Actualizar el índice de paquetes
sudo apt update
## Instalar dependencias
sudo apt install apt-transport-https ca-certificates curl software-properties-common
## Añadir la clave GPG oficial de Docker
curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
## Configurar el repositorio estable
echo "deb [arch=amd64 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
docker --version
## Descargar una imagen de Docker Hub
docker pull ubuntu:latest
## Listar imágenes disponibles
docker images
## Ejecutar un contenedor
docker run -it ubuntu:latest /bin/bash
Casos de Uso Prácticos de la Contenización con Docker
Docker permite un despliegue de software eficiente en diversos escenarios:
- Arquitectura de microservicios
- Integración Continua/Entrega Continua (CI/CD)
- Desarrollo de aplicaciones nativas de la nube
- Entornos de desarrollo y producción consistentes
Rendimiento y Gestión de Recursos
Los contenedores Docker ofrecen ventajas significativas en la utilización de recursos:
- Sobrecarga mínima en comparación con la virtualización tradicional
- Tiempos de inicio y parada rápidos
- Asignación eficiente de recursos
- Gestión de infraestructura escalable
Dominando Dockerfile
Entendiendo la Sintaxis de Dockerfile
Un Dockerfile es un documento de texto que contiene instrucciones para construir una imagen Docker. Define el entorno, las dependencias y la configuración necesarias para ejecutar una aplicación dentro de un contenedor.
Conjunto de Instrucciones de Dockerfile
| Instrucción | Propósito | Ejemplo |
|---|---|---|
| FROM | Especifica la imagen base | FROM ubuntu:22.04 |
| RUN | Ejecuta comandos | RUN apt-get update |
| COPY | Copia archivos a la imagen | COPY ./app /application |
| WORKDIR | Establece el directorio de trabajo | WORKDIR /application |
| ENV | Establece variables de entorno | ENV PORT=8080 |
| EXPOSE | Declara puertos del contenedor | EXPOSE 8080 |
| CMD | Define el comando predeterminado | CMD ["python", "app.py"] |
Proceso de Construcción de Dockerfile
graph LR
A[Dockerfile] --> B[Docker Build]
B --> C[Creación de Capas]
C --> D[Generación de la Imagen]
D --> E[Despliegue del Contenedor]
Ejemplo de Dockerfile para Aplicación Python
## Selección de la imagen base
FROM python:3.9-slim
## Establecer el directorio de trabajo
WORKDIR /app
## Instalar dependencias del sistema
RUN apt-get update && apt-get install -y \
build-essential \
&& rm -rf /var/lib/apt/lists/*
## Copiar archivos de la aplicación
COPY . /app
## Instalar dependencias de Python
RUN pip install --no-cache-dir -r requirements.txt
## Exponer el puerto de la aplicación
EXPOSE 5000
## Definir el comando de inicio
CMD ["python", "app.py"]
Construyendo la Imagen Docker
## Construir la imagen con etiqueta
docker build -t myapp:v1 .
## Listar imágenes creadas
docker images
## Verificar detalles de la imagen
docker inspect myapp:v1
Técnicas Avanzadas de Dockerfile
Construcciones Multietapa
## Etapa de construcción
FROM maven:3.8.1-openjdk-11 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn package
## Etapa de ejecución
FROM openjdk:11-jre-slim
COPY --from=build /app/target/app.jar /application.jar
ENTRYPOINT ["java", "-jar", "/application.jar"]
Buenas Prácticas
- Minimizar las capas de la imagen
- Usar etiquetas de imagen específicas
- Aprovechar la caché de compilación
- Eliminar dependencias innecesarias
- Implementar análisis de seguridad
Ciclo de Vida de los Contenedores
Estados y Gestión de Contenedores
Los contenedores Docker pasan por múltiples estados durante su ciclo de vida operativo, lo que proporciona capacidades de gestión y despliegue flexibles.
Diagrama de Estados de los Contenedores
stateDiagram-v2
[*] --> Created
Created --> Running
Running --> Paused
Paused --> Running
Running --> Stopped
Stopped --> Removed
Removed --> [*]
Comandos del Ciclo de Vida de los Contenedores
| Comando | Acción | Descripción |
|---|---|---|
| docker create | Inicializar | Crea un contenedor sin iniciarlo |
| docker start | Lanzar | Inicia un contenedor detenido |
| docker run | Instanciar | Crea e inicia inmediatamente un contenedor |
| docker stop | Terminar | Detención del contenedor en ejecución |
| docker pause | Suspender | Congela los procesos del contenedor |
| docker unpause | Reanudar | Reanuda un contenedor suspendido |
| docker rm | Eliminar | Elimina permanentemente el contenedor |
Ejemplos de Gestión de Contenedores
## Crear un contenedor nginx
docker create --name web-server nginx:latest
## Iniciar el contenedor
docker start web-server
## Ejecutar un contenedor interactivo
docker run -it ubuntu:22.04 /bin/bash
## Detener un contenedor en ejecución
docker stop web-server
## Eliminar el contenedor detenido
docker rm web-server
Estrategias de Escalado de Contenedores
## Crear varias instancias de contenedores
docker run -d --name web1 nginx:latest
docker run -d --name web2 nginx:latest
docker run -d --name web3 nginx:latest
## Listar contenedores en ejecución
docker ps
## Inspeccionar los detalles del contenedor
docker inspect web1
Gestión de Recursos
## Limitar los recursos del contenedor
docker run -d \
--name limited-container \
--cpus="0.5" \
--memory="512m" \
nginx:latest
## Monitorizar el rendimiento del contenedor
docker stats limited-container
Técnicas de Optimización de Despliegue
## Usar docker-compose para la gestión de múltiples contenedores
version: '3'
services:
web:
image: nginx:latest
deploy:
replicas: 3
restart_policy:
condition: on-failure
Redes de Contenedores
## Crear una red personalizada
docker network create mynetwork
## Ejecutar un contenedor en una red específica
docker run -d --name app --network mynetwork nginx:latest
Resumen
Docker representa un enfoque transformador para el desarrollo y despliegue de software, ofreciendo entornos ligeros, portátiles y consistentes en diferentes plataformas informáticas. Al dominar los fundamentos de Docker, los desarrolladores pueden optimizar el empaquetado de aplicaciones, mejorar la escalabilidad y aumentar la eficiencia general del sistema mediante la tecnología de contenedores.



