Skip to main content

Docker Command Cheat Sheet

Complete reference for Docker CLI commands. Organized by category for easy lookup.

Container Lifecycle

CommandDescription
docker run [OPTIONS] IMAGE [COMMAND]Create and start a new container
docker create IMAGECreate a container without starting it
docker start CONTAINERStart a stopped container
docker stop CONTAINERStop a running container (graceful)
docker restart CONTAINERStop and restart a container
docker pause CONTAINERPause all processes in container
docker unpause CONTAINERResume paused container
docker kill CONTAINERForce stop container (SIGKILL)
docker rm CONTAINERDelete a stopped container
docker rm -f CONTAINERForce delete a running container
docker wait CONTAINERWait for container to stop, return exit code

Common docker run Options

FlagDescriptionExample
-dDetached mode (background)docker run -d nginx
-itInteractive + TTY (terminal)docker run -it ubuntu bash
-pPort mapping (host:container)docker run -p 8080:80 nginx
--exposeExpose port (internal)docker run --expose 8080 nginx
-vVolume mount (host:container)docker run -v /data:/app nginx
--mountAdvanced mount (type=bind/volume/tmpfs)docker run --mount type=bind,src=/data,dst=/app nginx
--nameAssign container namedocker run --name web nginx
-eEnvironment variabledocker run -e KEY=value nginx
--env-fileLoad env vars from filedocker run --env-file .env nginx
--networkConnect to networkdocker run --network mynet nginx
--rmAuto-remove on exitdocker run --rm nginx
--restartRestart policydocker run --restart=always nginx
-wWorking directory in containerdocker run -w /app nginx
-uUser (uid:gid or name)docker run -u 1000:1000 nginx
--memoryMemory limitdocker run --memory=512m nginx
--memory-swapTotal memory + swap limitdocker run --memory=512m --memory-swap=1g nginx
--cpusCPU limit (fraction)docker run --cpus=1.5 nginx
--cpuset-cpusCPU cores alloweddocker run --cpuset-cpus=0,1 nginx
--cap-addAdd Linux capabilitydocker run --cap-add=NET_ADMIN nginx
--cap-dropDrop Linux capabilitydocker run --cap-drop=ALL nginx
--security-optSecurity optionsdocker run --security-opt=no-new-privileges nginx
--labelAdd metadata labeldocker run --label version=1.0 nginx
--linkLink to another container (deprecated, use networks)docker run --link db:database nginx
-hContainer hostnamedocker run -h myhost nginx
--tmpfsMount tmpfs volumedocker run --tmpfs /tmp nginx
--initRun init process (PID 1)docker run --init nginx
--userRun as userdocker run --user=nobody nginx
-aAttach stdout/stderr/stdindocker run -a stdout -a stderr nginx

Container Inspection

CommandDescription
docker psList running containers
docker ps -aList all containers (running + stopped)
docker ps -qList container IDs only
docker ps --filter "status=running"Filter containers by status
docker logs CONTAINERView container logs (stdout/stderr)
docker logs -f CONTAINERFollow logs (like tail -f)
docker logs --tail 50 CONTAINERShow last 50 log lines
docker logs --since 2024-01-01 CONTAINERLogs since timestamp
docker logs --timestamps CONTAINERInclude timestamps in logs
docker inspect CONTAINERGet detailed container info (JSON)
docker inspect --format='{{.State.Status}}' CONTAINERFormat inspect output
docker top CONTAINERList running processes in container
docker stats CONTAINERLive resource usage (CPU, memory, network)
docker stats --no-streamSingle snapshot of stats
docker port CONTAINERList port mappings
docker diff CONTAINERShow filesystem changes since container start
docker export CONTAINERExport container filesystem as tarball
docker export CONTAINER > container.tarSave container to file

Container Interaction

