Docker Daily Commands - Organized by Workflow
Commands organized by real-world scenarios for faster reference
1. Building Docker Images
Basic Build Commands
# Build from current directory
docker build -t myapp .
# Build with specific Dockerfile
docker build -f Dockerfile.prod -t myapp:prod .
# Build with build arguments
docker build --build-arg NODE_ENV=production -t myapp .
# Build and tag with version
docker build -t myapp:v1.0 -t myapp:latest .
Essential Dockerfile Structure
# Simple Dockerfile
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Multi-Stage Dockerfile (Production)
# Build stage
FROM node:16-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Production stage
FROM node:16-alpine AS production
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
EXPOSE 3000
USER node
CMD ["npm", "start"]
2. Managing Images
Image Operations
# List all images
docker images
# Remove image
docker rmi myapp:latest
# Remove unused images
docker image prune
# Push to registry
docker tag myapp:latest myregistry.azurecr.io/myapp:v1.0
docker push myregistry.azurecr.io/myapp:v1.0
# Pull from registry
docker pull nginx:alpine
3. Running Containers
Basic Run Commands
# Run with port forwarding
docker run -p 8080:80 nginx
# Run in background with name
docker run -d --name myapp -p 3000:3000 myapp:latest
# Run with environment variables
docker run -e NODE_ENV=production -p 3000:3000 myapp
# Run with volume mount
docker run -v $(pwd):/app -p 3000:3000 myapp
# Run interactively (for testing)
docker run -it --rm ubuntu bash
Advanced Run Options
# Run with resource limits
docker run --memory=512m --cpus=1 myapp
# Run with restart policy
docker run --restart=unless-stopped myapp
# Run with multiple environment variables
docker run -e NODE_ENV=production -e PORT=3000 -e DB_HOST=localhost myapp
4. Managing Running Containers
Container Lifecycle
# List running containers
docker ps
# List all containers (running + stopped)
docker ps -a
# Stop container
docker stop myapp
# Start stopped container
docker start myapp
# Restart container
docker restart myapp
# Remove container
docker rm myapp
# Force remove running container
docker rm -f myapp
5. Debugging & Logs
Log Management
# View container logs
docker logs myapp
# Follow logs in real-time
docker logs -f myapp
# View last 100 lines
docker logs --tail=100 myapp
# View logs since specific time
docker logs --since=1h myapp
# View logs with timestamps
docker logs -t myapp
Container Access & Debugging
# Access running container shell
docker exec -it myapp bash
# Run command in container
docker exec myapp ps aux
# Copy files to/from container
docker cp file.txt myapp:/app/
docker cp myapp:/app/logs.txt ./
# Inspect container details
docker inspect myapp
# Check container resource usage
docker stats myapp
# Check all containers resource usage
docker stats
6. Docker Compose Workflows
Basic Compose Operations
# Start all services (foreground)
docker-compose up
# Start all services (background)
docker-compose up -d
# Stop all services
docker-compose down
# Stop and remove volumes
docker-compose down -v
# Rebuild and start
docker-compose up --build
# Start specific service
docker-compose up web
Compose Debugging
# View logs for all services
docker-compose logs
# Follow logs for all services
docker-compose logs -f
# View logs for specific service
docker-compose logs web
# List running services
docker-compose ps
# Execute command in service
docker-compose exec web bash
# Scale services
docker-compose up --scale web=3
Sample docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DB_HOST=db
depends_on:
- db
- redis
volumes:
- ./logs:/app/logs
db:
image: postgres:13
environment:
POSTGRES_DB: myapp
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- db_data:/var/lib/postgresql/data
ports:
- "5432:5432"
redis:
image: redis:alpine
ports:
- "6379:6379"
volumes:
db_data:
7. System Maintenance
Cleanup Commands
# Remove unused containers, networks, images
docker system prune
# Remove unused images
docker image prune
# Remove unused volumes
docker volume prune
# See disk usage
docker system df
# Remove everything (dangerous!)
docker system prune -a
Volume Management
# Create named volume
docker volume create myvolume
# List volumes
docker volume ls
# Use named volume
docker run -v myvolume:/data myapp
# Remove volume
docker volume rm myvolume
8. Registry Operations
Working with Registries
# Login to registry
docker login myregistry.azurecr.io
# Tag for registry
docker tag myapp:latest myregistry.azurecr.io/myapp:v1.0
# Push to registry
docker push myregistry.azurecr.io/myapp:v1.0
# Pull from registry
docker pull myregistry.azurecr.io/myapp:v1.0
Quick Troubleshooting Scenarios
Container Won’t Start
docker logs container_name # Check what went wrong
docker ps -a # See if container exited
docker inspect container_name # Get detailed info
Port Already in Use
docker ps | grep 8080 # See what's using the port
netstat -tulpn | grep 8080 # System-wide port check
Container Performance Issues
docker stats container_name # Check resource usage
docker exec -it container_name top # Check processes inside
Docker Compose Issues
docker-compose logs service_name # Service-specific logs
docker-compose ps # Check service status
docker-compose config # Validate compose file
Organized by workflow - find commands faster when you’re in a specific scenario.