想问问大家目前公司都用什么来 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 1
如果是 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 环境问题
|
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
ExplodingFKL 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 2023-05-30 13:34:47 +08:00
现在用的是 docker BuildKit ,感觉还可以,就是 qemu 跨 arch 编译确实有些慢,不过这种一般都是需要编译 whl 时才涉及,还好
|
55
ExplodingFKL 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 易用,需要一个人愿意花时间在里面。整体框架搭好之后,还是很爽的。 |