Run, build, inspect, clean up and harden containers, plus everyday Compose commands.
In the print dialog, choose "Save as PDF" as the destination.
Run and manage
docker run -d --name web -p 8080:80 nginx:1.27
docker run --rm -it alpine:3.20 sh # throwaway interactive container
docker ps -a # include stopped
docker stop web && docker rm web
docker exec -it web sh # shell in a running container
docker logs -f --tail 50 web
docker cp web:/etc/nginx/nginx.conf ./nginx.conf
On a user-defined network containers resolve each other by name. The default bridge does not.
Inspect and debug
docker inspect web --format '{{.State.ExitCode}} oom={{.State.OOMKilled}}'
docker inspect web --format '{{range .NetworkSettings.Networks}}{{.IPAddress}} {{end}}'
docker stats --no-stream
docker top web
docker events --since 10m
docker run --rm -it --entrypoint sh shop-api:1.8.2
Exit code
Meaning
0
Finished normally
1
Application error
125 / 126 / 127
Docker error / not executable / command not found
137
SIGKILL, often out of memory
139
Segmentation fault
143
SIGTERM, normal stop
Clean up
docker system df# disk used by images, containers, volumes
docker container prune # remove stopped containers
docker image prune -a # remove unused images
docker volume prune # remove unused volumes (check first)
Compose
docker compose up -d --build
docker compose ps
docker compose logs -f --tail 50 app
docker compose exec db psql -U app -d appdb
docker compose config # validate and print the merged file
docker compose down # keeps volumes
docker compose down -v # also deletes volumes: destroys data
Hardened run
docker run -d --name api \
--user 10001:10001 --read-only --tmpfs /tmp \
--cap-drop ALL --security-opt no-new-privileges \
--memory 512m --cpus 1 \
registry.example.com/shop-api:1.8.2
Avoid --privileged and mounting /var/run/docker.sock into containers.
docker run -d --name web --restart unless-stopped -p 8080:80 nginx:1.27
docker run --rm -it --user 1000:1000 --read-only --cap-drop ALL alpine sh
docker run --memory 512m --cpus 1.5 app:1.4
docker exec -it web sh
docker logs -f --tail 100 --since 10m web
docker inspect web --format '{{.State.Health.Status}} {{.NetworkSettings.IPAddress}}'
docker stats --no-stream
docker top web
docker diff web
docker cp web:/etc/nginx/nginx.conf ./nginx.conf
docker port web
docker events --since 10m
Volumes and networks
docker volume ls
docker volume inspect pgdata
docker run -v pgdata:/var/lib/postgresql/data postgres:16
docker run -v "$PWD":/work:ro alpine ls /work
docker network ls
docker network create --driver bridge backend
docker network connect backend web
docker network inspect backend
Compose
docker compose config
docker compose up -d --build
docker compose ps
docker compose logs -f api
docker compose exec api sh
docker compose pull && docker compose up -d
docker compose down