• 请不要在回答技术问题时复制粘贴 AI 生成的内容
aljun
V2EX  ›  程序员

现在大家公司 Build 镜像都喜欢用什么? Podman? Docker? BuildKit? buildpacks?

  •  2
     
  •   aljun · May 29, 2023 · 8208 views
    This topic created in 1081 days ago, the information mentioned may be changed or developed.

    想问问大家目前公司都用什么来 build 镜像?因为目前走的 docker ,感觉各种难用,还得 dind ,而且还有 rootless 的问题

    • podman
    • docker
    • BuildKit (只是 buildkit ,非 docker )
    • buildpack
    • Buildah
    • 还有其他的话欢迎补充
    65 replies    2023-06-05 10:47:06 +08:00
    zengxs
        1
    zengxs  
       May 29, 2023
    前面两个选 docker, 兼容性比 podman 好,后面 3 个没用过
    crazyweeds
        2
    crazyweeds  
       May 29, 2023
    公司级别的,最终还是 dockerfile 。
    zengxs
        3
    zengxs  
       May 29, 2023
    建议你们单独拿个系统来跑 build, 这样不用考虑 dind 和 rootless 问题,并且根据我的经验 rootless 构建出来的某些镜像可能会有问题
    littlezzll
        4
    littlezzll  
       May 29, 2023 via Android
    加一个 kaniko
    Nitroethane
        5
    Nitroethane  
       May 29, 2023
    dind 是什么,是已经 archived 的那个「 Docker in Docker 」的项目吗?为啥要用这个呀?
    哪里解决的 Docker 难用,可以举个例子吗
    Nitroethane
        6
    Nitroethane  
       May 29, 2023
    @zengxs 大概会有什么问题啊
    sobev
        7
    sobev  
       May 29, 2023
    Buildah
    zengxs
        8
    zengxs  
       May 29, 2023
    @Nitroethane #6
    表现出来的现象就是用 rootless 某些 dockerfile 构建出来的镜像用不了,运行报错 exec format error ,
    同样的 dockerfile 项目,不用 rootless 就没这个问题,具体是什么原因导致的我也没搞清楚
    aljun
        9
    aljun  
    OP
       May 29, 2023
    @zengxs rootless 的容器也难用
    aljun
        10
    aljun  
    OP
       May 29, 2023
    @littlezzll 嗯嗯,但这个怎么样呢? G 家的好不好呀?
    aljun
        11
    aljun  
    OP
       May 29, 2023
    @Nitroethane 因为实在容器里面 build 呀,就是自动化流程走 pipeline ,非本地
    aljun
        12
    aljun  
    OP
       May 29, 2023
    @zengxs 这个不该是 x86/ arm 之类的问题?你加个 platform 的 option 试试?
    aljun
        13
    aljun  
    OP
       May 29, 2023
    @sobev 这个好用吗?和 docker 比呢?
    hljjhb
        14
    hljjhb  
       May 29, 2023
    kaniko

    没什么大问题
    aljun
        15
    aljun  
    OP
       May 29, 2023
    @hljjhb 和其他的比较好在哪里呢?
    zhenjiachen
        16
    zhenjiachen  
       May 29, 2023 via iPhone   ❤️ 1
    如果是 spring boot 我们使用 jib
    Bromine0x23
        17
    Bromine0x23  
       May 29, 2023
    kaniko
    cutiechi
        18
    cutiechi  
       May 29, 2023 via iPhone
    mac 上 colima
    linux 上 nerdctl
    windows 上 docker desktop
    perfectlife
        19
    perfectlife  
       May 29, 2023 via Android
    能选择我还是喜欢用 docker ,但是现在被迫用 kaniko 和 buildkit 在 containerd 上进行构建
    huihuimoe
        20
    huihuimoe  
       May 29, 2023 via iPhone
    用 kaniko ,不需要考虑 dind/rootless 环境问题
    hljjhb
        21
    hljjhb  
       May 30, 2023
    @aljun #15 只是为了 rootless ,构建会慢些,然后不支持交叉编译
    abc612008
        22
    abc612008  
       May 30, 2023
    bazel
    Reficul
        23
    Reficul  
       May 30, 2023
    bazel + rules_docker
    rammiah
        24
    rammiah  
       May 30, 2023 via Android
    buildkit 就是 docker buildx 吧,可以一下编译多个平台的很方便
    clgon
        25
    clgon  
       May 30, 2023
    kaniko
    ExplodingDragon
        26
    ExplodingDragon  
       May 30, 2023
    kaniko

    不需要特权( SYS_ADM,fuse,overlay )就能跑,甚至能在 rootless 下工作,
    mengdodo
        27
    mengdodo  
       May 30, 2023
    一直都是默认的 docker ,你们更新的太快了,我快跟不上了
    chaleaochexist
        28
    chaleaochexist  
       May 30, 2023
    我们还在用 docker 且运行时也是 docker.
    drealism
        29
    drealism  
       May 30, 2023
    kaniko 还可以
    从 docker build 切换到 kaniko 没啥痛点
    kassadin
        30
    kassadin  
       May 30, 2023
    就 docker 啊,这是已经发展到哪了,我先收藏一下
    BQsummer
        31
    BQsummer  
       May 30, 2023
    kaniko. jebkins slave 在 eci 上弹扩, kaniko 不需要 docker daemon
    julyclyde
        32
    julyclyde  
       May 30, 2023
    @zengxs 啥叫兼容性?
    julyclyde
        33
    julyclyde  
       May 30, 2023
    @Nitroethane 有些邪教徒喜欢“everything in docker”,甚至连 docker build 过程也放在 docker 内运行
    所以有了 docker in docker 项目。确实解决了一些基础问题,但这需求本身其实是没啥用的
    DefoliationM
        34
    DefoliationM  
       May 30, 2023
    podman ,rootless 太爽了
    zengxs
        35
    zengxs  
       May 30, 2023
    @aljun #12 不是 platform 的问题,我在构建的机器上也运行不了
    NaVient
        36
    NaVient  
       May 30, 2023
    buildkit


    kaniko 的痛点是慢,真的太慢了
    aljun
        37
    aljun  
    OP
       May 30, 2023
    @Bromine0x23 有什么优势呢?
    aljun
        38
    aljun  
    OP
       May 30, 2023
    @superchijinpeng 是在 docker 内跑呢,就是容器内 build
    aljun
        39
    aljun  
    OP
       May 30, 2023
    @perfectlife 为什么时被迫呢?我也是在 containerd 里,有什么区别?
    aljun
        40
    aljun  
    OP
       May 30, 2023
    @huihuimoe 那会不会有权限问题?
    aljun
        41
    aljun  
    OP
       May 30, 2023
    @abc612008 这个好像不是编译镜像的吧。。。
    aljun
        42
    aljun  
    OP
       May 30, 2023
    @Reficul bazel 好像不是编译镜像的吧,rules docker 是啥?
    aljun
        43
    aljun  
    OP
       May 30, 2023
    @yianing 是的,可以裸着用,但是日志貌似不是很方便
    aljun
        44
    aljun  
    OP
       May 30, 2023
    @clgon 有什么好处呢?
    aljun
        45
    aljun  
    OP
       May 30, 2023
    @ExplodingFKL 其他的有什么好处呢?
    aljun
        46
    aljun  
    OP
       May 30, 2023
    @loveuer 有什么好处不?
    perfectlife
        47
    perfectlife  
       May 30, 2023
    @aljun 我是在 k8s 上用 pod 去构建镜像的,运行时是 containerd 用不了挂载宿主机上 docker 的 unix socket 这种方式来,用 DinD 作为 Pod 的 Sidecar 或者使用 DaemonSet 在每个 containerd 节点上部署 Docker 这两种方式感觉都不太舒服
    aljun
        48
    aljun  
    OP
       May 30, 2023
    @BQsummer 现在都是 kaniko 吗?
    aljun
        49
    aljun  
    OP
       May 30, 2023
    @julyclyde 我是放在 containerd 里面 build ,所以需要 dind 的 image 去 run 这个
    aljun
        50
    aljun  
    OP
       May 30, 2023
    @DefoliationM 使用上方便吗?
    aljun
        51
    aljun  
    OP
       May 30, 2023
    @NaVient 感觉 buildkit 几乎就是 docker 呀
    aljun
        52
    aljun  
    OP
       May 30, 2023
    @perfectlife 我目前也差不多是这样,你有什么别的好的方案吗?
    fioncat
        53
    fioncat  
       May 30, 2023
    我们是在 k8s 里面构建镜像的,为了避免 dind ,用的 kaniko 。
    zhoudaiyu
        54
    zhoudaiyu  
    PRO
       May 30, 2023
    现在用的是 docker BuildKit ,感觉还可以,就是 qemu 跨 arch 编译确实有些慢,不过这种一般都是需要编译 whl 时才涉及,还好
    ExplodingDragon
        55
    ExplodingDragon  
       May 30, 2023
    @aljun 各有优劣,我的需求是要能在 kubernetes 下编译镜像并且需要的权限越少越好,经过对比:

    - docker/buildkit/nerdctl(containerd) : (privileged)
    - podman/Buildah : (fuse) https://www.redhat.com/sysadmin/podman-inside-kubernetes
    - kaniko: UID=0

    所以就选了 kaniko
    perfectlife
        56
    perfectlife  
       May 30, 2023
    @aljun buildkit 使用 daemonless 可以在没有 docker 情况下构建,或者用 kaniko
    Reficul
        57
    Reficul  
       May 30, 2023
    @aljun #42

    https://github.com/bazelbuild/rules_docker
    bazel 是通用构建系统,有对应的构建规则就能构建对应的产物,没有对应的规则也可以自己编写相应的规则。

    docker 镜像本质是一堆 rootfs 的分层 tar 包外加一个 manifest 文件。所以只要构建出来的文件产物符合镜像规范,就能够推送到仓库里去,而要实现这个过程 docker 环境也不是必须的,直接 curl registry 的 API 就够了。 诸如 skopeo 这种镜像工具就是类似的做法。

    此外,所以如果你的程序(比如 Go 代码)支持交叉编译,交叉构建镜像也是自然支持的。因为 Dockerfile 里的 RUN 动作才是需要在当前机器的容器里跑,其他动作本质上都是在操作文件而已。
    cumt21g
        58
    cumt21g  
       May 30, 2023
    docker buildx
    cumt21g
        59
    cumt21g  
       May 30, 2023
    这么多用 kaniko 的,是没想到的
    ysc3839
        60
    ysc3839  
       May 31, 2023 via Android
    没啥特殊需求,docker buildx
    hxndg
        62
    hxndg  
       Jun 1, 2023
    @Reficul @aljun
    bazel rules docker 的好处是确定性。但是目前 bazel 对内存的消耗和时间效率啥的还是不如 docker 好。。。。此外要有效处理缓存机制,避免 bazel 层面 cache layer 。

    这种如果不是整体做 bazel 的平台相关的话还是不推荐用

    如果整体用 bazel 体系做的话会比较爽
    Reficul
        63
    Reficul  
       Jun 1, 2023
    @hxndg #62

    bazel 层面 cache layer 是指的啥,按道理 layer tar 这层只会在有变化的时候发生变化,如果没有的话直接利用 bazel action 产物的缓存就够了。至于 bazel 的缓存,可以放对象存储里面,只需要启动一个 gateway 。

    不过的确没有 docker 易用,需要一个人愿意花时间在里面。整体框架搭好之后,还是很爽的。
    hxndg
        64
    hxndg  
       Jun 1, 2023
    @Reficul
    你们用的是 remote cache 还是 buildfarm 那一套?如果需要频繁的 integration test ,很多 bazel 的 layer 不用缓存的?
    我追求效率没使用 gateway cache ,用的还是 buildfarm 本地存储之类
    Reficul
        65
    Reficul  
       Jun 5, 2023
    @hxndg

    用的是 remote cache ,目前没感觉 layer 缓存有啥效率问题...
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1040 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 164ms · UTC 22:35 · PVG 06:35 · LAX 15:35 · JFK 18:35
    ♥ Do have faith in what you're doing.