Показаны различия между двумя версиями страницы.
| — |
методология_devops:связывание_контейнеров_с_помощью_docker-compose:start [2025/05/31 20:31] (текущий) kirill создано |
||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| + | # Связывание контейнеров с помощью Docker Compose | ||
| + | ## Введение | ||
| + | |||
| + | * **Проблема: | ||
| + | * **Решение: | ||
| + | |||
| + | ## Что такое Docker Compose? | ||
| + | |||
| + | * **Определение: | ||
| + | * **Принцип работы: | ||
| + | * **Преимущества: | ||
| + | * **Упрощение управления: | ||
| + | * **Определение зависимостей: | ||
| + | * **Конфигурация сети:** Автоматическое создание виртуальных сетей для взаимодействия контейнеров. | ||
| + | * **Управление томами: | ||
| + | * **Воспроизводимость: | ||
| + | |||
| + | ## Установка Docker Compose | ||
| + | |||
| + | * Docker Compose обычно устанавливается вместе с Docker Desktop. | ||
| + | * Для Linux необходимо установить его отдельно. Инструкции можно найти в официальной документации Docker. | ||
| + | * **Проверка установки: | ||
| + | |||
| + | ## Основной файл конфигурации: | ||
| + | |||
| + | * **Формат: | ||
| + | * **Основные секции: | ||
| + | * **`version`: | ||
| + | * **`services`: | ||
| + | * **`networks`: | ||
| + | * **`volumes`: | ||
| + | |||
| + | ## Секция `services` | ||
| + | |||
| + | * **Определение сервиса: | ||
| + | * **`image`: | ||
| + | * **`build`: | ||
| + | ```yaml | ||
| + | build: ./web | ||
| + | # или | ||
| + | build: | ||
| + | context: ./api | ||
| + | dockerfile: Dockerfile.prod | ||
| + | ``` | ||
| + | * **`ports`: | ||
| + | ```yaml | ||
| + | ports: | ||
| + | - " | ||
| + | - " | ||
| + | - " | ||
| + | ``` | ||
| + | * **`volumes`: | ||
| + | ```yaml | ||
| + | volumes: | ||
| + | - db_data:/ | ||
| + | - ./app:/app | ||
| + | - my_anonymous_volume:/ | ||
| + | ``` | ||
| + | * **`environment`: | ||
| + | ```yaml | ||
| + | environment: | ||
| + | POSTGRES_USER: | ||
| + | POSTGRES_PASSWORD: | ||
| + | ``` | ||
| + | * **`depends_on`: | ||
| + | ```yaml | ||
| + | depends_on: | ||
| + | - database | ||
| + | ``` | ||
| + | * **`restart`: | ||
| + | ```yaml | ||
| + | restart: always | ||
| + | ``` | ||
| + | * **`networks`: | ||
| + | ```yaml | ||
| + | networks: | ||
| + | - frontend | ||
| + | - backend | ||
| + | ``` | ||
| + | * **`command`: | ||
| + | ```yaml | ||
| + | command: [" | ||
| + | ``` | ||
| + | * **`entrypoint`: | ||
| + | ```yaml | ||
| + | entrypoint: ["/ | ||
| + | ``` | ||
| + | |||
| + | ## Секция `networks` | ||
| + | |||
| + | * **Определение пользовательских сетей: | ||
| + | * **Драйверы сетей: | ||
| + | * **Пример: | ||
| + | ```yaml | ||
| + | networks: | ||
| + | frontend: | ||
| + | driver: bridge | ||
| + | backend: | ||
| + | driver: bridge | ||
| + | ``` | ||
| + | |||
| + | ## Секция `volumes` | ||
| + | |||
| + | * **Определение именованных томов: | ||
| + | * **Пример: | ||
| + | ```yaml | ||
| + | volumes: | ||
| + | db_data: | ||
| + | ``` | ||
| + | |||
| + | ## Основные команды Docker Compose | ||
| + | |||
| + | * **`docker-compose up`:** Создает и запускает все сервисы, | ||
| + | * `-d` или `--detach`: Запускает сервисы в фоновом режиме. | ||
| + | * **`docker-compose down`:** Останавливает и удаляет контейнеры, | ||
| + | * `--rmi all`: Удаляет все образы, | ||
| + | * `-v`: Удаляет именованные тома. | ||
| + | * **`docker-compose start < | ||
| + | * **`docker-compose stop < | ||
| + | * **`docker-compose restart < | ||
| + | * **`docker-compose ps`:** Отображает статус запущенных сервисов. | ||
| + | * **`docker-compose logs < | ||
| + | * `-f` или `--follow`: Следит за логами в реальном времени. | ||
| + | * **`docker-compose build < | ||
| + | * **`docker-compose pull < | ||
| + | * **`docker-compose scale < | ||
| + | * **`docker-compose exec < | ||
| + | * **`docker-compose config`:** Проверяет и отображает объединенную конфигурацию. | ||
| + | |||
| + | ## Пример `docker-compose.yml` для веб-приложения с базой данных | ||
| + | |||
| + | ```yaml | ||
| + | version: " | ||
| + | |||
| + | services: | ||
| + | web: | ||
| + | image: nginx: | ||
| + | ports: | ||
| + | - " | ||
| + | volumes: | ||
| + | - ./ | ||
| + | depends_on: | ||
| + | - app | ||
| + | networks: | ||
| + | - frontend | ||
| + | |||
| + | app: | ||
| + | build: ./app | ||
| + | environment: | ||
| + | DATABASE_URL: | ||
| + | depends_on: | ||
| + | - db | ||
| + | networks: | ||
| + | - frontend | ||
| + | - backend | ||
| + | |||
| + | db: | ||
| + | image: postgres:13 | ||
| + | volumes: | ||
| + | - db_data:/ | ||
| + | environment: | ||
| + | POSTGRES_USER: | ||
| + | POSTGRES_PASSWORD: | ||
| + | POSTGRES_DB: | ||
| + | networks: | ||
| + | - backend | ||
| + | |||
| + | networks: | ||
| + | frontend: | ||
| + | driver: bridge | ||
| + | backend: | ||
| + | driver: bridge | ||
| + | |||
| + | volumes: | ||
| + | db_data: | ||
| + | ``` | ||
| + | ## Описание примера: | ||
| + | |||
| + | * **web сервис**: | ||
| + | * **app сервис**: | ||
| + | * **db сервис**: | ||
| + | * **frontend** и **backend** сети: Изолированные сети для взаимодействия веб-сервера с приложением и приложения с базой данных. | ||
| + | * **db_data том**: Именованный том для хранения данных PostgreSQL. | ||
| + | |||
| + | ## Рабочий процесс с Docker Compose | ||
| + | |||
| + | 1. Создайте файл `docker-compose.yml` с описанием всех сервисов вашего приложения. | ||
| + | 2. При необходимости создайте `Dockerfile` для ваших собственных сервисов (например, | ||
| + | 3. Запустите приложение командой `docker-compose up -d`. | ||
| + | 4. Просматривайте логи сервисов с помощью `docker-compose logs < | ||
| + | 5. Останавливайте и удаляйте приложение командой `docker-compose down`. | ||
| + | |||
| + | ## Заключение | ||
| + | |||
| + | Docker Compose значительно упрощает управление многоконтейнерными Docker-приложениями. Файл `docker-compose.yml` является центральным элементом для определения конфигурации приложения. Понимание основных секций и команд Docker Compose необходимо для эффективной работы с несколькими связанными контейнерами. | ||