Container lifecycle

docker run -d --name web -p 80:80 nginxRun nginx detached, map host:container port
docker run --rm -it ubuntu bashInteractive shell, auto-remove on exit
docker ps -aList all containers (running + stopped)
docker stop $(docker ps -q)Stop all running containers
docker rm $(docker ps -aq)Remove all containers
docker exec -it <container> bashShell into a running container
docker logs -f --tail 100 <container>Stream last 100 lines of logs

Images

docker imagesList local images
docker pull alpine:3.19Pull specific image tag
docker build -t myapp:v1 .Build image from Dockerfile in cwd
docker tag myapp:v1 registry.example.com/myapp:v1Tag for remote registry
docker push registry.example.com/myapp:v1Push tagged image
docker rmi $(docker images -q --filter "dangling=true")Clean up dangling images
docker system prune -af --volumesNuclear: remove ALL unused images, networks, volumes

Networking

docker network lsList networks
docker network create --driver bridge mynetCreate a user-defined bridge network
docker network inspect bridgeSee which containers are on the default bridge
docker run --network mynet --name app1 alpine sleep infinityRun container attached to a network
docker run -p 8080:80 nginxPublish host:8080 → container:80

Volumes

docker volume lsList named volumes
docker volume create app-dataCreate named volume
docker run -v app-data:/data alpine sh -c "echo hi > /data/f"Mount named volume
docker run -v $(pwd):/workspace alpine ls /workspaceBind mount host cwd
docker volume pruneRemove unused volumes

Inspection & debugging

docker inspect <container>Full config + state JSON
docker statsLive CPU / memory / IO per container
docker top <container>Processes inside the container
docker diff <container>Files changed vs image
docker cp <container>:/etc/hosts ./hostsCopy file out of container

Docker Compose

docker compose up -dStart services defined in compose.yml, detached
docker compose logs -f webFollow logs for one service
docker compose psStatus of compose services
docker compose exec db psql -U appRun psql in the db service
docker compose restart webRestart one service without teardown
docker compose down -vStop + remove containers AND volumes
docker compose up -d --build --force-recreate webRebuild + recreate one service

Production hardening

docker run --restart unless-stopped ...Prod: always restart except after manual stop
docker run --memory=512m --cpus="1.0" ...Enforce resource limits
docker run --read-only --tmpfs /tmp ...Read-only rootfs + writable tmpfs (security)
docker run --security-opt=no-new-privileges ...Prevent privilege escalation
docker run --user 1000:1000 ...Run as non-root

We manage 80+ production Docker containers for clients. See what we can do for your stack →