Docker and Docker Compose patterns for local development, container security, networking, volume strategies, and multi-service orchestration. Use when setting up containerized development environments or reviewing Docker configurations.
name docker-patterns description Docker and Docker Compose patterns for local development, container security, networking, volume strategies, and multi-service orchestration. Use when setting up containerized development environments or reviewing Docker configurations. metadata {"origin":"ECC"} Docker Patterns Docker and Docker Compose best practices for containerized development. When to Activate Setting up Docker Compose for local development Designing multi-container architectures Troubleshooting container networking or volume issues Reviewing Dockerfiles for security and size Migrating from local dev to containerized workflow Docker Compose for Local Development Standard Web App Stack
services: app: build: context: . target: dev
.:/app
/app/node_modules
redisdata:/data mailpit:
"8025:8025"
"1025:1025"
volumes: pgdata: redisdata: Development vs Production Dockerfile
FROM node:22-alpine AS deps WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci
FROM node:22-alpine AS dev WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . EXPOSE 3000 CMD ["npm", "run", "dev"]
FROM node:22-alpine AS build WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . RUN npm run build && npm prune --production
FROM node:22-alpine AS production WORKDIR /app RUN addgroup -g 1001 -S appgroup && adduser -S appuser -u 1001 USER appuser COPY --from=build --chown=appuser:appgroup /app/dist ./dist COPY --from=build --chown=appuser:appgroup /app/node_modules ./node_modules COPY --from=build --chown=appuser:appgroup /app/package.json ./ ENV NODE_ENV=production EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=3s CMD wget -qO- http://localhost:3000/health || exit 1 CMD ["node", "dist/server.js"] Override Files
"9229:9229"
services: app: build: target: production restart: always deploy: resources: limits: cpus: "1.0" memory: 512M
docker compose up
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d Networking Service Discovery Services in the same Compose network resolve by service name:
backend-net
"127.0.0.1:5432:5432"
Volume Strategies volumes:
pgdata:
.:/app
/app/node_modules
/app/.next
pgdata:/var/lib/postgresql/data
./scripts/init.sql:/docker-entrypoint-initdb.d/init.sql
Container Security Dockerfile Hardening
FROM node:22.12-alpine3.20
RUN addgroup -g 1001 -S app && adduser -S app -u 1001 USER app
NET_BIND_SERVICE
Secret Management
.env
API_KEY
db_password
.dockerignore node_modules .git .env .env.* dist coverage .log .next .cache docker-compose.yml Dockerfile* README.md tests/ Debugging Common Commands
docker compose logs -f app
docker compose logs -- tail =50 db
docker compose exec app sh
docker compose exec db psql -U postgres
docker compose ps
docker compose top
docker stats
docker compose up --build
docker compose build --no-cache app
docker compose down
docker compose down -v
docker system prune
Debugging Network Issues
docker compose exec app nslookup db
docker compose exec app wget -qO- http://api:3000/health
docker network ls docker network inspect <project>_default Anti-Patterns
When to Use This Skill Setting up Docker Compose for local development Designing multi-container architectures Troubleshooting container issues Reviewing Dockerfiles for security Implementing container best practices