🐳 Docker Cheatsheet Completo 🐳

Docker es una plataforma de código abierto que utiliza la contenerización para empaquetar una aplicación y todas sus dependencias en una unidad estándar para el desarrollo de software. Esto asegura que la aplicación se ejecute de manera rápida y confiable en cualquier entorno.


1. 🌟 Conceptos Clave


2. 🛠️ Configuración Inicial

  1. Instalar Docker Desktop (Windows/macOS): Descarga desde docker.com/products/docker-desktop.
  2. Instalar Docker Engine (Linux): Sigue las instrucciones específicas para tu distribución en la documentación oficial de Docker.
  3. Verificar la Instalación:
    docker --version     # Muestra la versión de Docker
    docker compose version # Muestra la versión de Docker Compose (si está integrada)
    docker run hello-world # Ejecuta un contenedor de prueba

3. 📄 Dockerfile (La Receta de la Imagen)

Un archivo de texto plano llamado Dockerfile (sin extensión) que contiene instrucciones.

# Dockerfile de ejemplo para una app Node.js

# 1. FROM: Define la imagen base
FROM node:18-alpine

# 2. WORKDIR: Establece el directorio de trabajo dentro del contenedor
WORKDIR /app

# 3. COPY: Copia archivos del contexto de construcción al contenedor
# Copia package.json y package-lock.json primero para aprovechar el cache de capas
COPY package*.json ./

# 4. RUN: Ejecuta comandos durante la construcción de la imagen
RUN npm install

# 5. COPY: Copia el resto del código de la aplicación
COPY . .

# 6. EXPOSE: Documenta los puertos que el contenedor va a escuchar (no los publica automáticamente)
EXPOSE 3000

# 7. CMD: Comando por defecto que se ejecuta cuando el contenedor se inicia
# Se puede sobrescribir al ejecutar `docker run`
CMD ["npm", "start"]

# Opcional: ENTRYPOINT: Define el comando principal que se ejecutará.
# ENTRYPOINT ["node", "server.js"]
# Combinado con CMD: ENTRYPOINT ["npm"], CMD ["start"] -> ejecuta `npm start`

Instrucciones Comunes de Dockerfile

.dockerignore

# .dockerignore
node_modules/
npm-debug.log
.git
.env
Dockerfile
*.md

4. 🚀 Comandos Básicos de Docker (CLI)

4.1. Construir Imágenes

4.2. Gestionar Imágenes

4.3. Ejecutar y Gestionar Contenedores

4.4. Gestionar Volúmenes

4.5. Gestionar Redes

4.6. Limpieza


5. 🏗️ Docker Compose (Multi-Contenedores)

Define y ejecuta aplicaciones Docker de múltiples contenedores.

5.1. docker-compose.yml (o compose.yml para v2)

Define los servicios, redes y volúmenes de tu aplicación.

# docker-compose.yml
version: '3.8' # Versión de la especificación de Compose

services:
  web: # Nombre del servicio (contenedor)
    build: . # Ruta al Dockerfile (en el directorio actual)
    ports:
      - "80:3000" # Mapeo de puertos (HOST:CONTAINER)
    volumes:
      - .:/app # Monta el directorio actual del host en /app del contenedor (para desarrollo)
      - /app/node_modules # Evita sobrescribir node_modules del contenedor con el del host
    environment: # Variables de entorno para este servicio
      NODE_ENV: development
    depends_on: # Define dependencias de inicio
      - db
    networks: # Conecta a redes
      - app-network

  db: # Otro servicio (contenedor de base de datos)
    image: postgres:14-alpine # Imagen de Docker Hub
    environment: # Variables de entorno para PostgreSQL
      POSTGRES_DB: mydatabase
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - db-data:/var/lib/postgresql/data # Volumen con nombre para datos persistentes
    networks:
      - app-network

volumes: # Define volúmenes con nombre
  db-data:

networks: # Define redes personalizadas
  app-network:
    driver: bridge # Tipo de red

5.2. Comandos de Docker Compose


6. 💡 Buenas Prácticas y Consejos


Este cheatsheet te proporciona una referencia completa de Docker, cubriendo sus conceptos esenciales, comandos CLI, Dockerfile, Docker Compose y las mejores prácticas para construir, desplegar y ejecutar aplicaciones en contenedores.