CommandDescription
docker exec -it CONTAINER COMMANDExecute command in running container
docker exec CONTAINER ls -laRun non-interactive command
docker exec -u root CONTAINER apt-get updateExecute as specific user
docker exec -w /app CONTAINER npm startExecute in specific working directory
docker attach CONTAINERAttach to container's stdin/stdout/stderr
docker cp CONTAINER:/path/file.txt .Copy file from container to host
docker cp file.txt CONTAINER:/path/Copy file from host to container
docker cp CONTAINER:/dir/. ./local-dir/Copy directory from container
docker rename OLD_NAME NEW_NAMERename a container
docker update --cpus=2 CONTAINERUpdate container resource limits
docker update --restart=always CONTAINERUpdate restart policy

Image Management

CommandDescription
docker build -t IMAGE:TAG .Build image from Dockerfile
docker build -t IMAGE:TAG -f path/Dockerfile .Build from specific Dockerfile
docker build --build-arg KEY=value -t IMAGE:TAG .Pass build arguments
docker build --no-cache -t IMAGE:TAG .Build without layer cache
docker pull IMAGE:TAGDownload image from registry
docker pull gcr.io/project/IMAGE:TAGPull from specific registry
docker push IMAGE:TAGUpload image to registry
docker imagesList local images
docker images -qList image IDs only
docker images --filter "dangling=true"List untagged images
docker image ls -aList all images (same as docker images -a)
docker rmi IMAGE:TAGDelete image
docker rmi -f IMAGE:TAGForce delete image
docker tag SOURCE:TAG DEST:TAGCreate image alias/tag
docker save IMAGE:TAG > image.tarExport image as tarball
docker save IMAGE:TAG | gzip > image.tar.gzExport compressed image
docker load < image.tarImport image from tarball
docker import image.tar IMAGE:TAGImport container/tarball as image
docker history IMAGE:TAGShow layer history of image
docker inspect IMAGE:TAGGet image metadata (JSON)
docker inspect --format='{{.Config.Env}}' IMAGE:TAGGet environment variables

Volume Management

CommandDescription
docker volume create VOLUMECreate a named volume
docker volume create --opt type=tmpfs VOLUMECreate tmpfs volume
docker volume lsList volumes
docker volume inspect VOLUMEGet volume metadata
docker volume rm VOLUMEDelete a volume
docker volume rm -f VOLUMEForce delete volume
docker volume pruneRemove all unused volumes
docker volume prune --filter "until=24h"Remove volumes unused for 24h

Network Management

CommandDescription
docker network create NETWORKCreate a custom network
docker network create --driver overlay NETWORKCreate overlay network (Swarm)
docker network lsList networks
docker network inspect NETWORKGet network metadata
docker network connect NETWORK CONTAINERConnect container to network
docker network disconnect NETWORK CONTAINERDisconnect container from network
docker network rm NETWORKDelete a network
docker network pruneRemove all unused networks

Docker Compose

