English | 简体中文
关于本工具的详细介绍见个人博客。
container-hooks-toolkit用于向容器的配置文件(config.json)中插入自定义的oci hooks,组件包括:
container-hooks-runtimecontainer-hooks-ctkcontainer-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路径
...
