Найти в Дзене
bashninja | DevOps & SRE ⚙️

⚡️ S02E03 — Docker Compose: запускаем микросервисы одной командой

━━━━━━━━━━━━━━━━━━ 👋 Привет, родные! ━━━━━━━━━━━━━━━━━━ После Dockerfile логично научиться поднимать стек из нескольких контейнеров. Сегодня разбираем Docker Compose: как одной командой стартовать веб + база + Redis, настроить сети и персистентность. ━━━━━━━━━━━ 🎯 Что разберём ━━━━━━━━━━━ — Зачем нужен Compose (проблема: docker run × 5 контейнеров) — Структура docker-compose.yml — Services, networks, volumes — Переменные окружения (.env файл) — Зависимости между сервисами (depends_on, healthcheck) — Полезные команды (up, down, logs, exec) — Типичные грабли и как их избежать ━━━━━━━━━━━ 📦 Было vs Стало ━━━━━━━━━━━ Без Compose: docker run -d postgres docker run -d redis docker run -d --link postgres web docker run -d nginx Куча команд, сложно воспроизвести, порты и env в разных местах. С Compose: docker compose up -d Всё описано в одном файле, версионируется, воспроизводимо. ━━━━━━━━━━━ 🚀 Базовый пример ━━━━━━━━━━━ version: '3.8' services: web: build: . ports: - "8080:808

⚡️ S02E03 — Docker Compose: запускаем микросервисы одной командой

━━━━━━━━━━━━━━━━━━

👋 Привет, родные!

━━━━━━━━━━━━━━━━━━

После Dockerfile логично научиться поднимать стек из нескольких контейнеров. Сегодня разбираем Docker Compose: как одной командой стартовать веб + база + Redis, настроить сети и персистентность.

━━━━━━━━━━━

🎯 Что разберём

━━━━━━━━━━━

— Зачем нужен Compose (проблема: docker run × 5 контейнеров)

— Структура docker-compose.yml

— Services, networks, volumes

— Переменные окружения (.env файл)

— Зависимости между сервисами (depends_on, healthcheck)

— Полезные команды (up, down, logs, exec)

— Типичные грабли и как их избежать

━━━━━━━━━━━

📦 Было vs Стало

━━━━━━━━━━━

Без Compose:

docker run -d postgres

docker run -d redis

docker run -d --link postgres web

docker run -d nginx

Куча команд, сложно воспроизвести, порты и env в разных местах.

С Compose:

docker compose up -d

Всё описано в одном файле, версионируется, воспроизводимо.

━━━━━━━━━━━

🚀 Базовый пример

━━━━━━━━━━━

version: '3.8'

services:

web:

build: .

ports:

- "8080:8080"

depends_on:

- postgres

- redis

postgres:

image: postgres:15-alpine

volumes:

- pgdata:/var/lib/postgresql/data

redis:

image: redis:7-alpine

volumes:

pgdata:

Три контейнера, персистентность, зависимости — всё в 20 строках.

━━━━━━━━━━━

🔗 Networks: как общаются

━━━━━━━━━━━

Compose автоматически создаёт bridge-сеть:

— Контейнеры видят друг друга по имени сервиса

— web подключается к postgres:5432, redis:6379

— Изоляция: разные проекты не видят друг друга

━━━━━━━━━━━

💾 Volumes: данные не теряются

━━━━━━━━━━━

Named volumes (рекомендуется для БД):

volumes:

- pgdata:/var/lib/postgresql/data

Bind mounts (для разработки):

volumes:

- ./app:/app # Изменения кода сразу видны

━━━━━━━━━━━

⏱️ Healthcheck: реальная готовность

━━━━━━━━━━━

depends_on запускает по порядку, но НЕ ждёт готовности!

Решение:

postgres:

healthcheck:

test: ["CMD", "pg_isready", "-U", "postgres"]

interval: 5s

web:

depends_on:

postgres:

condition: service_healthy

Теперь web стартует только когда postgres реально готов.

━━━━━━━━━━━

🛑 Типовые грабли

━━━━━━━━━━━

❌ "Connection refused" к базе

→ База не готова, добавь healthcheck

❌ Volumes не сохраняются

→ Используй named volumes

❌ Порты конфликтуют

→ ss -tulnp | grep :8080

❌ Переменные не работают

→ Проверь .env файл

❌ Контейнеры не видят друг друга

→ Убедись в одной сети

━━━━━━━━━━━

🏁 Что делаем в лабе

━━━━━━━━━━━

Задание 1: Flask + PostgreSQL

— Простой стек

— Настройка healthcheck

— Проверка персистентности

Задание 2: Nginx + Flask + PostgreSQL + Redis

— Полный production-like стек

— Frontend/backend сети

— Переменные через .env

— Балансировка и масштабирование

Задание 3: Дебаг проблем

— База не готова

— Volumes не сохраняются

— Порты заняты

━━━━━━━━━━━━━━━━━━

🔗 Лабораторная работа (lab07):

https://github.com/b4shninja/b4shninja/blob/main/courses/from_zero_to_devops_hero/lab07/README.md

━━━━━━━━━━━━━━━━━━

В лабе:

✅ Полная теория с примерами

✅ Готовые проекты для запуска

✅ Мини-челленджи

✅ Troubleshooting guide

✅ Quick Start за 5 минут

━━━━━━━━━━━━━━━━━━

✅ ИТОГ

━━━━━━━━━━━━━━━━━━

— Запускаешь целый стек одной командой

— Понимаешь как работают сети и volumes

— Умеешь дебажить проблемы с зависимостями

— Готов к оркестрации в production (Kubernetes впереди!)

━━━━━━━━━━━━━━━━━━

Давай, газуй! 🚀