Часть 1: Docker — основы
Что такое Docker?
Docker — это платформа для контейнеризации приложений. Если объяснять простыми словами, Docker позволяет «упаковать» приложение со всеми его зависимостями в стандартизированный блок (контейнер), который будет работать одинаково на любом компьютере с установленным Docker.
Ключевые преимущества Docker:
- Изоляция: каждое приложение работает в своей среде
- Переносимость: работает одинаково везде
- Легкость: потребляет меньше ресурсов, чем виртуальные машины
- Скорость: быстрый запуск и остановка
- Версионирование: легко откатиться к предыдущей версии
Образы vs Контейнеры: В чём разница?
Образ (Image):
- Это шаблон, только для чтения
- Содержит инструкции для создания контейнера
- Можно сравнить с классом в программировании
- Не может быть изменен после создания
- Хранится в репозитории (например, Docker Hub)
Контейнер:
- Это запущенный экземпляр образа
- Можно изменять во время работы
- Имеет свою файловую систему
- Можно сравнить с объектом класса
- Исчезает после удаления (если не сохранять данные в volumes)
Пример отношения образа к контейнеру:
Образ Ubuntu → Можно запустить 10 разных контейнеров
Образ Nginx → Можно запустить несколько веб-серверов на разных портах
Основные команды Docker с примерами использования
Сценарий 1: Развертывание веб-приложения
# Создаем образ веб-приложения
docker build -t mywebapp:v1 .
# Запускаем контейнер с проброской портов
docker run -d -p 80:80 --name webapp mywebapp:v1
# Проверяем логи
docker logs webapp
# Перезапускаем при необходимости
docker restart webapp
Сценарий 2: Работа с базой данных
# Запускаем PostgreSQL
docker run -d
--name my-postgres
-e POSTGRES_PASSWORD=mysecretpassword
-v postgres-data:/var/lib/postgresql/data
-p 5432:5432
postgres:13
# Подключаемся к базе
docker exec -it my-postgres psql -U postgres
Сценарий 3: Разработка с горячей перезагрузкой
# Запускаем контейнер с монтированием локальной директории
docker run -d
--name dev-env
-v $(pwd):/app
-p 3000:3000
node:14
npm run dev
Часть 2: Docker Compose
Что такое Docker Compose?
Docker Compose — это инструмент для определения и запуска многоконтейнерных приложений. Он использует YAML-файлы для конфигурации служб приложения и позволяет запускать все службы одной командой.
Основные возможности Docker Compose:
- Управление несколькими контейнерами как единым приложением
- Сохранение конфигурации в файле
- Управление сетями и томами
- Масштабирование служб
Практические сценарии использования Docker Compose
Сценарий 1: Веб-приложение с базой данных
# docker-compose.yml
version: '3.8'
services:
web:
build: .
ports:
- "3000:3000"
depends_on:
- db
environment:
- DATABASE_URL=postgres://user:pass@db:5432/dbname
db:
image: postgres:13
volumes:
- postgres-data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=dbname
volumes:
postgres-data:
Сценарий 2: Микросервисная архитектура
# docker-compose.yml
version: '3.8'
services:
frontend:
build: ./frontend
ports:
- "80:80"
backend:
build: ./backend
ports:
- "8080:8080"
depends_on:
- db
- redis
db:
image: mysql:8
volumes:
- db-data:/var/lib/mysql
redis:
image: redis:6
volumes:
- redis-data:/data
volumes:
db-data:
redis-data:
Сценарий 3: Разработческое окружение
# docker-compose.yml
version: '3.8'
services:
dev:
build:
context: .
dockerfile: Dockerfile.dev
volumes:
- .:/app
- /app/node_modules
ports:
- "3000:3000"
environment:
- NODE_ENV=development
command: npm run dev
Команды Docker Compose с пояснениями
# Запуск всех сервисов в фоновом режиме
docker-compose up -d
# Просмотр логов конкретного сервиса
docker-compose logs backend
# Остановка всех сервисов с удалением контейнеров
docker-compose down
# Пересборка и запуск определенного сервиса
docker-compose up -d --build frontend
# Масштабирование сервиса
docker-compose up -d --scale backend=3
Типичные сценарии отладки
Проверка состояния сервисов
# Статус всех сервисов
docker-compose ps
# Использование ресурсов
docker-compose top
Доступ к контейнерам
# Выполнение команды в контейнере
docker-compose exec backend bash
# Просмотр логов в реальном времени
docker-compose logs -f