compose-file
compose файл является описанием различных объектов и сервисов, которые будут создаваться и подниматься при выполнении это сценария. Следует также отметить, что yaml формат требует придержиться жёсткого форматирования - нельзя ставить где попало табуляцию и произвольное количество пробелов! Начнём с некоторого шаблона, вот пример подобного:
services:
<srv_name>:
image: <image_name>
container_name: <container_name>
hostname: <hostname>
restart: unless-stopped
environment:
TZ: "Europe/Moscow"
networks:
- default
networks:
default:
ipam:
driver: default
config:
- subnet: 172.28.0.0/16
где:
- services — основной раздел, где мы будем создавать и описывать наши сервисы (контейнеры docker). В данном примере сервис один. Для добавления еще одного добавляем еще строчки <srv_name>.
- <srv_name> — название для нашего сервиса, на основе которого будет создан контейнер.
- image — имя образа, который будет использоваться для создания контейнера.
- container_name — имя, которое получен созданный контейнер.
- hostname — имя хоста внутри контейнера.
- restart — поведения контейнера при падении. В нашем примере мы указываем на необходимость автоматической перезагрузки, за исключением случаев, когда мы его сами остановили командой stop.
- environment — задаем переменные окружения. В нашем примере только одна, которая указывает на часовой пояс (московское время).
- networks — привязываем наш контейнер к сети. Опционально, но лучше определять самому подсеть. Это упрощает настройку некоторых сервисов, например, мы можем ограничить доступ для определенных подсетей и не желательно, чтобы подсети задавалась случайным образом.
- networks — описание для сети. В нашем примере используются стандартные настройки, но указывается конкретная подсеть 172.28.0.0/16.
Теперь посмотрим другие опции, не описанные в примере шаблона выше:
Проброс портов:
volumes:
- /data/mysql:/var/lib/mysql
Данный пример смонтирует каталог /data/mysql из хостовой машины в каталог /var/lib/data в контейнере
Работа с портами:
ports:
- 8080:80
В данном случае контейнер будет слушать порт 8080 и передавать все полученые с него данные на порт 80 внутри контейнера
Описание зависимости для контентейнеров - если нам необходимо запустить ккой-то контейнер раньше, а какой-то позже, то указываем зависимости:
depends_on:
- db