
boxcutter/cinc该镜像打包Cinc Client二进制文件作为数据容器,可与kitchen-dokken配合使用。
数据容器是Docker支持命名卷之前更常用的模式,用于为其他容器预填充数据。Kitchen-dokken使用此数据容器避免在新的Test Kitchen实例中重复安装Chef Client及其他 cookbook 相关数据。运行Test Kitchen测试实例时,通过--volumes-from参数加载数据容器中挂载的卷。之所以使用数据容器而非命名卷,是因为Test Kitchen混合使用绑定挂载和卷挂载来共享数据,因此需要容器支持。
修改kitchen.yml如下,在Test Kitchen中使用cinc替代chef:
yaml--- driver: name: dokken privileged: true # 允许systemd服务启动 docker_registry: docker.io chef_image: boxcutter/cinc chef_version: 18.4.12 provisioner: name: dokken product_name: cinc chef_binary: /opt/cinc/bin/cinc-client chef_license: accept-no-persist
数据容器模式是一种巧妙的"边车安装"方式,将Chef Client作为伴随容器与主容器一起运行。这使得不同版本的Chef Client无需安装到每个Dokken OS镜像中,从而加速测试覆盖时间,是kitchen-dokken实现高效测试的关键技巧之一。
数据容器是存储数据卷但不运行长期进程的普通容器,仅包含Chef Client的二进制安装文件,其他容器可将其挂载到自身的覆盖文件系统中。kitchen-dokken插件通过Docker API创建(但不启动)数据容器,类似以下命令:
bashdocker create \ --mount type=volume,source=chef-18.6.2,destination=/opt/cinc \ --name chef-18.6.2 \ docker.io/boxcutter/cinc:18.6.2
其他容器可通过--volumes-from挂载数据容器的卷,从而在/opt/cinc目录中使用Chef Client二进制文件,如同已安装:
bashdocker run -it --rm \ --volumes-from chef-18.6.2 \ docker.io/ubuntu bash
该容器的Dockerfile仅安装RedHat版本的Chef Client,原因是kitchen-dokken会动态构建包含SSH等依赖的"数据镜像",确保Test Kitchen的Train传输正常工作。该动态构建的镜像基于RedHat系(如AlmaLinux),包含所有必要的动态库依赖。首次kitchen converge耗时较长主要源于此镜像的构建过程。以下是该动态构建Dockerfile的简化版本:
dockerfileFROM docker.io/almalinux:9 # 安装Test Kitchen Train传输所需依赖 RUN dnf -y install tar rsync openssh-server passwd git # 省略SSH密钥生成及注册相关配置 # 运行openssh服务,使主机上的Test Kitchen可通过SSH访问容器(作为容器主进程防止立即退出) CMD [ "/usr/sbin/sshd", "-D", "-p", "22", "-o", "UseDNS=no", "-o", "UsePrivilegeSeparation=no", "-o", "MaxAuthTries=60" ] # 定义持久卷存储Kitchen测试数据和InSpec测试结果,确保测试文件跨多次运行持久化并加速重复测试 VOLUME /opt/kitchen VOLUME /opt/verifier
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务