Docker
Docker container runtime operations for image builds, container lifecycle, networking, and storage.
Image Management
Pull and tag images
docker pull nginx:1.25-alpine
docker pull --platform linux/amd64 nginx # specific architecture
docker tag myapp:latest myapp:v1.0
Build an image from a Dockerfile
docker build -t myapp:v1.0 .
docker build --no-cache -t myapp:v1.0 . # force fresh build
docker build --target builder -t myapp:build . # multi-stage target
docker build --build-arg VERSION=1.0 -t myapp . # pass build arguments
List and inspect images
docker images --format 'table {{.Repository}}\t{{.Tag}}\t{{.Size}}'
docker images --filter "dangling=true" # untagged images only
docker inspect nginx:latest --format '{{.Config.Cmd}}'
Export and import images for offline transfer
docker save myapp:v1.0 | gzip > myapp-v1.0.tar.gz
docker load < myapp-v1.0.tar.gz
Container Lifecycle
Run containers
docker run -d --name webserver -p 8080:80 nginx:1.25-alpine
docker run --rm -it alpine:3.19 sh # interactive, auto-remove
docker run -v "$(pwd)":/app -w /app node:20 npm test # bind mount
docker run --env-file .env --network mynet myapp # env + network
Stop, start, remove
docker stop webserver # graceful SIGTERM, then SIGKILL after 10s
docker start webserver # restart a stopped container
docker rm webserver # remove stopped container
docker rm -f webserver # force-remove running container
List containers
docker ps # running only
docker ps -a --format 'table {{.Names}}\t{{.Status}}\t{{.Ports}}'
docker ps -q --filter "status=exited" | xargs docker rm # cleanup exited
Exec and Logs
Shell into a running container
docker exec -it webserver sh
docker exec webserver cat /etc/nginx/nginx.conf # one-off command
Read container logs
docker logs -f --tail 100 webserver # follow, last 100 lines
docker logs --since 5m webserver # last 5 minutes
docker logs webserver 2>&1 | grep -i error # filter for errors
Copy Files
Copy between host and container
docker cp webserver:/etc/nginx/nginx.conf ./nginx.conf # container to host
docker cp ./custom.conf webserver:/etc/nginx/conf.d/ # host to container
Networking
Create and inspect networks
docker network create --driver bridge app-net
docker network ls
docker network inspect app-net | jq '.[0].Containers'
Get container IP address
docker inspect webserver | jq -r '.[0].NetworkSettings.IPAddress'
docker inspect webserver --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
Volumes
Named volumes vs bind mounts
docker volume create pgdata
docker run -d -v pgdata:/var/lib/postgresql/data postgres:16
docker volume ls
docker volume inspect pgdata
Resource Monitoring
Container stats
docker stats --no-stream # snapshot of all containers
docker stats --no-stream --format 'table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}'
Cleanup
Prune unused resources
docker system df # disk usage summary
docker system prune -f # remove stopped containers, dangling images
docker system prune -af --volumes # nuclear option: all unused images + volumes
docker image prune -af # remove all unused images