Docker Commands¶
This reference covers essential Docker commands for managing the brennan.page homelab infrastructure.
Container Management¶
Basic Container Operations¶
# List running containers
docker ps
# List all containers (including stopped)
docker ps -a
# Start a container
docker start container_name
# Stop a container
docker stop container_name
# Restart a container
docker restart container_name
# Remove a container
docker rm container_name
# Force remove a running container
docker rm -f container_name
Container Information¶
# View container logs
docker logs container_name
# View last 50 lines of logs
docker logs --tail 50 container_name
# Follow logs in real-time
docker logs -f container_name
# View container details
docker inspect container_name
# View container resource usage
docker stats container_name
# Execute command in container
docker exec -it container_name bash
Image Management¶
Image Operations¶
# List images
docker images
# Pull an image
docker pull image_name:tag
# Build an image
docker build -t image_name:tag /path/to/Dockerfile
# Remove an image
docker rmi image_name:tag
# Remove unused images
docker image prune
# Remove all unused images
docker image prune -a
Image Information¶
# View image history
docker history image_name:tag
# Inspect image
docker inspect image_name:tag
# Search for images
docker search search_term
Volume Management¶
Volume Operations¶
# List volumes
docker volume ls
# Create a volume
docker volume create volume_name
# Remove a volume
docker volume rm volume_name
# Remove unused volumes
docker volume prune
# Inspect volume
docker volume inspect volume_name
Volume Usage¶
# Backup a volume
docker run --rm -v volume_name:/source -v $(pwd):/backup alpine tar czf /backup/volume-backup.tar.gz -C /source .
# Restore a volume
docker run --rm -v volume_name:/target -v $(pwd):/backup alpine tar xzf /backup/volume-backup.tar.gz -C /target
Network Management¶
Network Operations¶
# List networks
docker network ls
# Create a network
docker network create network_name
# Remove a network
docker network rm network_name
# Connect container to network
docker network connect network_name container_name
# Disconnect container from network
docker network disconnect network_name container_name
# Inspect network
docker network inspect network_name
Network Configuration¶
# Create bridge network with subnet
docker network create --driver bridge --subnet=192.168.0.0/24 network_name
# List containers in network
docker network inspect network_name | jq '.[0].Containers'
Docker Compose¶
Basic Commands¶
# Start services
docker compose up -d
# Stop services
docker compose down
# Restart services
docker compose restart
# View logs
docker compose logs
# View logs for specific service
docker compose logs service_name
# Follow logs
docker compose logs -f
# Rebuild services
docker compose up -d --build
# Pull latest images
docker compose pull
# Remove stopped containers
docker compose down --remove-orphans
Configuration Management¶
# Validate compose file
docker compose config
# View configuration
docker compose config --services
# View environment variables
docker compose config --resolve-hash-vars
Resource Management¶
Resource Limits¶
# View resource usage
docker stats
# View resource usage for specific container
docker stats container_name
# View resource usage with no stream
docker stats --no-stream
# Monitor resource usage continuously
watch docker stats
Cleanup Operations¶
# Remove stopped containers
docker container prune
# Remove unused images
docker image prune
# Remove unused volumes
docker volume prune
# Remove unused networks
docker network prune
# Remove all unused resources
docker system prune -a
System Information¶
Docker System¶
# View Docker system information
docker system info
# View Docker disk usage
docker system df
# View Docker events
docker events
# View Docker version
docker version
# View Docker info
docker info
Service Status¶
# Check Docker daemon status
systemctl status docker
# Start Docker daemon
systemctl start docker
# Stop Docker daemon
systemctl stop docker
# Restart Docker daemon
systemctl restart docker
Troubleshooting Commands¶
Container Issues¶
# Check if container is running
docker ps | grep container_name
# Check container exit code
docker ps -a | grep container_name
# View container logs for errors
docker logs container_name | grep -i error
# Check container resource usage
docker stats container_name
# Inspect container for configuration issues
docker inspect container_name | grep -A 10 -B 10 "Error\|Failed"
Network Issues¶
# Check container network connectivity
docker exec container_name ping google.com
# Check port mapping
docker port container_name
# Check network configuration
docker network inspect network_name
# Test DNS resolution
docker exec container_name nslookup google.com
Volume Issues¶
# Check volume mounts
docker inspect container_name | grep -A 10 -B 10 "Mounts"
# Check volume permissions
docker exec container_name ls -la /path/to/mount
# Check disk space
docker exec container_name df -h
Performance Optimization¶
Resource Optimization¶
# Set memory limit
docker run -m 512m image_name
# Set CPU limit
docker run --cpus="0.5" image_name
# View resource usage history
docker stats --no-stream --format "table {{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}"
Image Optimization¶
# Use multi-stage builds
# Example Dockerfile
FROM node:alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
FROM node:alpine AS runtime
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .
CMD ["node", "server.js"]
Security Commands¶
Security Scanning¶
# Scan image for vulnerabilities
docker scan image_name
# View image security details
docker inspect image_name | grep -A 10 -B 10 "Security"
# Check container user
docker exec container_name whoami
# Check container privileges
docker inspect container_name | grep -A 10 -B 10 "Privileged"
Access Control¶
# Run as non-root user
docker run --user 1000:1000 image_name
# Read-only filesystem
docker run --read-only image_name
# Drop capabilities
docker run --cap-drop ALL image_name
# Add specific capabilities
docker run --cap-add NET_ADMIN image_name
Backup and Recovery¶
Container Backup¶
# Export container
docker export container_name > container_backup.tar
# Import container
docker import container_backup.tar new_image_name
# Commit container state
docker commit container_name new_image_name
Data Backup¶
# Backup database container
docker exec postgres_container pg_dump -U username database > backup.sql
# Backup application data
docker exec app_container tar czf /backup/app_data.tar.gz /app/data
# Copy files from container
docker cp container_name:/path/to/file ./local_file
Monitoring and Logging¶
Log Management¶
# Configure log rotation
# In docker-compose.yml:
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
# View log configuration
docker inspect container_name | grep -A 10 -B 10 "LogConfig"
Health Checks¶
# Define health check in Dockerfile
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost/ || exit 1
# View health status
docker ps --format "table {{.Names}}\t{{.Status}}"
# Check health details
docker inspect container_name | grep -A 10 -B 10 "Health"
Common Patterns¶
Development Workflow¶
# Build and run development container
docker build -t app:dev .
docker run -p 3000:3000 -v $(pwd):/app app:dev
# Watch for changes and rebuild
docker run -p 3000:3000 -v $(pwd):/app app:dev npm run dev
Production Deployment¶
# Deploy with environment variables
docker run -d \
--name production_app \
-e NODE_ENV=production \
-e DATABASE_URL=postgresql://user:pass@db:5432/db \
-p 80:3000 \
app:latest
# Scale services
docker compose up -d --scale app=3
Integration with Homelab¶
Service Management¶
# Deploy homelab service
cd /opt/homelab/services/service_name
docker compose up -d
# Check service status
docker compose ps
# Update service
docker compose pull
docker compose up -d
# Backup service data
./scripts/backup-service.sh service_name
Monitoring¶
# Check all homelab services
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
# Monitor resource usage
docker stats --format "table {{.Names}}\t{{.CPUPerc}}\t{{.MemUsage}}"
# View service logs
docker compose logs -f