想问问大家目前公司都用什么来 build 镜像?因为目前走的 docker ,感觉各种难用,还得 dind ,而且还有 rootless 的问题
![]() | 1 zengxs 2023-05-29 18:56:16 +08:00 前面两个选 docker, 兼容性比 podman 好,后面 3 个没用过 |
2 crazyweeds 2023-05-29 18:57:36 +08:00 公司级别的,最终还是 dockerfile 。 |
![]() | 3 zengxs 2023-05-29 18:58:49 +08:00 建议你们单独拿个系统来跑 build, 这样不用考虑 dind 和 rootless 问题,并且根据我的经验 rootless 构建出来的某些镜像可能会有问题 |
![]() | 4 littlezzll 2023-05-29 19:11:58 +08:00 via Android 加一个 kaniko |
![]() | 5 Nitroethane 2023-05-29 19:20:34 +08:00 dind 是什么,是已经 archived 的那个「 Docker in Docker 」的项目吗?为啥要用这个呀? 哪里解决的 Docker 难用,可以举个例子吗 |
![]() | 6 Nitroethane 2023-05-29 19:20:45 +08:00 @zengxs 大概会有什么问题啊 |
![]() | 7 sobev 2023-05-29 19:24:55 +08:00 Buildah |
![]() | 8 zengxs 2023-05-29 19:29:40 +08:00 @Nitroethane #6 表现出来的现象就是用 rootless 某些 dockerfile 构建出来的镜像用不了,运行报错 exec format error , 同样的 dockerfile 项目,不用 rootless 就没这个问题,具体是什么原因导致的我也没搞清楚 |
![]() | 10 aljun OP @littlezzll 嗯嗯,但这个怎么样呢? G 家的好不好呀? |
![]() | 11 aljun OP @Nitroethane 因为实在容器里面 build 呀,就是自动化流程走 pipeline ,非本地 |
![]() | 14 hljjhb 2023-05-29 20:30:59 +08:00 kaniko 没什么大问题 |
16 zhenjiachen 2023-05-29 22:25:23 +08:00 via iPhone ![]() 如果是 spring boot 我们使用 jib |
![]() | 17 Bromine0x23 2023-05-29 22:31:19 +08:00 kaniko |
![]() | 18 superchijinpeng 2023-05-29 22:48:05 +08:00 via iPhone mac 上 colima linux 上 nerdctl windows 上 docker desktop |
![]() | 19 perfectlife 2023-05-29 23:23:25 +08:00 via Android 能选择我还是喜欢用 docker ,但是现在被迫用 kaniko 和 buildkit 在 containerd 上进行构建 |
20 huihuimoe 2023-05-29 23:59:59 +08:00 via iPhone 用 kaniko ,不需要考虑 dind/rootless 环境问题 |
&bsp; 22 abc612008 2023-05-30 00:31:26 +08:00 bazel |
![]() | 23 Reficul 2023-05-30 01:21:29 +08:00 bazel + rules_docker |
![]() | 24 yianing 2023-05-30 02:33:00 +08:00 via Android buildkit 就是 docker buildx 吧,可以一下编译多个平台的很方便 |
![]() | 25 clgon 2023-05-30 08:26:43 +08:00 kaniko |
26 ExplodingDragon 2023-05-30 08:29:09 +08:00 kaniko 不需要特权( SYS_ADM,fuse,overlay )就能跑,甚至能在 rootless 下工作, |
![]() | 27 mengdodo 2023-05-30 08:57:56 +08:00 一直都是默认的 docker ,你们更新的太快了,我快跟不上了 |
![]() | 28 chaleaochexist 2023-05-30 09:15:41 +08:00 我们还在用 docker 且运行时也是 docker. |
![]() | 29 loveuer 2023-05-30 09:22:23 +08:00 kaniko 还可以 从 docker build 切换到 kaniko 没啥痛点 |
30 kassadin 2023-05-30 09:38:49 +08:00 就 docker 啊,这是已经发展到哪了,我先收藏一下 |
![]() | 31 BQsummer 2023-05-30 10:27:10 +08:00 kaniko. jebkins slave 在 eci 上弹扩, kaniko 不需要 docker daemon |
33 julyclyde 2023-05-30 10:43:58 +08:00 @Nitroethane 有些邪教徒喜欢“everything in docker”,甚至连 docker build 过程也放在 docker 内运行 所以有了 docker in docker 项目。确实解决了一些基础问题,但这需求本身其实是没啥用的 |
34 DefoliationM 2023-05-30 11:01:17 +08:00 podman ,rootless 太爽了 |
![]() | 36 NaVient 2023-05-30 11:09:59 +08:00 buildkit kaniko 的痛点是慢,真的太慢了 |
![]() | 37 aljun OP @Bromine0x23 有什么优势呢? |
![]() | 38 aljun OP @superchijinpeng 是在 docker 内跑呢,就是容器内 build |
![]() | 39 aljun OP @perfectlife 为什么时被迫呢?我也是在 containerd 里,有什么区别? |
![]() | 45 aljun OP @ExplodingFKL 其他的有什么好处呢? |
![]() | 47 perfectlife 2023-05-30 13:27:26 +08:00 @aljun 我是在 k8s 上用 pod 去构建镜像的,运行时是 containerd 用不了挂载宿主机上 docker 的 unix socket 这种方式来,用 DinD 作为 Pod 的 Sidecar 或者使用 DaemonSet 在每个 containerd 节点上部署 Docker 这两种方式感觉都不太舒服 |
![]() | 49 aljun OP @julyclyde 我是放在 containerd 里面 build ,所以需要 dind 的 image 去 run 这个 |
![]() | 50 aljun OP @DefoliationM 使用上方便吗? |
![]() | 52 aljun OP @perfectlife 我目前也差不多是这样,你有什么别的好的方案吗? |
![]() | 53 fioncat 2023-05-30 13:33:06 +08:00 我们是在 k8s 里面构建镜像的,为了避免 dind ,用的 kaniko 。 |
![]() | 54 zhoudaiyu PRO 现在用的是 docker BuildKit ,感觉还可以,就是 qemu 跨 arch 编译确实有些慢,不过这种一般都是需要编译 whl 时才涉及,还好 |
55 ExplodingDragon 2023-05-30 13:35:08 +08:00 @aljun 各有优劣,我的需求是要能在 kubernetes 下编译镜像并且需要的权限越少越好,经过对比: - docker/buildkit/nerdctl(containerd) : (privileged) - podman/Buildah : (fuse) https://www.redhat.com/sysadmin/podman-inside-kubernetes - kaniko: UID=0 所以就选了 kaniko |
![]() | 56 perfectlife 2023-05-30 13:35:58 +08:00 @aljun buildkit 使用 daemonless 可以在没有 docker 情况下构建,或者用 kaniko |
![]() | 57 Reficul 2023-05-30 22:07:57 +08:00 @aljun #42 https://github.com/bazelbuild/rules_docker bazel 是通用构建系统,有对应的构建规则就能构建对应的产物,没有对应的规则也可以自己编写相应的规则。 docker 镜像本质是一堆 rootfs 的分层 tar 包外加一个 manifest 文件。所以只要构建出来的文件产物符合镜像规范,就能够推送到仓库里去,而要实现这个过程 docker 环境也不是必须的,直接 curl registry 的 API 就够了。 诸如 skopeo 这种镜像工具就是类似的做法。 此外,所以如果你的程序(比如 Go 代码)支持交叉编译,交叉构建镜像也是自然支持的。因为 Dockerfile 里的 RUN 动作才是需要在当前机器的容器里跑,其他动作本质上都是在操作文件而已。 |
![]() | 58 cumt21g 2023-05-30 23:55:05 +08:00 docker buildx |
![]() | 59 cumt21g 2023-05-30 23:56:40 +08:00 这么多用 kaniko 的,是没想到的 |
![]() | 60 ysc3839 2023-05-31 01:24:10 +08:00 via Android 没啥特殊需求,docker buildx |
61 abc612008 2023-05-31 08:09:12 +08:00 |
![]() | 62 hxndg 2023-06-01 14:40:27 +08:00 |
![]() | 63 Reficul 2023-06-01 15:18:42 +08:00 @hxndg #62 bazel 层面 cache layer 是指的啥,按道理 layer tar 这层只会在有变化的时候发生变化,如果没有的话直接利用 bazel action 产物的缓存就够了。至于 bazel 的缓存,可以放对象存储里面,只需要启动一个 gateway 。 不过的确没有 docker 易用,需要一个人愿意花时间在里面。整体框架搭好之后,还是很爽的。 |