跳转到主要内容

从docker-compose.yml生成初始化配置文件(systemd/Upstart)

项目描述

dc2service 工具根据单个 docker-compose YAML 输入文件生成 systemd/Upstart 的配置文件。

初始化类型会自动检测,但可以从命令行覆盖。

服务名称由 YAML 文件中所有服务的 container_name 条目确定。每个服务 必须 指定一个 container_name

由于 docker-compose YAML 文件格式不允许额外的元数据字段,因此在 YAML 文件开头的两个注释条目被解析为描述和作者。

如果使用版本 2 YAML 文件格式,建议使用 ruamel.dcw 作为 docker-compose 的包装器,如果这样做,则不需要注释,并且可以在顶层 user-data 键下指定 authordescription

如果指定了外部端口(即形式为“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 文件,用于运行带有外部(即面向主机)端口的单个服务 MongoDB

# 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

Upstart

命令 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

环境变量扩展

如果您在 YAML 文件中的版本 1 docker-compose.yml 文件中使用环境变量,如果它们的形式为 ${XYZ},它们将被展开。另一种形式 $XYZ 不会被展开。但是,您应该考虑安装 ruamel.dcw 并使用版本 2 格式,因为它可以动态处理展开,并允许在 YAML 文件中指定默认值,以及为 Dockerfile 存储环境变量。

展开仅适用于复制部分(外部端口号、容器名称)。

如果您使用此功能,请确保在 conf 文件中设置了环境变量。在 systemd

[Service]
Environment=DOCKERIMAPPORT=143

和 Upstart

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'},
)

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关 安装软件包 的更多信息。

源代码分发

ruamel.dc2service-0.3.1.tar.gz (18.1 kB 查看哈希值)

上传时间 源码

构建版本

ruamel.dc2service-0.3.1-py2.py3-none-any.whl (14.8 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面