🚀 Docker Compose & Docker Image Management — Complete DevOps Guide
🚀 Docker Compose & Docker Image Management — Complete DevOps Guide
Modern applications consist of multiple services such as frontend, backend, database, cache, and monitoring tools. Running containers one by one using docker run becomes difficult to manage in real-time production environments.
To solve this problem, Docker provides Docker Compose, which allows managing multiple containers simultaneously using Infrastructure-as-Code.
⭐ 1️⃣ Why Docker Compose?
In a traditional workflow, containers are created individually:
docker run web
docker run db
docker run redis
docker run api
This approach makes lifecycle management complex.
👉 Docker Compose solves this by allowing:
Single YAML file → Multiple containers → Unified lifecycle
⭐ 2️⃣ What is Docker Compose?
Docker Compose is a tool used to manage multiple containers on a single host.
✅ Capabilities
✔ Create multiple containers
✔ Start all containers together
✔ Stop all containers together
✔ Delete containers together
✔ Define infrastructure as code
✔ Automatic networking between services
✔ Volume management
⭐ 3️⃣ Compose File
Container configuration is stored inside a compose file written in YAML.
📁 File
docker-compose.yml
✅ Example Compose File
services:
movies:
image: movies:v1
ports:
- "81:80"
train:
image: train:v1
ports:
- "82:80"
dth:
image: dth:v1
ports:
- "83:80"
recharge:
image: recharge:v1
ports:
- "84:80"
⭐ 4️⃣ Installing Docker Compose (Binary Method)
curl -SL https://github.com/docker/compose/releases/download/v2.40.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
👉 Download binary
chmod +x /usr/local/bin/docker-compose
👉 Give executable permission
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
👉 Create symbolic link for global access
docker-compose version
👉 Verify installation
⭐ 5️⃣ Linux Command Types (Important DevOps Concept)
Linux commands are:
✔ Built-in commands (preinstalled)
✔ Package-installed commands (apt, yum, Amazon Linux extras)
✔ Binary downloads (manual installation)
👉 Executables should be placed in /usr/local/bin so they are globally accessible.
⭐ 6️⃣ Docker Compose Commands (Deep Comments)
⭐ Lifecycle Commands
docker-compose up -d
👉 Create and start all containers in detached mode
docker-compose stop
👉 Stop containers without deleting
docker-compose start
👉 Start stopped containers
docker-compose kill
👉 Force stop containers immediately
docker-compose rm
👉 Remove stopped containers
docker-compose down
👉 Stop and delete containers, networks
docker-compose pause
👉 Pause containers
docker-compose unpause
👉 Resume paused containers
⭐ Inspection & Debug Commands
docker-compose ps -a
👉 List containers managed by compose
docker-compose images
👉 List images used by compose
docker-compose logs
👉 Show logs
docker-compose top
👉 Show processes inside containers
docker-compose restart
👉 Restart containers
⭐ Scaling
docker-compose scale train=10
👉 Scale service replicas
⭐ 7️⃣ Changing Default Compose File
Default supported names:
docker-compose.yml
docker-compose.yaml
compose.yml
compose.yaml
Rename file:
mv docker-compose.yml raham.yml
Run custom file:
docker-compose -f raham.yml up -d
docker-compose -f raham.yml ps
docker-compose -f raham.yml down
⭐ 8️⃣ Docker Image Sharing Concept
Local images work only on local server.
git (local) → GitHub (internet)
image (local) → DockerHub (internet)
⭐ 9️⃣ DockerHub Workflow
Steps
✔ Create DockerHub account
✔ Create repository
Commands
docker tag movies:v1 username/movies
👉 Tag image
docker login
👉 Authenticate
docker push username/movies
👉 Push image
Repeat for other images.
Cleanup & Pull
docker rmi -f $(docker images -q)
👉 Remove all images
docker pull username/movies:latest
👉 Pull image
⭐ 🔟 Running Multiple Tools via Containers
docker run -it --name jenkins -p 8080:8080 jenkins/jenkins:lts
👉 Jenkins container
docker run -d --name prometheus-container -p 9090:9090 ubuntu/prometheus
👉 Prometheus container
docker run -d --name grafana -p 3000:3000 grafana/grafana
👉 Grafana container
⭐ 1️⃣1️⃣ Docker Image Save & Load
docker image save swiggy:v1 > swiggy:v1.tar
👉 Convert image to tar file
docker image history swiggy:v1
👉 Show image layers
docker image load < swiggy:v1.tar
👉 Load image from tar
⭐ 1️⃣2️⃣ Compression Commands
gzip dummy:v5.tar
👉 Compress tar file
gzip movies:latest.gz -d
👉 Decompress file
⭐ 1️⃣3️⃣ Reducing Docker Image Size
✔ Push images to DockerHub
✔ Use multi-stage Docker build
✔ Reduce layers in Dockerfile
✔ Use tar compression
Comments
Post a Comment