Basics
Running Containers
docker run nginx # run image docker run -d nginx # detached (background) docker run -p 8080:80 nginx # map port docker run --name web nginx # named container docker run -it ubuntu bash # interactive shell
Essential Commands
docker psList running containers
docker ps -aList all containers (including stopped)
docker imagesList local images
docker pull nginxDownload image from registry
docker infoSystem-wide information
Container Management
Lifecycle
docker start <id>Start a stopped container
docker stop <id>Graceful stop (SIGTERM)
docker kill <id>Force stop (SIGKILL)
docker restart <id>Restart container
docker rm <id>Remove stopped container
docker rm -f <id>Force remove (even if running)
Inspection & Debugging
docker logs <id>View container logs
docker logs -f <id>Follow logs (live)
docker exec -it <id> bashShell into running container
docker inspect <id>Detailed container metadata (JSON)
docker top <id>Running processes in container
docker statsLive resource usage
Copying Files
docker cp file.txt :/app/ # host → container docker cp :/app/log.txt ./ # container → host
Images
Building & Tagging
docker build -t myapp . # build from Dockerfile docker build -t myapp:v2 . # with tag docker tag myapp user/myapp:v2 # retag image
Publishing
docker login docker push user/myapp:v2 docker pull user/myapp:v2
Image Management
docker imagesList all local images
docker rmi <image>Remove image
docker image pruneRemove dangling images
docker system pruneRemove all unused data
docker history <image>Show image layer history
Dockerfile
Common Instructions
FROM node:20Base image
WORKDIR /appSet working directory
COPY . .Copy files into image
RUN npm installRun command during build
CMD ["node", "app.js"]Default command at runtime
EXPOSE 3000Document listening port
ENV NODE_ENV=productionSet environment variable
ARG VERSION=latestBuild-time variable
ENTRYPOINT ["python"]Fixed executable (CMD = args)
Example Dockerfile
FROM node:20-alpine WORKDIR /app COPY package*.json ./ RUN npm ci --production COPY . . EXPOSE 3000 CMD ["node", "server.js"]
Volumes
Persistent Storage
docker volume create mydata docker run -v mydata:/app/data nginx docker run -v $(pwd):/app nginx # bind mount
Volume Commands
docker volume lsList volumes
docker volume inspect <v>Volume details
docker volume rm <v>Remove volume
docker volume pruneRemove unused volumes
Networks
Network Basics
docker network create mynet docker run --network mynet --name api nginx docker run --network mynet --name db postgres
Network Commands
docker network lsList networks
docker network inspect <n>Network details
docker network connect <n> <c>Attach container to network
docker network rm <n>Remove network

Containers on the same network can reach each other by name

Docker Compose
Example compose.yaml
services: web: build: . ports: ["3000:3000"] depends_on: [db] db: image: postgres:16 environment: POSTGRES_PASSWORD: secret volumes: [pgdata:/var/lib/postgresql/data] volumes: pgdata:
Compose Commands
docker compose upStart all services
docker compose up -dStart in background
docker compose downStop and remove containers
docker compose down -vAlso remove volumes
docker compose buildRebuild images
docker compose logs -fFollow all service logs
docker compose psList running services
docker compose exec web bashShell into a service
Useful Patterns
Cleanup Commands
docker system prune -a # remove all unused docker container prune # remove stopped docker image prune -a # remove unused images
Quick Recipes
Temp containerdocker run --rm -it alpine sh
Port checkdocker port
Env varsdocker run -e KEY=val image
Env filedocker run --env-file .env image
Restart policydocker run --restart unless-stopped image
Resource limitdocker run --memory 512m --cpus 1 image