Docker Environment Initialization Skill
Overview
This skill creates a complete Docker environment for a project, including:
-
Dockerfile optimized for the application type
-
docker-compose.yaml with all required services
-
.dockerignore for efficient builds
-
.env.example for environment configuration
Activation
Use this skill when:
-
Setting up Docker for a new project
-
Migrating an existing project to Docker
-
Adding Docker support to a codebase
Process
- Detect Project Type
Analyze the project to determine:
-
Primary language (Node.js, Python, PHP, Go, etc.)
-
Framework (Laravel, Express, Django, etc.)
-
Required services (database, cache, queue)
-
Existing configuration files
- Consult Documentation
Read relevant documentation:
-
02-dockerfile.md for Dockerfile patterns
-
03-compose-fundamentals.md for compose structure
-
05-databases.md if database needed
-
10-architecture.md for folder structure
- Generate Files
Dockerfile
Multi-stage build pattern
FROM base AS builder
Build steps
FROM base AS production
Production setup
Key elements:
-
Use appropriate base image
-
Multi-stage build for smaller images
-
Non-root user for security
-
Health check
-
Proper COPY order for caching
docker-compose.yaml
services: app: build: . # Configuration
db: image: postgres:16 # Configuration
volumes:
Named volumes
networks:
Network configuration
Key elements:
-
No version field (modern compose)
-
Health checks
-
Dependencies with conditions
-
Named volumes
-
Proper networking
.dockerignore
node_modules/ .git/ .env *.log
.env.example
Application
NODE_ENV=development PORT=3000
Database
DB_HOST=db DB_USER=appuser DB_PASSWORD=
- Provide Instructions
Include:
-
How to start services
-
Available commands
-
Environment setup
-
Development workflow
Templates by Project Type
Node.js
FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . USER node EXPOSE 3000 CMD ["node", "src/index.js"]
Python
FROM python:3.12-slim WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . USER nobody EXPOSE 8000 CMD ["python", "app.py"]
PHP/Laravel
FROM php:8.3-fpm-alpine
WORKDIR /var/www/html
RUN apk add --no-cache postgresql-dev &&
docker-php-ext-install pdo pdo_pgsql
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
COPY . .
RUN composer install --no-dev --optimize-autoloader
EXPOSE 9000
CMD ["php-fpm"]
Go
FROM golang:1.22-alpine AS builder WORKDIR /app COPY go.* ./ RUN go mod download COPY . . RUN CGO_ENABLED=0 go build -o main .
FROM alpine:latest COPY --from=builder /app/main . EXPOSE 8080 CMD ["./main"]
Output
Generated files:
-
Dockerfile
-
docker-compose.yaml (or compose.yaml )
-
.dockerignore
-
.env.example
-
docker/ folder for additional configs (if needed)