类似于Android,CAPP分发是基于一个相对独立的安装包文件,该文件会包括直接本地存储的容器镜像和应用的各类元数据信息。通常来说,一个安装文件只包括一个CAPP,一个CAPP的一个版本也可以被一个安装包文件充分表述。我们采用.cpk作为这种安装包文件的后缀。

CPK格式本质上是一个.tar.gz压缩包。以HeloWorlduniversal安装包为例,将其解压后,你可能可以看到如下内容:

其中image_*.tar是镜像文件,arm64/amd64表示对应的硬件架构。icon.jpg属于元数据附件。config.yaml是安装包的核心,它包含如下内容:

# CapOS 应用配置文件
version: "1.0" # 配置文件版本

# 应用基础信息(必填/核心元数据)
app:
name: helloworld # 应用唯一名称(必填)
version: v0.1.0 # 应用版本
nickname: Hello World! # 应用显示名称
description: A sample CapOS APP # 应用简要介绍
source: https://github.com/fwerkor/capp-helloworld # 应用源码地址
author: Castronaut <caoyuhang@fwerkor.com> # 应用作者
vendor: FWERKOR # 应用运营者
license: MIT License # 应用许可证
docs: https://github.com/fwerkor/capp-helloworld # 应用文档

# 应用依赖配置(支持多值,用列表格式)
dependencies:
opkg: # 对 opkg 软件包的依赖(多值示例:["capbox", "curl"])
- capbox
capp: [] # 对其它 APP 的依赖(空列表表示无依赖,可添加如 ["app1", "app2"])

# 网络配置
network:
host: false # 是否接入 host 网络
publish: [] # 额外端口映射需求(多值格式:["8080:80", "9443:443"])
service:
http: 80 # web 服务 HTTP 端口(详见:https://blog.fwerkor.com/archives/1116)
https: null # web 服务 HTTPS 端口(填写后优先于 HTTP 端口)
https_skip_check: false # 是否跳过 HTTPS 服务的证书检查(true/false)
management:
http: null # web 管理 HTTP 端口
https: null # web 管理 HTTPS 端口(填写后优先于管理 HTTP 端口)
https_skip_check: false # 是否跳过 HTTPS 管理的证书检查(true/false)

# 容器运行配置
container:
cmd:
exe: null # 容器启动 CMD(留空使用镜像默认)
terminal: null # 用户访问终端时调用的程序(如 /bin/bash)
volumes:
data: null # 容器内持久化数据存储路径(如 /app/data)
from: [] # 从其它容器挂载卷(多值格式:["container-name:/path"])
extra: [] # 额外挂载需求(多值格式:["/etc/config:/app/sysconf:rw", "/host/log:/app/log:ro"])
tmpfs: null # 容器挂载临时文件系统(如 /tmp:size=100m)
privileges:
enabled: false # 是否启用特权模式(true/false,启用后覆盖其他权限配置)
capabilities: # 容器 capabilities(默认无任何权限)
- NET_BIND_SERVICE
allow_new_privs: false # 是否允许容器进程提权(true/false)
systemd: false # 是否为容器启用 systemd(true/false)
resources:
memory_reserved: null # 预留内存容量(如 1G)
shm_size: null # /dev/shm 大小(如 256m)
environment: [] # 附加环境变量配置(多值格式:["KEY1=VALUE1", "KEY2=VALUE2"])
devices: [] # 附加设备挂载(多值格式:["/dev/ttyUSB0:/dev/ttyUSB0", "/dev/sda1:/dev/sda1"])

# 健康检查配置
healthcheck:
enabled: true # 是否启用健康检查
cmd: curl -f "http://localhost/" # 健康检查命令
interval: 30s # 健康检查间隔
retries: 3 # 健康检查重试次数
start_period: 5s # 健康检查启动等待时间
timeout: 10s # 健康检查超时时间

# 构建配置
build:
architectures: # 应用支持的硬件架构(多值列表)
- amd64
- arm64
extra_files: # 额外打包加入安装包的文件(多值列表)
- icon.jpg

其中version表示配置文件格式的版本。当前最新为1.0,无需更改。

应用名称为最重要的一项,充当唯一表示作用。它的值不能包含特殊字符。应用名称将作为容器的主机名,因此如果同一个用户运行多个应用,这些应用之间可以直接通过应用名称指定通信。

Castronaut的头像

作者 Castronaut

行走在地狱边缘,狂舞于悬崖之巅。

发表回复