A practical Docker quick-reference, deployments, troubleshooting, Docker Compose, images, volumes, networks, cleanup, and production operations.
Copy buttons: Every command is placed in a fenced code block. GitHub, VS Code, Obsidian, ChatGPT, and many modern Markdown viewers automatically show a Copy button for fenced code blocks.
- Docker Service
- Help & Reference
- Containers
- Container Lifecycle
- Execute Commands Inside Containers
- Container Logs
- Container Inspection
- Resource Usage
- Copy Files
- Images
- Build Images
- Tag Images
- Registry & Docker Hub
- Save & Load Images
- Volumes
- Networks
- Docker Disk Usage
- Docker Cleanup
- Docker Compose: Start
- Docker Compose: Status
- Docker Compose: Stop / Start / Restart
- Docker Compose: Down
- Docker Compose: Logs
- Docker Compose: Exec / Shell
- Docker Compose: One-off Commands
- Docker Compose: Build
- Docker Compose: Validate Config
- Docker Compose: Multiple Files
- Buildx
- Ports
- Docker Events
- Filters
- Formatted Output
- Restart Policies
- Resource Limits
- Docker Context
- Docker Socket & Permissions
- Docker Daemon Logs
- Docker Storage Paths
- Find Large Docker Logs
- Production Troubleshooting
- Most-used Commands
- Deployment Quick Flow
- Official Docker References
Check Docker version:
docker --versiondocker versionShow Docker system information:
docker infoCheck Docker service:
sudo systemctl status dockerStart Docker:
sudo systemctl start dockerStop Docker:
sudo systemctl stop dockerRestart Docker:
sudo systemctl restart dockerEnable Docker on boot:
sudo systemctl enable dockerEnable Docker and containerd on boot:
sudo systemctl enable docker.servicesudo systemctl enable containerd.serviceDisable Docker auto-start:
sudo systemctl disable docker.servicesudo systemctl disable containerd.serviceDocker help:
docker --helpContainer commands help:
docker container --helpImage commands help:
docker image --helpVolume commands help:
docker volume --helpNetwork commands help:
docker network --helpCompose help:
docker compose --helpRun command help:
docker run --helpBuild command help:
docker build --helpExec command help:
docker exec --helpList running containers:
docker psList all containers:
docker ps -aShow only running container IDs:
docker ps -qShow all container IDs:
docker ps -aqShow latest container:
docker ps -lShow container sizes:
docker ps -sRun an image:
docker run IMAGEExample:
docker run nginxRun in background:
docker run -d nginxRun with a custom name:
docker run -d --name nginx nginxMap a port:
docker run -d --name nginx -p 8080:80 nginxInteractive shell:
docker run -it ubuntu bashDelete container automatically after exit:
docker run --rm ubuntuSet environment variable:
docker run -e APP_ENV=production IMAGEUse an environment file:
docker run --env-file .env IMAGEBind-mount a directory:
docker run -v /host/path:/container/path IMAGEUse named volume:
docker run -v mysql_data:/var/lib/mysql mysqlRestart automatically unless manually stopped:
docker run --restart=unless-stopped IMAGECPU limit:
docker run --cpus="2" IMAGEMemory limit:
docker run --memory="1g" IMAGEStart container:
docker start CONTAINERStop container:
docker stop CONTAINERRestart container:
docker restart CONTAINERPause container:
docker pause CONTAINERUnpause container:
docker unpause CONTAINERKill container immediately:
docker kill CONTAINERRemove container:
docker rm CONTAINERForce remove running container:
docker rm -f CONTAINERRemove multiple containers:
docker rm container1 container2Remove stopped containers:
docker container pruneStart multiple containers:
docker start container1 container2Stop all running containers:
docker stop $(docker ps -q)Remove all exited containers:
docker rm $(docker ps -aq -f status=exited)Open Bash:
docker exec -it CONTAINER bashOpen sh when Bash is unavailable:
docker exec -it CONTAINER shRun PHP version check:
docker exec CONTAINER php -vList files:
docker exec CONTAINER ls -laShow environment variables:
docker exec CONTAINER envRun as root:
docker exec -u root -it CONTAINER bashRun from a specific working directory:
docker exec -w /var/www/html CONTAINER php artisan migrateLaravel migration example:
docker exec -it laravel-app php artisan migrateShow logs:
docker logs CONTAINERFollow logs:
docker logs -f CONTAINERLast 100 lines:
docker logs --tail 100 CONTAINERFollow last 100 lines:
docker logs -f --tail 100 CONTAINERLogs from last 10 minutes:
docker logs --since 10m CONTAINERAdd timestamps:
docker logs -t CONTAINERCommon troubleshooting command:
docker logs -f --tail 200 appInspect container:
docker inspect CONTAINERInspect image:
docker inspect IMAGEInspect network:
docker inspect NETWORKInspect volume:
docker inspect VOLUMEGet container IP:
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' CONTAINERGet restart policy:
docker inspect -f '{{.HostConfig.RestartPolicy.Name}}' CONTAINERGet image used by container:
docker inspect -f '{{.Config.Image}}' CONTAINERLive resource usage:
docker statsSpecific container:
docker stats CONTAINEROne-time resource snapshot:
docker stats --no-streamProcesses inside container:
docker top CONTAINERHost to container:
docker cp ./file.txt CONTAINER:/app/file.txtContainer to host:
docker cp CONTAINER:/app/file.txt ./Copy directory:
docker cp ./folder CONTAINER:/app/List images:
docker imagesEquivalent modern command:
docker image lsList all images:
docker images -aPull image:
docker pull nginxPull explicit latest tag:
docker pull nginx:latestPull specific version:
docker pull mysql:8.4Remove image:
docker rmi IMAGEAlternative:
docker image rm IMAGEForce remove image:
docker rmi -f IMAGEInspect image:
docker image inspect IMAGEImage history:
docker history IMAGERemove dangling images:
docker image pruneRemove all unused images:
docker image prune -aBuild current directory:
docker build .Build and tag:
docker build -t myapp .Build versioned image:
docker build -t myapp:1.0 .Use custom Dockerfile:
docker build -f Dockerfile.production -t myapp:production .Build without cache:
docker build --no-cache -t myapp .Pass build argument:
docker build --build-arg APP_ENV=production -t myapp .Detailed build output:
docker build --progress=plain .Tag image:
docker tag SOURCE TARGETDocker Hub example:
docker tag myapp:latest username/myapp:latestPrivate registry example:
docker tag myapp:latest registry.example.com/myapp:latestGeneral image naming format:
[HOST[:PORT]/]NAMESPACE/REPOSITORY[:TAG]
Login:
docker loginLogout:
docker logoutLogin to private registry:
docker login registry.example.comPush image:
docker push username/myapp:latestPull image:
docker pull username/myapp:latestSave image to tar:
docker save nginx:latest > nginx.tarSave using output option:
docker save -o nginx.tar nginx:latestLoad image:
docker load < nginx.tarLoad with input option:
docker load -i nginx.tarSave compressed:
docker save nginx:latest | gzip > nginx.tar.gzLoad compressed image:
gunzip -c nginx.tar.gz | docker loadList volumes:
docker volume lsCreate volume:
docker volume create app_dataInspect volume:
docker volume inspect app_dataRemove volume:
docker volume rm app_dataRemove unused volumes:
docker volume pruneRun container with named volume:
docker run -v app_data:/var/lib/app IMAGEInspect volume mount path:
docker volume inspect app_dataList networks:
docker network lsCreate network:
docker network create app-networkInspect network:
docker network inspect app-networkRemove network:
docker network rm app-networkRemove unused networks:
docker network pruneConnect container:
docker network connect app-network CONTAINERDisconnect container:
docker network disconnect app-network CONTAINERRun container directly in network:
docker run --network app-network nginxCreate explicit bridge network:
docker network create --driver bridge app-networkShow Docker disk usage:
docker system dfDetailed disk usage:
docker system df -vRemove stopped containers:
docker container pruneRemove dangling images:
docker image pruneRemove all unused images:
docker image prune -aRemove unused networks:
docker network pruneRemove unused volumes:
docker volume pruneGeneral cleanup:
docker system pruneMore aggressive cleanup:
docker system prune -aCleanup including unused volumes:
docker system prune -a --volumesCheck disk usage before cleanup:
docker system df -vWarning: Be very careful with volume cleanup. Volumes may contain databases or persistent application data.
Start services:
docker compose upStart in background:
docker compose up -dBuild and start:
docker compose up -d --buildForce recreation:
docker compose up -d --force-recreateShow services:
docker compose psShow all services:
docker compose ps -aShow images:
docker compose imagesShow processes:
docker compose topShow resource usage:
docker compose statsStop services:
docker compose stopStart stopped services:
docker compose startRestart services:
docker compose restartRestart one service:
docker compose restart appStop MySQL service:
docker compose stop mysqlStart MySQL service:
docker compose start mysqlStop and remove Compose resources:
docker compose downRemove volumes too:
docker compose down -vRemove images:
docker compose down --rmi allRemove containers, volumes, and images:
docker compose down -v --rmi allWarning:
-vremoves project volumes and can delete persistent data.
Show logs:
docker compose logsFollow logs:
docker compose logs -fLast 100 lines:
docker compose logs --tail=100Follow recent logs:
docker compose logs -f --tail=200Specific service:
docker compose logs appFollow Nginx logs:
docker compose logs -f nginxFollow MySQL logs:
docker compose logs -f mysqlOpen Bash in service:
docker compose exec app bashOpen sh:
docker compose exec app shLaravel migration:
docker compose exec app php artisan migrateLaravel optimize:
docker compose exec app php artisan optimizeHorizon status:
docker compose exec app php artisan horizon:statusRestart Laravel queues:
docker compose exec app php artisan queue:restartRun a command in a temporary container:
docker compose run app COMMANDLaravel migration:
docker compose run --rm app php artisan migrateComposer install:
docker compose run --rm app composer installNode build:
docker compose run --rm node npm run buildDifference:
docker compose exec
→ Runs inside an existing running container.
docker compose run
→ Creates a temporary container for a one-off command.
Build all services:
docker compose buildBuild one service:
docker compose build appBuild without cache:
docker compose build --no-cachePull newer base images while building:
docker compose build --pullStart afterward:
docker compose up -dCommon deployment sequence:
docker compose pulldocker compose up -d --remove-orphansRender and validate config:
docker compose configQuiet validation:
docker compose config -qShow defined services:
docker compose config --servicesUse a custom Compose file:
docker compose -f docker-compose.production.yml up -dUse multiple Compose files:
docker compose -f compose.yml -f compose.prod.yml up -dCheck Buildx version:
docker buildx versionList builders:
docker buildx lsCreate and use builder:
docker buildx create --name mybuilder --useInspect builder:
docker buildx inspectMulti-platform build:
docker buildx build --platform linux/amd64,linux/arm64 -t username/myapp:latest --push .Show container port mappings:
docker port CONTAINERExample:
docker port nginxFormatted container ports:
docker ps --format 'table {{.Names}}\t{{.Ports}}'Watch Docker events:
docker eventsEvents from last hour:
docker events --since 1hRunning containers only:
docker ps --filter status=runningExited containers only:
docker ps --filter status=exitedFilter by name:
docker ps --filter name=appDangling images:
docker images --filter dangling=trueContainer name and status:
docker ps --format '{{.Names}} {{.Status}}'Useful container table:
docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}'Useful image table:
docker images --format 'table {{.Repository}}\t{{.Tag}}\t{{.Size}}'No automatic restart:
docker run --restart=no IMAGEAlways restart:
docker run --restart=always IMAGERestart unless manually stopped:
docker run --restart=unless-stopped IMAGERestart on failure:
docker run --restart=on-failure IMAGEUpdate existing container:
docker update --restart=unless-stopped CONTAINERUpdate memory:
docker update --memory 2g CONTAINERUpdate CPU:
docker update --cpus 2 CONTAINERInspect limits:
docker inspect CONTAINERList contexts:
docker context lsShow active context:
docker context showSwitch to default:
docker context use defaultCreate remote context over SSH:
docker context create production --docker "host=ssh://user@server"Use remote context:
docker context use productionNow Docker commands target that server:
docker psReturn to local Docker:
docker context use defaultInspect Docker socket:
ls -l /var/run/docker.sockAdd current user to Docker group:
sudo usermod -aG docker $USERApply group immediately:
newgrp dockerTest Docker access:
docker psSecurity note: Membership in the
dockergroup effectively grants root-level access to the machine.
Show daemon logs:
sudo journalctl -u dockerFollow daemon logs:
sudo journalctl -u docker -fLast 100 lines:
sudo journalctl -u docker -n 100Current boot only:
sudo journalctl -u docker -bTypical Docker data directory:
/var/lib/docker
Show total size:
sudo du -sh /var/lib/dockerShow storage by top-level directory:
sudo du -h --max-depth=1 /var/lib/docker | sort -hPrefer Docker's own cleanup commands instead of deleting files manually:
docker system dfdocker system pruneFind large JSON container logs:
sudo find /var/lib/docker/containers -name '*-json.log' -exec du -h {} + | sort -hRunning containers:
docker psAll containers:
docker ps -aResource usage:
docker statsFollow recent logs:
docker logs -f --tail 200 CONTAINERInspect container:
docker inspect CONTAINERDisk usage:
docker system dfNetworks:
docker network lsVolumes:
docker volume lsDocker daemon logs:
sudo journalctl -u docker -n 200Compose service status:
docker compose psCompose logs:
docker compose logs -f --tail 200Validate Compose config:
docker compose configThese cover a large percentage of everyday DevOps work:
docker psdocker ps -adocker imagesdocker logs -f --tail 200 CONTAINERdocker exec -it CONTAINER bashdocker exec -it CONTAINER shdocker inspect CONTAINERdocker statsdocker stop CONTAINERdocker start CONTAINERdocker restart CONTAINERdocker rm CONTAINERdocker rmi IMAGEdocker network lsdocker volume lsdocker system dfdocker compose psdocker compose up -ddocker compose up -d --builddocker compose downdocker compose logs -fdocker compose exec app bashdocker compose pulldocker compose restartdocker compose configPull application changes:
git pullPull latest container images:
docker compose pullBuild services:
docker compose buildStart/recreate services:
docker compose up -d --remove-orphansCheck service status:
docker compose psReview recent logs:
docker compose logs --tail=100Laravel example:
docker compose exec app php artisan migrate --forcedocker compose exec app php artisan optimizedocker compose exec app php artisan queue:restartOfficial Docker CLI reference:
https://docs.docker.com/reference/cli/docker/
Official Docker Compose reference:
https://docs.docker.com/reference/cli/docker/compose/
Official Docker cheat sheet PDF:
https://docs.docker.com/get-started/docker_cheatsheet.pdf
Docker Engine Linux post-install guide:
https://docs.docker.com/engine/install/linux-postinstall/
Docker networking reference:
https://docs.docker.com/reference/cli/docker/network/
Docker volume reference:
https://docs.docker.com/reference/cli/docker/volume/
Docker system reference:
https://docs.docker.com/reference/cli/docker/system/
Before destructive cleanup commands, inspect Docker disk usage:
docker system df -vBe cautious with:
docker volume prunedocker system prune -a --volumesdocker compose down -vThese commands may remove persistent data such as MySQL, PostgreSQL, Redis, uploads, or application state if that data lives in Docker volumes.
Optional shortcuts for your shell:
alias dps='docker ps'alias dpa='docker ps -a'alias di='docker images'alias dc='docker compose'alias dcu='docker compose up -d'alias dcd='docker compose down'alias dcl='docker compose logs -f --tail=200'alias dcp='docker compose ps'alias ddf='docker system df'Add aliases permanently to Bash:
nano ~/.bashrcReload:
source ~/.bashrcEnd of Docker CLI Cheat Sheet