English | 简体中文
关于本工具的详细介绍见个人博客。
container-hooks-toolkit
用于向容器的配置文件(config.json
)中插入自定义的oci hooks
,组件包括:
container-hooks-runtime
container-hooks-ctk
container-hooks
container lifecycle and oci hooks
container-hooks-runtime
是对主机上安装的runc
的轻量级包装器,通过将指定的oci hooks
注入容器的运行时规范,然后调用主机本地的runc
,并传递修改后的带有钩子设置的容器运行时规范。runc
在启动容器时,会自动运行注入的oci hooks
。
container-hooks-runtime
的详细介绍和用法见README of container hooks runtime。
container-hooks-ctk
是一个命令行工具,主要用于配置各容器运行时支持container hooks runtime
,以向符合OCI
规范的容器中插入OCI Hooks
。
container-hooks-ctk
的详细介绍和用法见README of container-hooks-ctk。
container-hooks
是一个空程序,仅用于判断当前容器是否已经添加自定义hooks
,避免重复添加。
container-toolkit
支持docker
,containerd
和cri-o
,简单用例介绍如下。
- 下载
git clone https://github.com/peng-yq/container-hooks-toolkit.git
- 编译
make all
下面的所有操作均需要
root
权限
- 复制到
/usr/bin
cd bin
./container-hooks-ctk install --toolkit-root=$(pwd)
- 生成配置文件
container-hooks-ctk config
- 以
docker
为例,进行配置
container-hooks-ctk runtime configure --runtime=docker --default
systemctl restart docker
- 编写自定义
oci hooks
,格式如下,必须添加第一个prestart hook
中的container-hooks
用于避免重复添加定义hooks
,需要写入至/etc/container-hooks/hooks.json
文件中(此路径可在配置文件中修改,请注意json格式问题)
{
"prestart": [
{
"path": "/usr/bin/container-hooks"
}
],
"createRuntime": [
{
"path": "/usr/bin/fix-mounts",
"args": ["fix-mounts", "arg1", "arg2"],
"env": [ "key1=value1"]
}
],
"createContainer": [
{
"path": "/usr/bin/mount-hook",
"args": ["-mount", "arg1", "arg2"],
"env": [ "key1=value1"]
}
],
"startContainer": [
{
"path": "/usr/bin/refresh-ldcache"
}
],
"poststart": [
{
"path": "/usr/bin/notify-start",
"timeout": 5
}
],
"poststop": [
{
"path": "/usr/sbin/cleanup.sh",
"args": ["cleanup.sh", "-f"]
}
]
}
- 运行容器,执行自定义
hook
docker run image:tag
提供一些更加定制化的思路:
案例1:在容器启动前自动对容器进行签名验证和完整性校验
此时直接编写hooks
至/etc/container-hooks/hooks.json
就行不通了,因为我们无法提前预知每个容器的启动镜像信息。可以对项目进行二次开发,不采用读取文件中的钩子的形式,而是直接在代码中进行插入并根据容器的配置进行调整参数。
需要修改的代码部分:
/internel/runtime
/internel/modifier
案例2:输出每个容器的bundle
路径
...