Agent-almanac setup-docker-compose

install
source · Clone the upstream repo
git clone https://github.com/pjt222/agent-almanac
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/pjt222/agent-almanac "$T" && mkdir -p ~/.claude/skills && cp -r "$T/i18n/es/skills/setup-docker-compose" ~/.claude/skills/pjt222-agent-almanac-setup-docker-compose-97aba8 && rm -rf "$T"
manifest: i18n/es/skills/setup-docker-compose/SKILL.md
source content

Configurar Docker Compose

Configurar Docker Compose para orquestar entornos R multi-contenedor con servicios y redes.

Cuándo Usar

  • Ejecutando aplicaciones R con servicios de base de datos (PostgreSQL, MySQL)
  • Configurando entornos de desarrollo con múltiples contenedores
  • Orquestando aplicaciones Shiny con servicios de soporte
  • Creando pipelines de análisis reproducibles con dependencias externas
  • Gestionando servicios interconectados para proyectos de ciencia de datos

Entradas

  • Requerido: Dockerfile para la aplicación R
  • Requerido: Lista de servicios necesarios (base de datos, caché, etc.)
  • Opcional: Archivos de configuración para cada servicio
  • Opcional: Esquemas de base de datos o scripts de inicialización
  • Opcional: Variables de entorno específicas por servicio

Procedimiento

Paso 1: Crear Estructura del Proyecto

Organizar archivos del proyecto para Docker Compose.

mkdir -p mi-proyecto/{app,db/init,config}
cd mi-proyecto

# Estructura:
# mi-proyecto/
#   docker-compose.yml
#   app/
#     Dockerfile
#     renv.lock
#     app.R
#   db/
#     init/
#       01-schema.sql
#   config/
#     .Renviron

Esperado: Estructura de directorios creada con separación clara entre servicios.

En caso de fallo: Verificar permisos de escritura, asegurar que los paths no contienen caracteres especiales.

Paso 2: Escribir docker-compose.yml

Definir servicios, redes y volúmenes.

version: '3.8'

services:
  app:
    build:
      context: ./app
      dockerfile: Dockerfile
    ports:
      - "3838:3838"
    environment:
      - DB_HOST=db
      - DB_PORT=5432
      - DB_NAME=mibase
      - DB_USER=postgres
      - DB_PASSWORD=secreto
    depends_on:
      db:
        condition: service_healthy
    volumes:
      - ./app:/app
      - r-libs:/usr/local/lib/R/site-library
    networks:
      - app-network

  db:
    image: postgres:16
    environment:
      POSTGRES_DB: mibase
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: secreto
    volumes:
      - postgres-data:/var/lib/postgresql/data
      - ./db/init:/docker-entrypoint-initdb.d
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - app-network

volumes:
  postgres-data:
  r-libs:

networks:
  app-network:
    driver: bridge

Esperado: Los servicios se definen con dependencias claras, healthchecks configurados, volúmenes para persistencia.

En caso de fallo: Validar sintaxis YAML, verificar que las imágenes existen en Docker Hub, comprobar que los puertos no están en uso.

Paso 3: Configurar Variables de Entorno

Usar archivos

.env
para configuración sensible.

# .env (gitignored)
POSTGRES_PASSWORD=mi_secreto_seguro
DB_NAME=mibase
SHINY_PORT=3838
# docker-compose.yml - referenciar variables
services:
  db:
    environment:
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}

Esperado: Variables de entorno separadas del código, archivo .env excluido de Git.

En caso de fallo: Verificar que .env está en .gitignore, comprobar sintaxis de variables con

docker compose config
.

Paso 4: Iniciar y Verificar Servicios

Compilar y ejecutar todos los servicios.

# Compilar e iniciar
docker compose up -d --build

# Verificar estado
docker compose ps

# Ver logs
docker compose logs -f app

# Verificar conectividad de red
docker compose exec app R -e "DBI::dbConnect(RPostgres::Postgres(), host='db', dbname='mibase')"

# Detener servicios
docker compose down

# Detener y eliminar volúmenes
docker compose down -v

Esperado: Todos los servicios en estado saludable, la aplicación R se conecta a la base de datos, los logs no muestran errores.

En caso de fallo: Revisar logs de servicios individuales (

docker compose logs db
), verificar healthchecks, comprobar resolución DNS entre contenedores.

Validación

  • docker compose up
    inicia todos los servicios sin errores
  • La aplicación R se conecta exitosamente a los servicios dependientes
  • Los volúmenes persisten datos entre reinicios
  • Los healthchecks reportan servicios saludables
  • Las variables de entorno se inyectan correctamente
  • La red permite comunicación entre servicios

Errores Comunes

  • Orden de inicio incorrecto: Usar
    depends_on
    con
    condition: service_healthy
    en lugar de solo
    depends_on
    .
  • Datos perdidos al detener: Usar volúmenes nombrados, no binds anónimos, para datos persistentes.
  • Conexión rechazada entre servicios: Usar nombres de servicio como hostnames, no
    localhost
    .
  • Puerto ya en uso: Verificar puertos disponibles antes de iniciar, usar puertos alternativos si es necesario.
  • Credenciales en repositorio: Nunca commit de archivos .env con secretos reales.

Habilidades Relacionadas

  • create-r-dockerfile
    - Crear Dockerfiles base para aplicaciones R
  • setup-compose-stack
    - Stacks Docker Compose generales multi-servicio
  • optimize-docker-build-cache
    - Optimizar tiempos de compilación Docker