Работая с 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

Успехов в обучении.