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