Docker Cheat Sheet
Docker commands you need every day — images, containers, volumes, networks, Compose, and Dockerfile patterns in one quick-reference page.
7 sections 23 snippets
Images
Build an image
docker build -t myapp:latest .
docker build -t myapp:v1.0 -f Dockerfile.prod . List images
docker images
docker images --filter 'dangling=true' Pull and push
docker pull nginx:alpine
docker tag myapp:latest registry.io/myapp:latest
docker push registry.io/myapp:latest Remove images
docker rmi myapp:latest
docker image prune # remove dangling
docker image prune -a # remove all unused Containers
Run a container
docker run -d --name web -p 8080:80 nginx:alpine
docker run -it --rm ubuntu bash
docker run -d -e DB_HOST=db --env-file .env myapp List containers
docker ps # running
docker ps -a # all Stop and remove
docker stop web
docker rm web
docker rm -f web # force
docker container prune Exec into container
docker exec -it web sh
docker exec web cat /etc/nginx/nginx.conf Logs
docker logs web
docker logs -f web # follow
docker logs --tail 50 web # last 50 lines Volumes
Create and list
docker volume create mydata
docker volume ls Mount volumes
docker run -v mydata:/app/data myapp
docker run -v $(pwd)/src:/app/src myapp Use named volumes for persistence, bind mounts for development
Remove
docker volume rm mydata
docker volume prune Networks
Create and list
docker network create mynet
docker network ls Connect containers
docker run -d --network mynet --name api myapp
docker run -d --network mynet --name db postgres Containers on the same network can reach each other by name
Inspect
docker network inspect mynet Dockerfile Patterns
Basic Dockerfile
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --production
COPY . .
EXPOSE 3000
CMD ["node", "server.js"] Multi-stage build
FROM node:20-alpine AS builder
WORKDIR /app
COPY . .
RUN npm ci && npm run build
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html .dockerignore
node_modules
.git
*.md
.env
dist Docker Compose
Basic compose.yaml
services:
web:
build: .
ports:
- '3000:3000'
environment:
- DB_HOST=db
depends_on:
- db
db:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
environment:
POSTGRES_PASSWORD: secret
volumes:
pgdata: Commands
docker compose up -d
docker compose down
docker compose logs -f web
docker compose exec web sh
docker compose build --no-cache Profiles
# compose.yaml
services:
debug:
profiles: [dev]
image: busybox
# Run with profile:
docker compose --profile dev up Cleanup
Remove everything unused
docker system prune # containers, networks, images
docker system prune -a # include unused images
docker system prune --volumes Disk usage
docker system df
docker system df -v