Docker Survival Guide

The container commands you reach for daily — build, run, debug, clean up — plus the Dockerfile lines that actually matter.

Run & manage containers

Run interactively
docker run -it --rm image sh--rm deletes it on exit
Run detached + ports
docker run -d -p 8080:80 --name web nginx (host:container)
List / all
docker ps · with stopped: docker ps -a
Logs (follow)
docker logs -f --tail 100 web
Shell into running
docker exec -it web sh (or bash)
Stop / kill / remove
docker stop web · docker rm -f web
Copy files
docker cp web:/app/log.txt .
Inspect
docker inspect web · IP/mounts/env as JSON

Images

Build (tag)
docker build -t app:1.0 .
List / remove
docker images · docker rmi app:1.0
Tag & push
docker tag app:1.0 registry/app:1.0 && docker push registry/app:1.0
History (layers)
docker history app:1.0
Prune everything unused
docker system prune -af --volumes (careful)

Dockerfile essentials

FROM
Base image. Pin a tag/digest; prefer -slim / alpine.
Layer caching
Copy package.json & install before copying source, so deps cache.
Multi-stage
FROM node AS buildFROM nginx + COPY --from=build — tiny final image.
CMD vs ENTRYPOINT
ENTRYPOINT = the executable; CMD = default args. Use exec form ["node","x.js"].
.dockerignore
Exclude node_modules, .git — shrinks build context.
Non-root
USER app — never ship a container running as root.

Compose

Up / down
docker compose up -d · docker compose down -v
Rebuild one
docker compose up -d --build web
Logs / exec
docker compose logs -f web · docker compose exec web sh