Despliegue de Servicios con Docker y Docker Compose en Servidores Linux
En la administración moderna de sistemas, Docker se ha convertido en el estándar de facto para desplegar aplicaciones y bases de datos en servidores Linux. Permite empaquetar una aplicación con todas sus dependencias en un contenedor aislado, garantizando que funcione exactamente igual sin importar la distribución o configuración subyacente.
1. Arquitectura de Docker en Linux #
A diferencia de una máquina virtual (que virtualiza todo el hardware y ejecuta un kernel completo por cada instancia), los contenedores de Docker comparten el kernel del servidor Linux anfitrión, logrando un arranque en milisegundos y un consumo mínimo de RAM y CPU.
1┌─────────────────────────────────────────────────────────────┐ 2│ MÁQUINA ANFITRIONA │ 3├──────────────────────────────┬──────────────────────────────┤ 4│ CONTENEDOR 1 (Nginx Web) │ CONTENEDOR 2 (PostgreSQL) │ 5│ • Binarios y librerías │ • Binarios y librerías │ 6│ • App Web (Puerto 80) │ • Base de Datos (5432) │ 7├──────────────────────────────┴──────────────────────────────┤ 8│ MOTOR DE DOCKER (dockerd) │ 9├─────────────────────────────────────────────────────────────┤ 10│ KERNEL LINUX COMPARTIDO │ 11└─────────────────────────────────────────────────────────────┘
2. Instalación y Configuración Inicial #
Instalar Docker y Docker Compose: #
1sudo apt update 2sudo apt install docker.io docker-compose-v2
Ejecutar Docker sin necesidad de sudo: #
Para que tu usuario habitual pueda gestionar contenedores sin anteponer sudo:
1sudo usermod -aG docker $USER 2 # Aplicar los cambios de grupo en la sesión actual 3newgrp docker
Habilitar el servicio: #
1sudo systemctl enable --now docker
3. Comandos Esenciales de Docker #
1# Descargar y arrancar un contenedor en segundo plano (-d) con puertos mapeados (-p 8080:80) 2docker run -d -p 8080:80 --name servidor_web nginx 3 4 # Listar contenedores en ejecución 5docker ps 6 7 # Ver logs del contenedor en tiempo real 8docker logs -f servidor_web 9 10 # Entrar a la terminal interactiva dentro del contenedor 11docker exec -it servidor_web bash 12 13 # Detener y eliminar contenedor 14docker stop servidor_web 15docker rm servidor_web
4. Orquestación Declarativa con docker-compose.yml #
Docker Compose permite definir y ejecutar múltiples servicios interconectados (ej. un backend Node.js conectado a una base de datos PostgreSQL) mediante un único archivo YAML:
Crea un archivo docker-compose.yml:
1version: '3.8' 2 3services: 4 basededatos: 5 image: postgres:16 6 container_name: postgres_db 7 restart: always 8 environment: 9 POSTGRES_DB: miapp 10 POSTGRES_USER: usuario 11 POSTGRES_PASSWORD: password_segura 12 ports: 13 - "5432:5432" 14 volumes: 15 - datos_pg:/var/lib/postgresql/data 16 17 web: 18 image: nginx:alpine 19 container_name: web_proxy 20 restart: always 21 ports: 22 - "80:80" 23 24volumes: 25 datos_pg:
Comandos de gestión de Docker Compose: #
1# Iniciar todos los servicios en segundo plano 2docker compose up -d 3 4 # Consultar el estado de los servicios del stack 5docker compose ps 6 7 # Detener y destruir los contenedores del stack 8docker compose down
Resumen del tema
Conceptos clave #
- Contenedores vs VMs: aislamiento a nivel de proceso compartiendo el kernel de Linux para máxima eficiencia.
- Gestión de Permisos: inclusión del usuario en el grupo
docker(usermod -aG docker $USER) para administración sin privilegios root continuos. - Mapeo de Puertos y Volúmenes: directivas
-p puerto_host:puerto_contenedory-v volumen:rutapara persistencia duradera de datos en disco. - Docker Compose: definición declarativa de stacks multi-servicio con control unificado (
docker compose up -d/down).
Qué debes recordar #
Docker simplifica el despliegue en servidores Linux encapsulando dependencias; usa Docker Compose para administrar entornos completos con persistencia en volúmenes y redes aisladas.