What is Docker Compose
Docker Compose is basically Docker’s multi-container manager — like a project coordinator for your containers.
Instead of you running 5 to 10 docker run commands manually for different containers, Compose lets you define everything (services, networks, volumes) in one YAML file (usually docker-compose.yml), and then start them all with one command:
docker-compose up
Key Points
One file to rule them all → You describe your whole app’s setup in a docker-compose.yml file.
Multi-container orchestration → Runs several containers together (e.g., your app + database + cache).
Easy to share → The YAML file is portable; anyone can run your stack with docker-compose up.
Built-in networking → Containers can talk to each other by service name.
What is YAML?
YAML (pronounced “yah-mull”) is a human-friendly way to write structured data — think of it as a prettier, less noisy alternative to JSON or XML.
The name stands for "Yet Another Markup Language" or "YAML Ain’t Markup Language" (yes, they made the acronym recursive on purpose — tech folks love that) which emphasizes that YAML is for data, not documents.
Why YAML is popular
Easy to read → No curly braces {} or quotation marks unless needed.
Indentation-based → Uses spaces to show hierarchy (like Python).
Supports comments → You can write notes with #.
Widely used in DevOps → Docker Compose, Kubernetes, GitHub Actions, Ansible, etc., all use YAML
For the purpose of this task, you will need to have the pre-requisites to ensure you can follow along with the task.
PRE-REQUISITES
Make sure:
- Docker is installed and running
- Docker Compose is installed (
docker-compose --version
) - to check that docker-compose is installed - You're using a Linux machine or WSL/Ubuntu
TASK 1: Learn to Use docker-compose.yml
🔹 Step 1: Create a Project Directory
mkdir flask-docker-compose
cd flask-docker-compose
🔹 Step 2: Create Your Flask App
mkdir app
cd app
touch app.py requirements.txt
app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Hello from Flask with Docker Compose!"
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
🔹 Step 3: Create a Dockerfile (in flask-docker-compose/
directory)
# Dockerfile
FROM python:3.12-slim
WORKDIR /app
COPY app/ /app/
RUN pip install -r requirements.txt
EXPOSE 5000
CMD ["python", "app.py"]
🔹 Step 4: Create docker-compose.yml
in the root directory
version: '3'
services:
web:
build: .
ports:
- "5000:5000"
environment:
- FLASK_ENV=development
🔹 Step 5: Run the App with Docker Compose
docker-compose up
Open your browser and visit: http://localhost:5000
You should see: Hello from Flask with Docker Compose!
TASK 2: Pull a Public Docker Image and Run It Locally
🔹 Step 1: Pull a Pre-Built Image (e.g., Nginx)
docker pull nginx
🔹 Step 2: Run Nginx Container
docker run -d --name mynginx -p 8080:80 nginx
Visit: http://localhost:8080
🔹 Step 3: Run as Non-root User (optional)
If you're getting permission errors:
sudo usermod -aG docker $USER
reboot
🔹 Step 4: Inspect Container
docker inspect mynginx
Look for:
"ExposedPorts"
"Mounts"
"State"
🔹 Step 5: View Logs
docker logs mynginx
🔹 Step 6: Stop & Start Container
docker stop mynginx
docker start mynginx
🔹 Step 7: Remove Container When Done
docker rm -f mynginx