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