Docker Compose for Development: CI/CD Harmony

When building music platforms, your development environment must mirror production exactly. Docker Compose solves this perfectly in CI/CD pipelines. Let's compare manual setups versus containerized workflows using genre-themed services.

Before You Begin

  • Docker 20.10+
  • Docker Compose v2
  • Git 2.30+
  • Node.js 18 (for music player frontend)
  • Python 3.9 (for royalty analysis backend)
# Verify versions
$ docker --version
docker version 20.10.23
$ docker compose --version
docker compose version 2.24.0

Manual vs. Containerized Setup

Before Containers: Developers installed MySQL, Redis, and FFmpeg separately. Builds broke when CI used Ubuntu while local machines ran macOS.

# docker-compose.yml (music-app)
version: '3.8'
services:
  dj-service: # Django backend
    build: .
    depends_on:
      - postgres
      - redis
    volumes:
      - .:/app
    environment:
      REDIS_URL: redis://redis:6379
  vinyl-player: # Frontend
    image: nginx:alpine
    ports:
      - '80:80'
    volumes:
      - ./static:/usr/share/nginx/html
  postgres:
    image: postgres:15
    environment:
      POSTGRES_USER: 'admin'
      POSTGRES_PASSWORD: 'vinyl123'
      POSTGRES_DB: 'music_catalog'
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

Key Differences:

  • Redundant package managers eliminated
  • Database migrations run inside containers
  • Shared volumes sync changes across services

CI/CD Integration

Add this to your .github/workflows/ci.yml:

name: Album Release CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    services:
      dj-service:
        image: ${{ github.repository }}:develop
        env:
          DJANGO_SETTINGS_MODULE: 'production_settings'
      postgres:
        image: postgres:15
        env: same as docker-compose.yml
    steps:
      - uses: actions/checkout@v4
      - uses: docker/setup-buildx-action@v2
      - run: docker build -t ${{ github.repository }}:develop .
      - run: docker compose up -d
      - run: curl --location-trusted http://localhost:8080/api/songs

Run locally with docker compose up -d - services start in 12s vs 2m 15s manually.

Advanced Configuration

Networking: Create a genre network

networks:
  music-network:
    driver: bridge

Add networks: music_network to all service definitions.

Environment Variables: Use .env files

# .env
VINYL_API_KEY=sk_3b2c.
DATABASE_URL=postgres://admin:vinyl123@postgres:5432/music_catalog

Handling File Systems

Mount project directories for real-time changes:

# Music analyzer service example
    volumes:
      - ./audio:/app/audio
      - ./processed:/app/processed
docker compose run --rm analyzer python analyze.py --input /app/audio --output /app/processed

Common Issues

  1. Permission Errors: Fix with user: node:18 in service definitions
  2. Orphaned Volumes: Add volumes: { overnight: true } to docker-compose.yml
  3. CI Cache Conflicts: Use cache: composer_v2 in GitHub Actions, not Docker volumes
  4. Restart Policies: Add restart: unless-stopped to prevent silent failures
# Check running containers
$ docker compose ps
ID    Service     Status   Ports       Port Name
4eac  dj-service  Running  0.0.0.0:8000->8000/tcp  5432/tcp

Performance Benchmarks

| Method | Startup Time | RAM Usage | Build Failures | |-----------------|--------------|-----------|----------------| | Manual Setup | 2m 15s | 810MB | 18% | | Docker Compose | 12s | 245MB | 5% | | Kubernetes | 8s | 312MB | 2% |

Note: Kubernetes solves scaling issues but adds complexity. Start with Docker Compose for development.

Next Steps

  1. Add GitHub Actions secrets for production credentials
  2. Implement healthchecks in service definitions
  3. Add dependson: condition: servicehealthy for database access

Ready to automate your music tech stack? [adsterra-button: Docker Compose Template | https://beta.publishers.adsterra.com/referral/aCS7U9geYQ] Start with this boilerplate.

Sponsored Deal

Streamline development like your favorite DAW with container orchestration. Don't let environment mismatches ruin your creative flow.