🚀 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

Popular posts from this blog

Managing Amazon EBS Volumes and Snapshots Across Regions

Git for Beginners: Complete Guide from Installation to First Push on GitHub

AWS - Amazon Web Services