Volume Management
Volume Operations
# Create volume
docker volume create \
--driver local \
--opt type=none \
--opt device=/host/path \
--opt o=bind \
volume-name
# List and inspect volumes
docker volume ls
docker volume inspect volume-name
# Cleanup volumes
docker volume prune
docker volume rm volume-name
# Backup volume
docker run --rm \
-v volume-name:/source \
-v $(pwd):/backup \
alpine tar czf /backup/volume-backup.tar.gz -C /source .
# Restore volume
docker run --rm \
-v volume-name:/target \
-v $(pwd):/backup \
alpine tar xzf /backup/volume-backup.tar.gz -C /target
Docker Compose
Basic Compose Configuration
# docker-compose.yml
version: '3.8'
services:
web:
build:
context: ./web
dockerfile: Dockerfile
args:
- BUILD_ENV=production
image: webapp:latest
container_name: webapp
ports:
- "80:80"
environment:
- NODE_ENV=production
- API_URL=http://api:3000
volumes:
- ./web:/app
- /app/node_modules
depends_on:
- api
- db
networks:
- frontend
- backend
deploy:
replicas: 2
resources:
limits:
cpus: '0.5'
memory: 512M
api:
image: api:latest
container_name: api
environment:
- DB_HOST=db
- DB_USER=${DB_USER}
- DB_PASS=${DB_PASS}
networks:
- backend
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/health"]
interval: 30s
timeout: 10s
retries: 3
db:
image: postgres:13
container_name: db
volumes:
- db-data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASS}
networks:
- backend
volumes:
db-data:
networks:
frontend:
backend:
internal: true
Compose Commands
# Start services
docker-compose up -d
docker-compose up -d --scale web=3
# Stop services
docker-compose down
docker-compose down -v --remove-orphans
# View logs
docker-compose logs -f
docker-compose logs -f service-name
# Execute commands
docker-compose exec service-name command
docker-compose run --rm service-name command
# View status
docker-compose ps
docker-compose top
# Build services
docker-compose build
docker-compose build --no-cache service-name
Advanced Compose Features
# docker-compose.override.yml
version: '3.8'
services:
web:
build:
target: development
volumes:
- ./web:/app
environment:
- DEBUG=true
db:
ports:
- "5432:5432"
volumes:
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
Best Practices
Dockerfile Best Practices
# Use multi-stage builds
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
RUN chown -R nginx:nginx /usr/share/nginx/html
USER nginx
EXPOSE 80
HEALTHCHECK --interval=30s --timeout=3s \
CMD wget -q --spider http://localhost/ || exit 1
# Layer optimization
FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
RUN useradd -r appuser && \
chown -R appuser /app
USER appuser
CMD ["python", "app.py"]
Security Best Practices
# Scan images
docker scan image:tag
# Run with security options
docker run -d \
--security-opt no-new-privileges \
--cap-drop ALL \
--cap-add NET_BIND_SERVICE \
image:tag
# Use secrets
echo "secret_value" | docker secret create my_secret -
# Use read-only root filesystem
docker run -d \
--read-only \
--tmpfs /tmp \
image:tag
Quick Reference Cheatsheet
Essential Docker Commands
# Container Management
docker run -d -p 80:80 --name web nginx
docker ps -a
docker start/stop/restart container
docker exec -it container bash
docker logs -f container
# Image Management
docker build -t image:tag .
docker pull/push image:tag
docker rmi image:tag
docker save/load image:tag
# Cleanup
docker system prune -af
docker volume prune
docker network prune
Essential Docker Compose Commands
# Basic Operations
docker-compose up -d
docker-compose down
docker-compose ps
docker-compose logs -f
# Maintenance
docker-compose build
docker-compose pull
docker-compose restart
docker-compose exec service command
Common Docker Run Options
# Port mapping
-p 8080:80
# Volume mounting
-v /host:/container
# Environment variables
-e KEY=VALUE
# Network
--network network-name
# Resources
--memory="512m"
--cpus="0.5"
# Restart policy
--restart unless-stopped
Useful Docker Compose Snippets
version: '3.8'
services:
app:
build: .
ports:
- "80:80"
volumes:
- .:/app
environment:
- NODE_ENV=development
depends_on:
- db
networks:
- app-network
networks:
app-network:
driver: bridge
Remember:
- Always use specific tags for images
- Implement proper logging
- Use multi-stage builds
- Implement health checks
- Regular security scanning
- Proper resource limits
- Documentation of configurations
- Regular cleanup of unused resources
Would you like me to expand on any particular aspect or add more examples?