Docker Essentials
Common Docker commands for container management, image building, networking, and troubleshooting.
Container Lifecycle
# Run a container (detached, with restart policy)
docker run -d --name myapp --restart unless-stopped -p 8080:80 myimage:latest
# Execute a command inside a running container
docker exec -it container_name /bin/bash
# View container logs (follow + timestamps)
docker logs -f --tail 100 --timestamps container_name
# Inspect container details
docker inspect container_name | jq '.[0].NetworkSettings'
# Copy files to/from container
docker cp localfile.txt container_name:/path/in/container/
docker cp container_name:/path/in/container/file.txt ./local/
Image Management
# Build with build args and no cache
docker build --no-cache --build-arg ENV=production -t myapp:1.0 .
# Multi-stage build (Dockerfile)
# Stage 1: Build
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# Stage 2: Production
FROM node:22-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/index.js"]
# Tag and push to registry
docker tag myapp:1.0 myregistry.azurecr.io/myapp:1.0
docker push myregistry.azurecr.io/myapp:1.0
# Prune unused images
docker image prune -a --filter "until=168h" # older than 7 days
# Save/load images (offline transfer)
docker save myapp:1.0 | gzip > myapp-1.0.tar.gz
docker load < myapp-1.0.tar.gz
Docker Compose
# docker-compose.yml
services:
app:
build: .
ports:
- "3000:3000"
environment:
- NODE_ENV=production
- DB_HOST=db
depends_on:
db:
condition: service_healthy
restart: unless-stopped
db:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_DB: mydb
POSTGRES_PASSWORD_FILE: /run/secrets/db_password
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
volumes:
pgdata:
# Compose commands
docker compose up -d
docker compose logs -f app
docker compose down -v # remove volumes too
docker compose ps
docker compose exec app sh
Cleanup
# Nuclear cleanup (remove everything unused)
docker system prune -a --volumes
# Remove stopped containers
docker container prune
# Remove dangling images
docker image prune
# Check disk usage
docker system df
Troubleshooting
# Check container resource usage
docker stats --no-stream
# View container events
docker events --since "1h"
# Debug networking
docker run --rm --net container:target_container nicolaka/netshoot
# Check container health
docker inspect --format='{{.State.Health.Status}}' container_name