从docker-compose.yml生成init配置文件(systemd/upstart)
ruamel.dc2service的Python项目详细描述
dc2service实用程序为 systemd/Upstart基于单个docker-composeyaml输入文件。
init类型是自动检测的,但可以从命令行中否决。
服务名由所有的container_name项确定 yaml文件中的服务。每个服务必须有acontainer_name 明确规定。
因为docker-composeyaml文件格式不允许 额外的元数据字段,在 分析yaml文件以获取描述和作者。
如果使用的是版本2 yaml文件格式,则应考虑使用 ruamel.dcw作为docker-compose的包装,如果您执行 不需要注释,您可以指定author和 description在顶层user-data键下。
如果指定了外部端口(即“IP:IP”格式),则 外部端口号扩展到说明。
文件生成是基于模板的,可以根据需要轻松调整。 通过执行dc2service templates
Mongo DB的示例版本2输入yaml文件
在版本1 docker-compose.yml中并使用ruamel.dcw 您可以像平常一样方便地设置author和description。 键值对,并为环境变量指定默认值:
version: "2" user-data: author: Anthon van der Neut <a.van.der.neut@ruamel.eu> description: mongo container env-variables: DOCKER_MONGO_PORT: 27017 DOCKER_MONGO_BASE_DIR: /data1/DB/mongo services: mongodb: container_name: mongo image: mongo:2.4 volumes: - ${DOCKER_MONGO_BASE_DIR}:/data/db ports: - ${DOCKER_MONGO_PORT}:27017
Mongo DB的示例版本1输入yaml文件
作为运行单个服务的版本1 docker-compose.yml文件 带有外部(即面向主机)端口的Mongo DB:
# author: Anthon van der Neut <a.van.der.neut@ruamel.eu> # description: mongo container mongodb: container_name: mongo image: mongo:2.4 volumes: - /data1/DB/mongo:/data/db ports: - 27017:27017
systemd
命令dc2service --systemd generate /opt/docker/mongo/docker-compose.yml将 生成文件/etc/systemd/system/mongo-docker.service:
[Unit] Description=mongo container on port 27017 # Author = Anthon van der Neut <a.van.der.neut@ruamel.eu> (dc2service 0.1.0.dev) Requires=docker.service After=docker.service [Service] Restart=always ExecStart=/opt/util/docker-compose/bin/docker-compose -f /opt/docker/mongo/docker-compose.yml up --no-recreate ExecStop=/opt/util/docker-compose/bin/docker-compose -f /opt/docker/mongo/docker-compose.yml stop [Install] WantedBy=multi-user.target
如果安装了ruamel.dcw,则.../bin/docker-compose将是.../bin/dcw
新贵
命令dc2service --upstart generate /opt/docker/mongo/docker-compose.yml将 生成文件/etc/init/mongo-docker.conf:
description "mongo container on port 27017" author "Anthon van der Neut <a.van.der.neut@ruamel.eu> (dc2service 0.1.0.dev)" start on filesystem and started docker stop on runlevel [!2345] respawn pre-start script /opt/util/docker-compose/bin/docker-compose -f /opt/docker/mongo/docker-compose.yml up -d --no-recreate end script script sleepWhileAppIsUp(){ while docker ps --filter=name=mongo | grep -qF mongo ; do sleep 2 done } sleepWhileAppIsUp end script post-stop script if docker ps --filter=name=mongo | grep -qF mongo; then /opt/util/docker-compose/bin/docker-compose -f /opt/docker/mongo/docker-compose.yml stop fi end script
如果安装了ruamel.dcw,则.../bin/docker-compose将是.../bin/dcw
展开环境变量
如果在版本1 docker-compose.yml中使用环境变量 在您的yaml文件中,如果 ${xyz}。另一个表单$xyz未展开。但是你应该 考虑安装ruamel.dcw,并使用版本2格式作为 它可以动态处理扩展并允许默认值为 在yaml文件中指定,并存储 要使用的Dockerfile。
扩展仅与复制的零件相关(外部 港口编号,集装箱名称)。
如果使用此功能,请确保在 conf文件。在systemd中使用:
[Service] Environment=DOCKERIMAPPORT=143
在新贵中:
env DOCKERIMAPPORT=143
dc2service将尝试为您插入正确的定义。
对于版本2文件,并且在使用“ruamel.dcw”时,这是不必要的,并且 因此未完成
正在查找docker-compose
因为到docker-compose或dcw的完整路径将插入 配置文件,此路径需要为 可用。dc2service将搜索 /opt/util/docker-compose/bin/和path环境变量 对于dcw和docker-compose的位置。如果你的 docker-compose不在您的路径中,您可以将完整路径交给 使用选项--docker-compose或在文件中指定 ~/.config/ruamel_dc2service/ruamel_dc2service.pon:
dict( glbl={'docker-compose': '/opt/util/docker-compose/bin/docker-compose'}, )