Объединение и вывод конфигурации из нескольких файлов Compose
На этом шаге вы узнаете, как объединять конфигурации из нескольких файлов Docker Compose и выводить итоговую объединенную конфигурацию. Это мощная функция, которая позволяет определить базовую конфигурацию, а затем переопределить или расширить ее с помощью дополнительных файлов. Это полезно для управления разными окружениями (например, разработки, тестирования и производства).
Мы продолжим работу в директории ~/project
. На предыдущем шаге мы создали файл docker-compose.yaml
. Теперь создадим еще один файл Compose для расширения базовой конфигурации. Назовем его docker-compose.override.yaml
.
nano ~/project/docker-compose.override.yaml
Вставьте следующее содержимое в файл docker-compose.override.yaml
:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
Этот файл переопределения модифицирует сервис web
, определенный в docker-compose.yaml
. Он изменяет отображение порта хоста с 80 на 8080 и добавляет монтирование тома для обслуживания статического HTML - контента из локальной директории с именем html
.
Сохраните файл, нажав Ctrl + X
, затем Y
и Enter
.
Теперь создадим директорию html
и простой файл index.html
в ней.
mkdir ~/project/html
nano ~/project/html/index.html
Вставьте следующее содержимое в файл ~/project/html/index.html
:
<h1>Hello from Nginx!</h1>
Сохраните файл, нажав Ctrl + X
, затем Y
и Enter
.
По умолчанию Docker Compose автоматически ищет файлы docker-compose.yaml
и docker-compose.override.yaml
в текущей директории и объединяет их. Конфигурации в файле переопределения имеют приоритет.
Чтобы увидеть объединенную конфигурацию, убедитесь, что вы находитесь в директории ~/project
и снова запустите команду docker-compose config
.
cd ~/project
docker-compose config
Теперь вы должны увидеть объединенную конфигурацию, где сервис web
имеет отображение порта 8080:80
и монтирование тома ./html:/usr/share/nginx/html
.
Вы также можете явно указать, какие файлы Compose использовать с помощью флага -f
. Порядок, в котором вы указываете файлы, имеет значение, так как более поздние файлы переопределяют более ранние.
Например, чтобы явно объединить docker-compose.yaml
и docker-compose.override.yaml
, вы можете запустить:
docker-compose -f docker-compose.yaml -f docker-compose.override.yaml config
В этом случае это даст тот же объединенный вывод, что и запуск docker-compose config
без флага -f
, так как docker-compose.override.yaml
автоматически обнаруживается и объединяется после docker-compose.yaml
.