Skip to content

container-hooks-toolkit:add your specific hooks to containers.

License

Notifications You must be signed in to change notification settings

peng-yq/container-hooks-toolkit

Repository files navigation

container-hooks-toolkit

English | 简体中文

关于本工具的详细介绍见个人博客

container-hooks-toolkit用于向容器的配置文件(config.json)中插入自定义的oci hooks,组件包括:

  • container-hooks-runtime
  • container-hooks-ctk
  • container-hooks

container lifecycle and oci hooks

container lifecycle and oci hooks

container-hooks-runtime

container-hooks-runtime是对主机上安装的runc的轻量级包装器,通过将指定的oci hooks注入容器的运行时规范,然后调用主机本地的runc,并传递修改后的带有钩子设置的容器运行时规范。runc在启动容器时,会自动运行注入的oci hooks

container-hooks-runtime的详细介绍和用法见README of container hooks runtime

container-hooks-ctk

container-hooks-ctk 是一个命令行工具,主要用于配置各容器运行时支持container hooks runtime,以向符合OCI规范的容器中插入OCI Hooks

container-hooks-ctk的详细介绍和用法见README of container-hooks-ctk

container-hooks

container-hooks是一个空程序,仅用于判断当前容器是否已经添加自定义hooks,避免重复添加。

how to use

container-toolkit支持dockercontainerdcri-o,简单用例介绍如下。

  1. 下载
git clone https://github.com/peng-yq/container-hooks-toolkit.git
  1. 编译
make all

下面的所有操作均需要root权限

  1. 复制到/usr/bin
cd bin
./container-hooks-ctk install --toolkit-root=$(pwd)
  1. 生成配置文件
container-hooks-ctk config
  1. docker为例,进行配置
container-hooks-ctk runtime configure --runtime=docker --default
systemctl restart docker
  1. 编写自定义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"]
        }
    ]
}
  1. 运行容器,执行自定义hook
docker run image:tag

customized usage

提供一些更加定制化的思路:

案例1:在容器启动前自动对容器进行签名验证和完整性校验

此时直接编写hooks/etc/container-hooks/hooks.json就行不通了,因为我们无法提前预知每个容器的启动镜像信息。可以对项目进行二次开发,不采用读取文件中的钩子的形式,而是直接在代码中进行插入并根据容器的配置进行调整参数。

需要修改的代码部分:

  1. /internel/runtime
  2. /internel/modifier

可参考的资料

案例2:输出每个容器的bundle路径

...

参考/致谢

  1. nvidia-container-toolkit
  2. oci-add-hooks

About

container-hooks-toolkit:add your specific hooks to containers.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published