Docs
/
Docker Kubernetes
Chapter 3
03 — Container Management
Running Containers
# Basic run
docker run nginx
# Common flags
docker run \
-d # Detached (background)
--name web # Container name
-p 8080:80 # Host:Container port mapping
-e NODE_ENV=production # Environment variable
-v /host/data:/data # Volume mount
--restart unless-stopped # Restart policy
--memory 512m # Memory limit
--cpus 1.5 # CPU limit
nginx:alpine
Lifecycle Commands
# Start / Stop / Restart
docker start <name|id>
docker stop <name|id> # Graceful (SIGTERM, then SIGKILL after 10s)
docker kill <name|id> # Force stop (SIGKILL)
docker restart <name|id>
# Remove
docker rm <name|id> # Remove stopped container
docker rm -f <name|id> # Force remove running container
# Inspect
docker inspect <name|id> # Full JSON details
docker inspect --format '{{.NetworkSettings.IPAddress}}' <name>
docker stats # Live resource usage (CPU, memory, network)
docker top <name|id> # Running processes inside container
Logs
docker logs <name|id> # All logs
docker logs -f <name|id> # Follow (tail -f)
docker logs --tail 100 <name|id> # Last 100 lines
docker logs --since 1h <name|id> # Last hour
docker logs -t <name|id> # With timestamps
# Log drivers (configure in daemon.json or per-container)
docker run --log-driver json-file --log-opt max-size=10m --log-opt max-file=3 my-app
Executing Commands Inside Containers
# Interactive shell
docker exec -it <name|id> sh # sh (alpine)
docker exec -it <name|id> bash # bash (debian/ubuntu)
# Run specific command
docker exec <name|id> ls /app
docker exec <name|id> cat /app/config.json
docker exec <name|id> env # View environment variables
# As a specific user
docker exec -u root <name|id> sh
Resource Limits
# Memory
docker run --memory 256m my-app # Hard limit
docker run --memory 256m --memory-swap 512m # Hard + swap
# CPU
docker run --cpus 1.5 my-app # 1.5 CPU cores
docker run --cpu-shares 512 my-app # Relative weight (default 1024)
# Combined
docker run -d \
--memory 512m \
--cpus 2 \
--pids-limit 100 \
my-app
# Monitor resource usage
docker stats
# CONTAINER CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O
# web 2.5% 128MiB / 512MiB 25% 1.2MB / 500kB 0B / 0B
Restart Policies
| Policy | Behavior |
|---|---|
no | Never restart (default) |
on-failure | Restart only on non-zero exit code |
on-failure:5 | Restart on failure, max 5 attempts |
always | Always restart (even on docker stop, restarts on daemon start) |
unless-stopped | Like always but not after manual docker stop |
docker run -d --restart unless-stopped --name api my-app
# Update restart policy of running container
docker update --restart always <name>
Copying Files
# Container → Host
docker cp <name>:/app/logs/error.log ./error.log
# Host → Container
docker cp ./config.json <name>:/app/config.json
Container Cleanup
# Remove stopped containers
docker container prune
# Remove unused images
docker image prune
docker image prune -a # All unused (not just dangling)
# Remove unused volumes
docker volume prune
# Remove everything unused
docker system prune # Containers + networks + dangling images
docker system prune -a # + all unused images
docker system prune --volumes # + unused volumes
# Check disk usage
docker system df
Key Takeaways
- Use
-dfor background,-pfor ports,-efor env vars,-vfor volumes docker exec -it <id> shto debug inside running containers- Set memory and CPU limits to prevent containers from consuming all resources
- Use
--restart unless-stoppedfor production containers docker logs -ffor real-time log streaming;--tailand--sincefor filtering- Run
docker system prune -a --volumesperiodically to reclaim disk space docker statsfor live resource monitoring