Файл проекта предназначен для описания свойств конкретного проекта. Но основе этого файла происходит разворачивание и настройка системы под проект. В частности, на основе этого файла генерируются Dockerfile-ы для всех указанных узлов, а так же общий docker-compose.yml для запуска всего проекта.
Файл проекта представляет из себя файл в формате yaml и имеет следующую структуру:
version: 0.3
project:
..глобальные настройки..
groups:
group1:
nodes:
builder:
..параметры для узла сборки проекта..
tester:
..параметры для узла тестирования..
group2:
..общие параметры для узлов типа "group2"..
nodes:
node1:
..параметры для узла node1
node2:
..параметры для узла node2
nodeX:
..
В начале должна быть указана версия (текущая поддерживаемая "0.3"), а сам проект описывается в разделе project: Проект разбивается на логические группы groups обладающие какими-то общими параметрами (например основанными на одном образе). В каждую группу входит множество узлов nodes. Каждый узел в итоге является самостоятельным контейнером.
Полный пример файла проекта можно посмотреть здесь: example-project.yml
Структура имеет следующий вид
project:
name: "myproject"
networks:
net1: { subnet: "192.168.81", gateway: "100" }
net2: { subnet: "192.168.82", gateway: "100" }
...
netX: { subnet: "192.168.83", gateway: "100" }
logdb:
... logdb parameters..(необязательные настройки)
nginx:
... nginx parameters..(необязательные настройки)
vstand:
...необязательные настройки для работы с виртуальным стендом
.. переопределяют стендовые настройки
- name - название проекта
- networks - список подсетей которые будут доступны на узле. Обратите внимание, что задаются не ip адреса, а именно подсети.
- gateway - задаёт ip шлюза.
см. так же networks
Существует три области для описания параметров.
- Глобальная (задействуется для всех узлов в проекте)
project:
name: projectname
...global parameters..
- Параметры для группы
group1:
..parameters for all nodes in group1..
group2:
..parameters for all nodes in group2..
- Уровень конкретного узла
group1:
..
nodes:
node1:
..параметры конкретного узла..
node2:
..параметры конкретного узла..
Итоговые параметры попадающие в Dockerfile и docker-compose.yml складываются из этих трёх областей.
...
project_compose_template: 'my-compose-template.yml.tpl'
node_compose_template: 'my-node-compose-template.yml.tpl'
labels:
- {key1: "val1"}
- {key2: "val2"}
volumes:
- /var/run/docker.sock:/var/run/docker.sock
devices:
- /rmp/dev1:/tmp/dev1
apt:
packages:
- mc
- libuniset2
sources:
- "rpm http://ftp.etersoft.ru/pub ALTLinux/p8/branch/x86_64 classic"
- "rpm http://ftp.etersoft.ru/pub ALTLinux/p8/branch/noarch classic"
start_command: "start-project.sh"
copy:
- '[a+r]testfile.copy:/tmp/testfile'
- '[a+rw]testfile2.copy:/tmp/'
before_command:
- rpm -Uhv myproejct.rpm
- myproject-config config
- ...
env_file:
- file1.env
- file2.env
environment:
- VAR1=VAL1
- VAR2=VAL2
ports:
- port1:port2
- port3:port3
- port4:port5
-
labels - Задаёт список меток, которые будут добавлены в Dockerfile (LABEL key1=val1 key2=val2 ...)
-
volumes - Задаёт список подключаемых каталогов, который попадает в генерируемый docker-compose.yml (см. также volumes)
-
devices - Задаёт список подключаемых устройств, который попадает в генерируемый docker-compose.yml
-
ports - список пробрасываемых портов, который попадает в генерируемый docker-compose.yml
-
apt - секция задающая параметры для apt
- packages - список пакетов, которые необходимо установить. В итоговый Dockerfile попадает команда
apt-get install ..packages..
- sources - задаёт список репозиториев. В итоге в контейнере будет создан файл /etc/apt/sources.list.d/sources.list с указанным списком.
- packages - список пакетов, которые необходимо установить. В итоговый Dockerfile попадает команда
-
start_command - CMD попадающая в итоговый Dockerfile.
-
copy - задаёт список файлов или каталогов которые будут скопированы в контейнер на этапе сборки образа. Позволяет указать права на получающийся файл "[mode]src:dest". В итоге каждый элемент преобразуется в команды:
COPY src dest
RUN chmod mode dest
- before_command - команды преобразуемые в RUN в Dockerfile.
- env_file - Файлы с переменными окружения для контейнера. Итоговые настройки напрямую попадают в docker-compose.yml
- environment - переменные окружения для контейнера. Итоговые настройки напрямую попадают в docker-compose.yml
Дополнительно для конкретного узла или группы узлов можно указать параметр
node1:
skip_compose: yes
или
group1:
skip_compose: yes
nodes:
...
Такой узел или группа узлов не будут включены в итоговый docker-compose.yml
- project_compose_template - позволяет задать свой шаблон для docker-compose.yml файла. Не является обязательным параметром.
- node_compose_template - позволяет задать свой шаблон для docker-compose.yml файла генерируемого, для конкретного узла. Этот параметр может быть задан 'глобально', 'для группы', 'для конкретного узла'. Этот параметр не является обязательным.
В случае если используется "статическая сеть" (см. network) для каждого узла обязательно должен быть указан 'ip'. При этом задаётся только "последняя" цифра адреса. Итоговый адрес формируется на основе секции 'networks' как subnet.ip Пример:
groupX:
nodes:
mynode1:
ip: 1
ssh_port: 10001
ssh_internal_port: 32
.. другие параметры переопределяющие или дополняющие глобальные для проекта и групповые..
apt:
packages:
- openssh-server
logservers:
- { name: "logserver1", port: 3333, cmd: "-s level1", description: 'Процесс управления N1' }
- { name: "logserver2", port: 4444, cmd: "-s level2", description: 'Процесс управления N2' }
mynode2: { ip: 2 }
mynode3: { ip: 3, vnc_port: 5900, novnc_port: 6900, ssh_port: 10003 }
Свойства vnc_port и novnc_port не являются обязательными. Если задан vnc_port то в итоговый docker-compose.yml этот порт добавляется в секцию ports:. Если помимо vnc_port задаётся и novnc_port, то при настройке тестового стенда, этот порт будет использован как порт подключения к стенду "снаружи". См. так же раздел novnc
ssh_port - Задаёт внешний порт (на машине стенда) который будет проброшен для доступа к контейнеру по ssh. Не обязательный параметр 'ssh_internal_port' задаёт куда пробрасывать. По умолчанию: ssh_internal_port=22 См. так же раздел ssh
logservers - не обязательный параметр задающий список логсерверов для данного узла, которые будут опрашиваться logdb и логи будут доступны через web-интерфейс http://stand-node/logdb/ws