#部署 #容器镜像 #守护进程 #远程 #运行时 #mtls #配置文件

app ed-daemon

简单的基于 Docker 的容器部署

4 个版本

1.0.0-rc.42023 年 8 月 20 日
1.0.0-rc.32023 年 8 月 18 日
1.0.0-rc.22023 年 8 月 17 日

#278 in Unix API

MIT 许可证

42KB
931

ED 守护进程

WIP - 已实现基本加载/停止/信息功能,更多功能即将推出!

Ed 是一个简单的 Docker 运行时管理器,用于将容器镜像推送到远程系统 - 目的是提供一个简单的机制来部署容器,该机制不依赖于维护集中式仓库。

这是在远程系统上运行的守护进程。

守护进程使用 Docker API 和 Docker 命令行管理已部署容器的生命周期。通过使用 mTLS 加密的 REST 接口访问守护进程。

用法

守护进程将执行类似于以下 docker 命令行 run 命令:

docker run -d -it -p 80:8000 -v /var/data/app:/usr/share/nginx/html --name website nginx

---t 标志是必需的,而 --name 参数由 ed 设置,其余参数在 ed-daemon 配置文件 /etc/edd/config.json 中设置。

{
    "deployments": [
        {
            "name": "website",
            "args": ["-p", "80:8000", "-v", "/var/data/app:/usr/share/nginx/html"]
        }
    ]
}

然后可以使用以下命令控制容器:

  • /v1/deployments/website/load
  • /v1/deployments/website/stop
  • /v1/deployments/website/start
  • /v1/deployments/website/restart

load 操作接受 .tar.tar.gz 上传,并将加载新镜像,停止任何现有网站容器,然后重新标记并启动新容器。

stopstart 操作允许控制正在运行或已停止的容器。 restart 操作将停止并重新启动容器 - 注意,配置更改不会重新加载,需要重新启动守护进程。

mTLS 安全性需要服务器证书和密钥,以及用于签署客户端证书的 CA 证书,默认位置如下:

  • /etc/edd/server.crt
  • /etc/edd/server.key
  • /etc/edd/ca.crt

示例

在这个示例中,生成了一个包含静态网站文件的alpine/lighttpd容器镜像,并将创建的镜像推送到远程端点。

Dockerfile:

FROM alpine:latest

RUN apk add lighttpd curl && rm -rf /var/cache/apk/*

COPY ./website /var/www/localhost/htdocs

HEALTHCHECK --interval=1m --timeout=1s \
  CMD curl -f https://127.0.0.1/ || exit 1

EXPOSE 80

ENTRYPOINT ["/usr/sbin/lighttpd", "-D", "-f", "/etc/lighttpd/lighttpd.conf"]
docker build . -t website:latest
docker save website:latest | gzip | curl --cacert ca.crt \
     --key client.key \
     --cert client.crt \
     -X POST -H "Content-Type:application/x-tar" -T - 'https://192.168.0.100:8866/v1/website/load'

ca.crt 是服务器证书颁发机构 - 这可能与客户端签名证书颁发机构不同。

安装(待定)

使用rust cargo管理器安装最简单,必须将rust安装在具有使用docker权限的用户中 - 这可以通过以下说明完成:https://rust-lang.net.cn/tools/install

然后使用以下命令安装ed-daemon

cargo install ed-daemon --root /usr/bin

这将把可执行文件安装到 /usr/bin/ed-daemon,以下文件夹/文件也将被创建

  • /etc/edd/config.toml
  • /etc/edd/config.defaults.toml
  • /etc/systemd/system/edd.servie

服务尚未启用或启动,一旦添加了所需的密钥和证书(/etc/edd/server.crt/etc/edd/server.key/etc/edd/ca.crt)并设置了配置,则可以使用以下命令启用服务

systemctl enable ed-daemon
systemctl start ed-daemon

配置文件

完整的配置文件(/etc/edd/config.toml,或使用--config参数为ed-daemon可执行文件设置)有以下默认值

{
    "docker_socket": "/var/run/docker.sock",
    "container_prefix": "ed_",
    "tls_key": "/etc/edd/server.key",
    "tls_certs": "/etc/edd/server.crt",
    "mututal_tls_ca_certs": "/etc/edd/ca.crt",
    "deployments": [ ... ]
}

只需要 deployments 部分。

依赖关系

~26–57MB
~1M SLoC