CommandDescription
docker compose upCreate and start containers (uses docker-compose.yml)
docker compose up -dStart containers in background
docker compose up -f docker-compose.prod.ymlUse specific compose file
docker compose downStop and remove containers
docker compose down -vRemove containers and volumes
docker compose down --rmi allRemove containers, volumes, and images
docker compose psList containers for compose project
docker compose logsView logs from all services
docker compose logs -f SERVICEFollow logs for specific service
docker compose exec SERVICE COMMANDExecute command in running service
docker compose exec -it SERVICE bashInteractive shell in service
docker compose buildBuild images for services
docker compose build --no-cacheRebuild without cache
docker compose pullPull service images
docker compose configValidate and print compose configuration
docker compose restartRestart services
docker compose restart SERVICERestart specific service
docker compose stopStop services (don't remove)
docker compose startStart stopped services
docker compose pausePause services
docker compose unpauseUnpause services
docker compose rmRemove stopped containers
docker compose scale SERVICE=NUMScale service to N replicas
docker compose run SERVICE COMMANDRun one-off command in service
docker compose run --rm SERVICE bashInteractive shell (auto-remove)

Docker Swarm

CommandDescription
docker swarm initInitialize Swarm mode
docker swarm init --advertise-addr 192.168.1.1Init with specific advertise address
docker swarm join --token WORKER_TOKEN IP:2377Join as worker node
docker swarm join --token MANAGER_TOKEN IP:2377Join as manager node
docker swarm join-token workerGet worker join token
docker swarm join-token managerGet manager join token
docker swarm leaveLeave Swarm
docker swarm update --autolock=trueEnable autolock
docker node lsList Swarm nodes
docker node inspect NODEGet node metadata
docker node update --availability drain NODESet node unavailable
docker node update --availability active NODEActivate node
docker node rm NODERemove node from Swarm
docker service create --name SERVICE IMAGECreate service
docker service create --replicas 3 --name SERVICE IMAGECreate service with replicas
docker service create -p 8080:80 --name SERVICE IMAGECreate service with port mapping
docker service lsList services
docker service ps SERVICEList service tasks (containers)
docker service inspect SERVICEGet service metadata
docker service update --image IMAGE:TAG SERVICEUpdate service image
docker service update --replicas 5 SERVICEScale service
docker service scale SERVICE=5Scale service (shorthand)
docker service rm SERVICERemove service
docker service logs SERVICEView service logs
docker stack deploy -c docker-compose.yml STACKDeploy stack
docker stack lsList stacks
docker stack services STACKList services in stack
docker stack ps STACKList tasks in stack
docker stack rm STACKRemove stack
docker secret create SECRET file.txtCreate secret from file
docker secret create SECRET -Create secret from stdin
docker secret lsList secrets
docker secret inspect SECRETGet secret metadata
docker secret rm SECRETDelete secret

System & Cleanup

CommandDescription
docker system dfShow Docker disk usage
docker system pruneRemove unused containers, images, volumes, networks
docker system prune -aAlso remove unused images (including tagged)
docker system prune -a --volumesAlso remove unused volumes
docker system prune --filter "until=72h"Remove unused for 72+ hours
docker system infoSystem-wide information
docker system eventsMonitor Docker events in real-time
docker versionShow Docker version
docker infoDetailed system information
docker loginLogin to Docker Hub
docker login -u USERNAME registry.example.comLogin to custom registry
docker logoutLogout from Docker Hub
docker search IMAGESearch Docker Hub for images
docker image pruneRemove dangling images
docker image prune -aRemove all unused images
docker container pruneRemove stopped containers
docker volume pruneRemove unused volumes
docker network pruneRemove unused networks

Dockerfile Quick Reference

InstructionPurposeExample
FROMBase imageFROM ubuntu:20.04
RUNExecute command in layerRUN apt-get update && apt-get install -y curl
CMDDefault command when container startsCMD ["python", "app.py"]
ENTRYPOINTConfigure container as executableENTRYPOINT ["node"]
EXPOSEDocument exposed ports (informational)EXPOSE 8080
ENVSet environment variableENV NODE_ENV=production
ARGBuild-time variableARG BUILD_DATE=unknown
WORKDIRSet working directoryWORKDIR /app
COPYCopy files from host to containerCOPY . /app
ADDCopy/extract files (legacy, use COPY)ADD archive.tar.gz /app
USERSet user for subsequent commandsUSER appuser
VOLUMECreate mount pointVOLUME ["/data"]
LABELAdd metadataLABEL version="1.0"
HEALTHCHECKDefine health checkHEALTHCHECK CMD curl localhost:8080
SHELLSet default shellSHELL ["/bin/bash", "-c"]

Dockerfile Example

# Use specific version for reproducibility
FROM node:18-alpine

# Set metadata
LABEL maintainer="team@example.com"
LABEL version="1.0"

# Set working directory
WORKDIR /app

# Set environment
ENV NODE_ENV=production
ENV PORT=3000

# Install dependencies layer (cached if package.json unchanged)
COPY package*.json ./
RUN npm ci --only=production

# Copy application code
COPY . .

# Create non-root user for security
RUN addgroup -g 1000 appuser && adduser -D -u 1000 -G appuser appuser
USER appuser

# Document exposed port
EXPOSE 3000

# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \
CMD node healthcheck.js

# Run application
CMD ["node", "server.js"]

Multi-Stage Dockerfile Example

# Stage 1: Build
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# Stage 2: Runtime
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY --from=builder /app/dist ./dist
USER node
EXPOSE 3000
CMD ["node", "dist/server.js"]

Useful Aliases & Tips

# Container aliases
alias dc='docker compose'
alias dcup='docker compose up -d'
alias dcdown='docker compose down'
alias dclogs='docker compose logs -f'
alias dcexec='docker compose exec'

# Image aliases
alias dib='docker image build'
alias dil='docker image ls'
alias dir='docker image rm'

# Useful one-liners

# Remove all stopped containers
docker container prune -f

# Remove all dangling images
docker image prune -f

# Stop all running containers
docker stop $(docker ps -q)

# Remove all containers
docker rm $(docker ps -aq)

# Show container resource usage
docker stats --no-stream

# Get container IP address
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' CONTAINER

# Execute command in all running containers
docker ps -q | xargs -I {} docker exec {} COMMAND

# Copy file from all containers to host
docker ps -aq | xargs -I {} docker cp {}:/path/file.txt ./file-{}.txt

# Build and push in one command
docker build -t myrepo/image:tag . && docker push myrepo/image:tag

# Run container and remove on exit
docker run --rm -it IMAGE bash

# Get full image ID
docker inspect --format='{{.Id}}' IMAGE:TAG

# Show layers of an image
docker history --no-trunc IMAGE:TAG

# Create container without starting it
docker create --name mycontainer IMAGE

# Export and import for migration
docker export CONTAINER | docker import - mynewimage:tag

Docker Registry Operations

CommandDescription
docker login registry.example.comLogin to registry
docker tag IMAGE:TAG registry.example.com/image:tagTag for custom registry
docker push registry.example.com/image:tagPush to custom registry
docker pull registry.example.com/image:tagPull from custom registry

Quick Reference: Common Workflows

Run a Web Server

# Run nginx, expose port 80 to 8080
docker run -d -p 8080:80 --name web nginx

# Access at http://localhost:8080

Run a Database

# Run PostgreSQL with volume and env
docker run -d \
-e POSTGRES_PASSWORD=secret \
-v pgdata:/var/lib/postgresql/data \
-p 5432:5432 \
--name db \
postgres:14

Interactive Shell

# Open bash in Ubuntu container
docker run -it --rm ubuntu bash

# Or in running container
docker exec -it CONTAINER bash

Debug Container

# View logs
docker logs -f CONTAINER

# Execute debugging command
docker exec CONTAINER ps aux

# Get resource stats
docker stats CONTAINER

# Inspect filesystem changes
docker diff CONTAINER

Development Workflow

# Build image
docker build -t myapp:dev .

# Run with volume mount (hot reload)
docker run -it --rm \
-v $(pwd):/app \
-p 3000:3000 \
myapp:dev

# Stop with Ctrl+C

Production Deployment

# Build with version tag
docker build -t myrepo/myapp:1.2.3 .

# Push to registry
docker push myrepo/myapp:1.2.3

# On production server, pull and run
docker pull myrepo/myapp:1.2.3
docker run -d \
--restart=always \
-e ENV=production \
-p 80:3000 \
myrepo/myapp:1.2.3

Notes

  • Order matters: docker run OPTIONS IMAGE COMMAND — options go before the image
  • Container vs Image: Image is the template; container is the running instance
  • Volumes persist: Data in volumes survives container deletion
  • Networks enable communication: Containers on same network can reach each other by name
  • Compose is for multi-container apps: Use it locally and in production
  • Always tag images with versions: Avoid latest in production
  • Use non-root users: Run containers as non-root for security
  • Limit resources: Always set memory/CPU limits to prevent resource exhaustion
  • Use .dockerignore: Exclude unnecessary files from build context