The problem
You need to manage Docker containers, build images, or work with containerized applications.
The solution
# Container management
docker ps # Running containers
docker ps -a # All containers
docker start container_name
docker stop container_name
docker restart container_name
docker rm container_name # Remove container
docker rm $(docker ps -aq) # Remove all stopped containers
# Image management
docker images # List images
docker pull image:tag # Pull image
docker rmi image:tag # Remove image
docker rmi $(docker images -q) # Remove all images
docker image prune # Remove unused images
# Run containers
docker run -d --name myapp image:tag
docker run -it --rm image:tag bash # Interactive, remove after exit
docker run -p 8080:80 image:tag # Port mapping
docker run -v /host:/container image:tag # Volume mount
docker run -e VAR=value image:tag # Environment variable
# Build images
docker build -t myimage:tag .
docker build -f Dockerfile.prod -t myapp:prod .
# Container info and logs
docker logs container_name
docker logs -f container_name # Follow logs
docker inspect container_name
docker stats # Resource usage
docker top container_name # Processes in container
# Exec commands in running container
docker exec -it container_name bash
docker exec container_name ls -la
docker exec -u root container_name bash
# Docker Compose
docker-compose up -d
docker-compose down
docker-compose ps
docker-compose logs -f
docker-compose exec service_name bash
docker-compose build
docker-compose restart
# Networks
docker network ls
docker network create mynetwork
docker network connect mynetwork container
docker network disconnect mynetwork container
docker network inspect mynetwork
# Volumes
docker volume ls
docker volume create myvolume
docker volume rm myvolume
docker volume prune
# Cleanup
docker system df # Disk usage
docker system prune # Remove unused data
docker system prune -a # Remove all unused
# Save and load images
docker save -o image.tar image:tag
docker load -i image.tar
# Copy files
docker cp container:/path/file.txt /host/path/
docker cp /host/file.txt container:/path/
# Docker Hub
docker login
docker logout
docker push username/image:tag
docker search term
# Health check
docker run --health-cmd="curl -f http://localhost/ || exit 1" --health-interval=30s --health-timeout=3s --health-retries=3 image:tag
# Resource limits
docker run --memory="512m" --cpus="1.5" image:tag
docker run --memory-swap="1g" image:tag
# Docker Swarm (basic)
docker swarm init
docker swarm join --token TOKEN MANAGER_IP:2377
docker node ls
docker service create --replicas 3 --name web nginx
docker service ls
docker service ps web
# Registry operations
docker tag local-image:tag registry.example.com/repo:tag
docker push registry.example.com/repo:tag
docker pull registry.example.com/repo:tagPut it to work
# Run Nginx web server
docker run -d --name webserver -p 80:80 -v ~/html:/usr/share/nginx/html nginx
# Run MySQL with persistent data
docker run -d --name mysql-db -e MYSQL_ROOT_PASSWORD=secret -e MYSQL_DATABASE=myapp -v mysql_data:/var/lib/mysql mysql:8.0
# Build and run custom app
docker build -t myapp:latest .
docker run -d -p 3000:3000 --env-file .env myapp:latest
# Docker Compose for full stack
# docker-compose.yml:
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
db:
image: postgres:13
environment:
POSTGRES_PASSWORD: secret
# Run: docker-compose up -d
# Clean up old containers
docker ps -a | grep 'weeks ago' | awk '{print $1}' | xargs docker rm
# Backup database from container
docker exec mysql-db mysqldump -u root -psecret myapp > backup.sql
# Update running service
docker pull nginx:latest
docker stop webserver && docker rm webserver
docker run -d --name webserver -p 80:80 nginx:latestWorth knowing
Use -it for interactive sessions. --rm auto-removes container after exit. Use volumes for persistent data. docker-compose for multi-container apps. Clean up regularly to save disk space. Always use specific tags, not "latest" in production.