小知识:常用容器镜像构建工具和方案介绍

%小知识:常用容器镜像构建工具和方案介绍-猿站网-插图

在使用 Docker 的时候一般情况下我们都会直接使用 docker build 来构建镜像,切换到 Containerd 的时候,上节我们也介绍了可以使用 nerdctl buildkit 来构建容器镜像,除了这些方式之外,还有其他常见的镜像构建工具吗?

接下来我们就来介绍下在 Containerd 容器运行时下面镜像构建的主要工具和方案。

使用 Docker 做镜像构建服务

在 Kubernetes 集群中,部分 CI/CD 流水线业务可能需要使用 Docker 来提供镜像打包服务。可通过宿主机的 Docker 实现,将 Docker 的 UNIX Socket(/var/run/docker.sock) 通过 hostPath 挂载到 CI/CD 的业务 Pod 中,之后在容器里通过 UNIX Socket 来调用宿主机上的 Docker 进行构建,这个就是之前我们使用较多的 Docker outside of Docker 方案。该方式操作简单,比真正意义上的 Docker in Docker 更节省资源,但该方式可能会遇到以下问题:

无法运行在 Runtime 是 containerd 的集群中。

如果不加以控制,可能会覆盖掉节点上已有的镜像。

在需要修改 Docker Daemon 配置文件的情况下,可能会影响到其他业务。

在多租户的场景下并不安全,当拥有特权的 Pod 获取到 Docker 的 UNIX Socket 之后,Pod 中的容器不仅可以调用宿主机的 Docker 构建镜像、删除已有镜像或容器,甚至可以通过 docker exec 接口操作其他容器。

对于部分需要 containerd 集群,而不改变 CI/CD 业务流程仍使用 Docker 构建镜像一部分的场景,我们可以通过在原有 Pod 上添加 DinD 容器作为 Sidecar 或者使用 DaemonSet 在节点上部署专门用于构建镜像的 Docker 服务。

使用 DinD 作为 Pod 的 Sidecar

如下所示,我们有一个名为 clean-ci 的容器,会该容器添加一个 Sidecar 容器,配合 emptyDir,让 clean-ci 容器可以通过 UNIX Socket 访问 DinD 容器:

apiVersion:

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:OAuth2 服务器Keycloak中的Realm

2023-3-19 17:05:36

建站知识

小知识:可以像 Docker 一样方便的使用 Containerd 吗?

2023-3-19 17:20:40

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索