从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的包装,如果您执行 不需要注释,您可以指定authordescription在顶层user-data键下。

如果指定了外部端口(即“IP:IP”格式),则 外部端口号扩展到说明。

文件生成是基于模板的,可以根据需要轻松调整。 通过执行dc2service templates

Mongo DB的示例版本2输入yaml文件

在版本1 docker-compose.yml中并使用ruamel.dcw 您可以像平常一样方便地设置authordescription。 键值对,并为环境变量指定默认值:

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-composedcw的完整路径将插入 配置文件,此路径需要为 可用。dc2service将搜索 /opt/util/docker-compose/bin/和path环境变量 对于dcwdocker-compose的位置。如果你的 docker-compose不在您的路径中,您可以将完整路径交给 使用选项--docker-compose或在文件中指定 ~/.config/ruamel_dc2service/ruamel_dc2service.pon

dict(
    glbl={'docker-compose': '/opt/util/docker-compose/bin/docker-compose'},
)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java在依赖项上没有这样的方法异常   java如何将@Value注入setter?   验证输入java的最佳实践   java在使用kotlin的安卓项目中没有此类字段错误   我们可以强制java接口实现超时吗?   java将BasicAuth()与FormLogin()组合用于不同的路径   java无法在更新SDK后更新应用程序(未安装应用程序)   macos Java 8、Swing和OSX:对话框使UI对鼠标无响应   java自定义单元格格式以US格式显示,尽管使用了带UK语言环境的DataFormatter   java按升序排列列表字符串数据   java Hibernate OGM[PersistenceUnit:person]无法构建Hibernate SessionFactory   生命周期配置未涵盖java插件执行:com。乱穿马路。专家插件。安卓generation2:安卓mavenplugin:3.5.0:generatesources   java RecyclerView显示为空   当服务器不返回任何输入时,java InputStream read()会阻塞