Curso de Docker: Contenedores y Orquestación desde Cero

Índice General

  1. Introducción a la Contenedorización
  2. Contenedores frente a Máquinas Virtuales
  3. Conceptos Clave de Docker
  4. Instalación y Verificación del Entorno
  5. Comandos Esenciales de la CLI
  6. Anatomía y Construcción de un Dockerfile
  7. Orquestación Multicontenedor con Docker Compose

1. Introducción a la Contenedorización

Docker es una plataforma de código abierto diseñada para empaquetar, distribuir y ejecutar aplicaciones dentro de entornos aislados denominados contenedores. Al encapsular el software junto con todas sus dependencias (librerías, archivos de configuración y binarios), se garantiza el comportamiento idéntico del sistema sin importar si se ejecuta en la computadora local de un desarrollador, en un servidor de pruebas o en la infraestructura de la nube.

2. Contenedores frente a Máquinas Virtuales

Es común confundir el software de contenedores con la virtualización tradicional, pero sus arquitecturas internas operan de manera muy distinta:

3. Conceptos Clave de Docker

Para dominar el ecosistema, se debe asimilar la analogía de la gastronomía o la construcción:

4. Instalación y Verificación del Entorno

Nota: Para entornos Linux (Ubuntu/Debian), es indispensable que la virtualización esté habilitada en la BIOS del procesador antes de iniciar.

# Actualizar el índice de paquetes locales
sudo apt update && sudo apt upgrade -y

# Instalar dependencias previas de red y seguridad
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

# Agregar la clave criptográfica oficial de Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

# Instalar el motor de Docker y su interfaz de comandos
sudo apt install docker-ce docker-ce-cli containerd.io -y

# Añadir tu usuario al grupo docker para evitar usar 'sudo' en cada instrucción
sudo usermod -aG docker $USER
newgrp docker

Resolución de Errores de Arranque

Si al ejecutar docker run hello-world se muestra el mensaje "Cannot connect to the Docker daemon...", significa que el motor está apagado. Se soluciona forzando el inicio del servicio del sistema:

sudo systemctl start docker

5. Comandos Esenciales de la CLI

La línea de comandos permite inspeccionar el estado del motor y administrar los ciclos de vida de los componentes:

Comando Acción / Propósito
docker --version Muestra la versión de Docker instalada en el sistema.
docker images Lista todas las imágenes descargadas o compiladas localmente.
docker ps Lista únicamente los contenedores que se están ejecutando activamente.
docker ps -a Muestra el historial completo de contenedores (activos y detenidos).
docker start [ID_O_NOMBRE] Vuelve a encender un contenedor que se encontraba apagado.
docker stop [ID_O_NOMBRE] Apaga de manera ordenada un contenedor en ejecución.
docker logs [ID] Muestra las salidas de consola e historial impreso por el contenedor.
docker logs -f [ID] Inspecciona los logs en tiempo real manteniendo la consola abierta (Follow).
docker exec -it [ID] sh Abre una terminal interactiva (shell) dentro de un contenedor activo.

6. Anatomía y Construcción de un Dockerfile

Las distribuciones ligeras como Alpine Linux son ampliamente utilizadas en entornos profesionales debido a que pesan pocos megabytes, reduciendo drásticamente el tamaño final de la imagen.

Ejemplo Práctico de Dockerfile Pro

# 1. Imagen base oficial ligera
FROM alpine:latest

# 2. Establecer el directorio de trabajo interno (creará la carpeta si no existe)
WORKDIR /app

# 3. Copiar archivos locales al directorio del contenedor
COPY ./html/index.html /app/
COPY ./html/script.sh /app/

# 4. Ejecutar comandos de infraestructura en la construcción (Instalar Nginx)
RUN apk add --no-cache nginx

# 5. Otorgar permisos de ejecución al script operativo
RUN chmod +x /app/script.sh

# 6. Documentar el puerto de red expuesto internamente
EXPOSE 80

# 7. Comando definitivo por defecto al iniciar el contenedor
CMD ["/app/script.sh"]

7. Orquestación Multicontenedor con Docker Compose

Docker Compose es una herramienta que permite definir y correr aplicaciones de múltiples contenedores utilizando un único archivo de configuración estructurado en formato YAML (docker-compose.yml).

Ejemplo Práctico de Orquestación (Servidor Web + Contenedor de Soporte)

version: '3.8'

services:
  web-server:
    image: nginx:alpine
    container_name: servidor_web_frontend
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - red-aplicacion

  backend-task:
    image: alpine:latest
    container_name: contenedor_soporte_alpine
    volumes:
      - ./html:/html
    command: sh -c "while true; do sleep 1000; done"
    networks:
      - red-aplicacion

networks:
  red-aplicacion:
    driver: bridge

Comandos Clave de Docker Compose