Зарегистрируйтесь для доступа к 15+ бесплатным курсам по программированию с тренажером

Docker Compose Docker: Основы

Docker

Docker Compose позволяет управлять набором контейнеров, каждый из которых представляет собой один сервис проекта. Управление включает в себя сборку, запуск с учетом зависимостей и конфигурацию. Конфигурация Docker Compose описывается в файле docker-compose.yml, лежащем в корне проекта.

Пример файла docker-compose.yml

# Версия схемы, которую мы используем.
# Зависит от установленной версии docker
# https://docs.docker.com/compose/compose-file/
version: "3"
# Определяем список сервисов — services
# Эти сервисы будут частью нашего приложения
services:

  app: # Имя сервиса
    build:
      # Контекст для сборки образа,
      # в данном случае, текущая директория
      context: .
      # Имя Docker-файла из которого будет собран образ
      dockerfile: Dockerfile
      # Команда, которая будет выполнена после старта сервиса
    command: make start
    ports: # Проброс портов
      - "3000:8000"
    # Перечисляем тома (volumes)
    # Они будут подключены к файловой системе сервиса
    # Например, все что находится в . мы увидим в директории /app
    volumes:
      # Текущая директория пробрасывается в директорию /app внутри контейнера
      # Путь внутри контейнера (после двоеточия) обязательно должен быть абсолютным
      - ".:/app"
      - "/tmp:/tmp"
    # Сервис будет запущен, только после старта db
    depends_on:
      - db

  db:
    # Имя образа. Здесь мы используем базу данных Postgres
    image: postgres:latest
    environment:
      # А так задаются переменные окружения
      POSTGRES_PASSWORD: password
    volumes:
      - pgdata:/var/lib/postgresql/data
    # Хелсчек для проверки готовности БД к работе
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U postgres"]
      interval: 5s
      timeout: 5s
      retries: 5

  volumes:
    pgdata:

Команды для работы с Docker Compose

# Собирает сервисы, описанные в конфигурационных файлах
docker compose build

# Запускает собранные сервисы
docker compose up

# Запуск контейнеров на фоне
docker compose up -d

# Если какой-то из сервисов завершит работу,
# то остальные будут остановлены автоматически
docker compose up --abort-on-container-exit

# Запустит сервис application и выполнит внутри команду make install
docker compose run application make install

# А так мы можем запустить сервис и подключиться к нему с помощью bash
docker compose run application bash

# С флагом --rm запускаемые контейнеры будут автоматически удаляться
docker compose run --rm application bash

# Останавливает и удаляет все сервисы,
# которые были запущены с помощью up
docker compose down

# Останавливает, но не удаляет сервисы, запущенные с помощью up
# Их можно запустить снова с помощью docker-compose start
docker compose stop

# Перезапускает все остановленные и запущенные сервисы
docker compose restart

Самостоятельная работа

В этой самостоятельной работе мы запустим готовое приложение Redmine с помощью Docker Compose:

  1. Опишите два сервиса, необходимых для работы приложения: базу данных и само приложение. Пример описания сервисов можно найти на страничке c официальным образом redmine на docker hub
  2. В качестве базы данных возьмите вариант с PostgreSQL
  3. Запустите контейнеры с помощью Docker Compose
  4. Если приложение успешно запустилось в контейнерах, то в консоли, в конце вывода логов запуска, вы увидите сообщение Listening on http://0.0.0.0:3000. Теперь вы можете открыть приложение локально в браузере по адресу http://localhost:<внешний_порт> и зайти в него под админом, либо создать нового пользователя для дальнейшей работы.

Дополнительные материалы

  1. Официальная документация
  2. Пример Makefile

Аватары экспертов Хекслета

Остались вопросы? Задайте их в разделе «Обсуждение»

Вам ответят команда поддержки Хекслета или другие студенты

Для полного доступа к курсу нужен базовый план

Базовый план откроет полный доступ ко всем курсам, упражнениям и урокам Хекслета, проектам и пожизненный доступ к теории пройденных уроков. Подписку можно отменить в любой момент.

Получить доступ
1000
упражнений
2000+
часов теории
3200
тестов

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff
Рекомендуемые программы
профессия
новый
Организовывайте процесс автоматизации тестирования на проекте, обучитесь языку программирования JavaScript, начните управлять процессом тестирования
8 месяцев
c опытом
Старт 21 ноября

Используйте Хекслет по-максимуму!

  • Задавайте вопросы по уроку
  • Проверяйте знания в квизах
  • Проходите практику прямо в браузере
  • Отслеживайте свой прогресс

Зарегистрируйтесь или войдите в свой аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»