Skip to content
Back to skills

Setup Docker Compose

ASecurity

Configurar Docker Compose para entornos R con servicios de base de datos, volúmenes persistentes y redes. Usar cuando se necesite ejecutar aplicaciones R junto con PostgreSQL, Redis u otros servicios, o cuando se gestionen entornos de desarrollo multi-contenedor.

  • 31 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 29, 2026
ai-agentsgoshellbashsqldockergit

Security analysis

A100/100

Scanned May 29, 2026

npx -y skills add pjt222/agent-almanac --skill setup-docker-compose --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Setup Docker Compose?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Setup Docker Compose
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/pjt222-setup-docker-compose/badge)](https://www.skillsdirectory.com/skills/pjt222-setup-docker-compose)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: setup-docker-compose
locale: es
source_locale: en
source_commit: 6f65f316
translator: claude-sonnet-4-6
translation_date: 2026-03-16
description: >
  Configurar Docker Compose para entornos R con servicios de base de datos, volúmenes
  persistentes y redes. Usar cuando se necesite ejecutar aplicaciones R junto con
  PostgreSQL, Redis u otros servicios, o cuando se gestionen entornos de desarrollo
  multi-contenedor.
license: MIT
allowed-tools: Read Write Edit Bash Grep Glob
metadata:
  author: Philipp Thoss
  version: "1.0"
  domain: containerization
  complexity: basic
  language: multi
  tags: docker-compose, r, multi-container, orchestration
---

# 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.

```bash
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.

```yaml
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.

```bash
# .env (gitignored)
POSTGRES_PASSWORD=mi_secreto_seguro
DB_NAME=mibase
SHINY_PORT=3838
```

```yaml
# 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.

```bash
# 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

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…