Process Compose 是一个简单而灵活的调度程序和编排器,用于管理非容器化应用程序。
它深受docker-compose的启发,但不需要容器。不必处理 docker 文件、卷定义、网络和 docker 注册表
配置语法尝试遵循 docker-compose 规范,进行了一些小的添加和大量的删减。
特征:
进程执行(并行或/和串行)
处理依赖关系和启动顺序
进程恢复策略
手动进程[重新]启动
处理参数bash或zsh样式(或定义您自己的 shell)
每个进程和全局环境变量
每个进程或全局(单个文件)日志
健康检查(活性和准备情况)
终端用户界面 (TUI) 或 CLI 模式
分叉(服务或守护进程)进程
REST API(OpenAPI 又名 Swagger)
日志缓存
既可以作为服务器又可以作为客户端
可配置的快捷键
合并配置文件
命名空间
运行一个进程的多个副本
并行启动:
processes: process1: description: This process will sleep for 2 seconds command: "sleep 3" process2: description: This process will sleep for 3 seconds command: "sleep 3"'
|
串行启动
processes: process1: command: "sleep 3" depends_on: process2: condition: process_completed_successfully # or "process_completed" if you don't care about errors process2: command: "sleep 3" depends_on: process3: condition: process_completed_successfully # or "process_completed" if you don't care about errors
|
进程的多个副本
您可以通过添加参数来运行进程的多个副本processes.process_name.replicas(默认值:1)
processes: process_name: command: "sleep 2" log_location: ./log_file.{PC_REPLICA_NUM}.log # <- {PC_REPLICA_NUM} will be replaced with replica number. If more than one replica and PC_REPLICA_NUM is not specified, the replica number will be concatenated to the file end. replicas: 2
|
指定工作目录
processes: process1: command: "ls -laF --color=always" working_dir: "/path/to/your/working/directory"
|
定义流程依赖关系
processes: process2: depends_on: process3: condition: process_completed_successfully process4: condition: process_completed_successfully
|
有 4 种条件类型可用于流程依赖关系:
process_completed- 是等待进程完成的类型(任何退出代码)
process_completed_successfully- 是等待进程成功完成的类型(退出代码 0)
process_healthy- 是等待进程健康的类型
process_started- 是等待进程启动的类型(默认)
后台(独立)进程
processes: nginx: command: "docker run -d --rm --name nginx_test nginx" # note the '-d' for detached mode is_daemon: true # this flag is required for background processes (default false) shutdown: command: "docker stop nginx_test" timeout_seconds: 10 # default 10 signal: 15 # default 15, but only if command is not defined or empty
|
对于在后台启动服务/守护进程的进程,请使用is_daemon设置为 的标志true。
如果进程是守护进程,它将被视为正在运行,直到停止。
守护进程只能使用$PROCESSNAME.shutdown.command上面示例中的方法停止。
退出时自动重新启动
processes: process2: availability: restart: on_failure # other options: "exit_on_failure", "always", "no" (default) backoff_seconds: 2 # default: 1 max_restarts: 5 # default: 0 (unlimited)
|
活性探针
processes: nginx: command: "docker run -d --rm -p80:80 --name nginx_test nginx" is_daemon: true shutdown: command: "docker stop nginx_test" signal: 15 timeout_seconds: 5 liveness_probe: exec: command: "[ $(docker inspect -f '{{.State.Running}}' nginx_test) = 'true' ]" working_dir: /tmp # if not specified the process working dir will be used initial_delay_seconds: 5 period_seconds: 2 timeout_seconds: 5 success_threshold: 1 failure_threshold: 3
|
就绪探针
processes: nginx: command: "docker run -d --rm -p80:80 --name nginx_test nginx" is_daemon: true shutdown: command: "docker stop nginx_test" readiness_probe: http_get: host: 127.0.0.1 scheme: http path: "/" port: 80 initial_delay_seconds: 5 period_seconds: 10 timeout_seconds: 5 success_threshold: 1 failure_threshold: 3
|
每个探测类型(liveness_probe或readiness_probe)都可以配置为使用 2 种互斥模式之一:
exec:将运行已配置的command并根据exit code进程是否处于正确状态来决定。0 表示成功。任何其他值都表示失败。
http_get:对于 HTTP 探测,Process Compose 会向指定路径和端口发送 HTTP 请求来执行检查。响应码200表示成功。任何其他值都表示失败。
host:要连接的主机名。
scheme:用于连接到主机的方案(HTTP 或 HTTPS)。默认为 HTTP。
path:HTTP服务器上的访问路径。默认为/。
port:访问进程的端口号。该数字必须在 1 到 65535 范围内。