Essential Docker commands for containerized development.
# List containers
docker ps # Running containers
docker ps -a # All containers
docker ps -q # Only container IDs
# Run container
docker run <image>
docker run -d <image> # Detached mode
docker run -it <image> # Interactive
docker run --name <name> <image>
docker run -p 8080:80 <image> # Port mapping
docker run -v /host:/container <image> # Volume mount
docker run --env KEY=value <image>
# Start/Stop containers
docker start <container>
docker stop <container>
docker restart <container>
# Remove containers
docker rm <container>
docker rm -f <container> # Force remove
docker rm $(docker ps -aq) # Remove all
# Execute commands in container
docker exec <container> <command>
docker exec -it <container> bash
docker exec -it <container> sh
# View logs
docker logs <container>
docker logs -f <container> # Follow logs
docker logs --tail 100 <container>
# Inspect container
docker inspect <container>
docker stats <container> # Real-time stats
# Copy files
docker cp <container>:/path /host/path
docker cp /host/path <container>:/path
# List images
docker images
docker images -a
# Pull image
docker pull <image>
docker pull <image>:<tag>
# Build image
docker build -t <name> .
docker build -t <name>:<tag> .
docker build --no-cache -t <name> .
# Remove images
docker rmi <image>
docker rmi -f <image> # Force remove
docker rmi $(docker images -q) # Remove all
# Tag image
docker tag <image> <new-name>:<tag>
# Push image
docker push <image>:<tag>
# Save/Load images
docker save <image> > image.tar
docker load < image.tar
# History
docker history <image>
# Scan for vulnerabilities
docker scan <image>
# Start services
docker-compose up
docker-compose up -d # Detached mode
docker-compose up --build # Rebuild images
# Stop services
docker-compose down
docker-compose down -v # Remove volumes
docker-compose down --rmi all # Remove images
# View services
docker-compose ps
docker-compose ps -a
# View logs
docker-compose logs
docker-compose logs -f <service>
docker-compose logs --tail=100
# Execute commands
docker-compose exec <service> <command>
docker-compose exec <service> bash
# Restart services
docker-compose restart
docker-compose restart <service>
# Build services
docker-compose build
docker-compose build --no-cache
# Scale services
docker-compose up -d --scale <service>=3
# Validate config
docker-compose config
# List networks
docker network ls
# Create network
docker network create <network>
docker network create --driver bridge <network>
# Connect/Disconnect
docker network connect <network> <container>
docker network disconnect <network> <container>
# Inspect network
docker network inspect <network>
# Remove network
docker network rm <network>
# Prune unused networks
docker network prune
# List volumes
docker volume ls
# Create volume
docker volume create <volume>
# Inspect volume
docker volume inspect <volume>
# Remove volume
docker volume rm <volume>
# Prune unused volumes
docker volume prune
# Backup volume
docker run --rm -v <volume>:/data -v $(pwd):/backup ubuntu tar czf /backup/backup.tar.gz /data
# Restore volume
docker run --rm -v <volume>:/data -v $(pwd):/backup ubuntu tar xzf /backup/backup.tar.gz -C /
# System info
docker info
docker version
# Disk usage
docker system df
# Clean up
docker system prune # Remove unused data
docker system prune -a # Remove all unused images
docker system prune --volumes # Include volumes
# Events
docker events
docker events --filter 'container=<name>'
# Start databases
docker-compose up -d postgres mongodb redis
# View logs
docker-compose logs -f
# Stop everything
docker-compose down
# Build image
docker build -t myapp:test .
# Run tests
docker run --rm myapp:test npm test
# Push to registry
docker tag myapp:test registry.com/myapp:latest
docker push registry.com/myapp:latest
# Enter running container
docker exec -it <container> bash
# View container logs
docker logs -f <container>
# Inspect container
docker inspect <container> | grep IPAddress
# PostgreSQL backup
docker exec <postgres-container> pg_dump -U postgres dbname > backup.sql
# MongoDB backup
docker exec <mongo-container> mongodump --out /backup
# Restore
docker exec -i <postgres-container> psql -U postgres dbname < backup.sql
version: '3.8'
services:
postgres:
image: postgres:15
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: mydb
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
mongodb:
image: mongo:7
ports:
- "27017:27017"
volumes:
- mongo_data:/data/db
redis:
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
postgres_data:
mongo_data:
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]
Add to your shell config:
alias d='docker'
alias dc='docker-compose'
alias dps='docker ps'
alias dpsa='docker ps -a'
alias di='docker images'
alias dex='docker exec -it'
alias dlog='docker logs -f'
alias dprune='docker system prune -a --volumes'
Happy Containerizing! 🐳