Показаны различия между двумя версиями страницы.
— |
методология_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 необходимо для эффективной работы с несколькими связанными контейнерами. |