Работая с docker мы можем создавать контейнеры на основе образов. По умолчанию, в docker одному образу у нас будет соответствовать один контейнер.
Но, иногда возникают ситуации, что нам нужно связать (скомбинировать, compose) работу различных образов и контейнеров в единую структуру.
Например, такой ситуацией может быть если нам нужно развернуть проект, в котором будет использоваться какой-то язык программирования (например, php), какой-то веб-сервер (например, apache или nginx) и база данных (например, mysql).
Язык программирования, веб-сервер, база данных, все это можно запустить из отдельных образов в отдельных контейнерах. Но, иногда существуют готовые сборки образов, в которых уже настроено взаимодействие всего этого в одном образе.
Но, как быть если нам нужно скомбинировать работу разных образов, разных языков программирования, разных их версий в едином контейнере. Готовых образов, которые содержат такие комбинации может и не быть.
Для решения этой задачи нам может помочь специальный инструмент, который называется "docker compose". Как правило, этот инструмент устанавливается в операционную систему вместе с основной программой Docker, но бывают ситуации, что его нужно установить отдельно.
Исходя из названия, compose - это комбинация работы различных docker образов между собой в едином контейнере. Именно этим и занимается этот инструмент.
Работа с docker compose выполняется с помощью специального текстового файла формата yaml. Название этого файла должно быть docker-compose.yaml.
Подробнее о формате yaml можно посмотреть здесь:
https://webkyrs.info/page/format-yaml
В этом файле с помощью специальных синтаксических конструкций описывается какие образы должны использоваться в итоговом контейнере и как они должны взаимодействовать между собой.
Файл должен находиться в корне вашего проекта.
Подробнее о работе с файлом docker compose можно посмотреть в этом курсе:
https://webkyrs.info/category/osnovy-docker-dlia-veb-programmistov
Идея в следующем: мы пишем в этом файле какие образы у нас будут использоваться в итоговом контейнере, настраиваем их и в итоге выполняем команду:
docker-compose up --build
Это команда скачает все необходимые образы и соберет итоговый контейнер, в котором будут работать "подконтейнеры" для каждого отдельного образа и обеспечена связь между этим.
Конечно, в пределах одной статьи описать все тонкости работы файла docker-composer.yaml. Предлагаю вам продолжить изучение в этом курсе:
https://webkyrs.info/category/osnovy-docker-dlia-veb-programmistov
Успехов в обучении.