V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
fy
V2EX  ›  问与答

求教一个比 docker compser 复杂一点,又比 k3s 简单的部署方案,主要痛点是更新

  •  
  •   fy · 2023-09-25 17:22:12 +08:00 · 2376 次点击
    这是一个创建于 450 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如题,挂掉自动拉起应该能通过 restart: always 解决,或者设置一个次数限制
    容器更新有啥好方案吗。目前想法是构建好推送 S3 ,然后那边写个脚本轮询+重新 docker composer up -d ,是不是太粗糙了

    这类应用场景是 homelab 、内网部署、低性能服务器这些
    23 条回复    2023-09-27 08:08:02 +08:00
    lerry
        1
    lerry  
       2023-09-25 17:24:15 +08:00   ❤️ 1
    watchtower 可以自动更新镜像和容器
    sunny352787
        2
    sunny352787  
       2023-09-25 17:25:30 +08:00   ❤️ 1
    内网测试环境?让 CI 触发执行 docker-compose up -d --force-recreate --build XXX
    Trim21
        3
    Trim21  
       2023-09-25 17:29:18 +08:00   ❤️ 1
    docker compose 支持重启次数限制。

    https://docs.docker.com/compose/compose-file/compose-file-v3/#deploy

    楼上说的 watchtower 不支持比较新的 docker compose 。
    Trim21
        4
    Trim21  
       2023-09-25 17:31:43 +08:00
    我是直接在 crontab 里面定时 docker compose up -d --pull=always ...
    fy
        5
    fy  
    OP
       2023-09-25 17:34:12 +08:00
    @Trim21 是说 docker compose 不能太新 还是配置文件不能太新呢?

    应该是这个吧: https://containrrr.dev/watchtower/
    我配置文件是 3.7 应该能用?请教有没有坑之类呢
    fy
        6
    fy  
    OP
       2023-09-25 17:34:37 +08:00
    @Trim21 啊这 大力出奇迹!
    fy
        7
    fy  
    OP
       2023-09-25 17:36:15 +08:00
    那如果我不想建立 harbour ,有两个服务直接自己构建镜像推到 s3 ,这种情况 pull 就不行了吧?
    Trim21
        8
    Trim21  
       2023-09-25 17:43:58 +08:00   ❤️ 1
    @fy #5 的 docker compose 本身不能太新。配置文件的版本倒是次要的。

    好像是判断容器是否需要重启的逻辑跟 docker compose 启动容器的方式不太兼容。

    https://github.com/containrrr/watchtower/issues/1019
    zzl22100048
        9
    zzl22100048  
       2023-09-25 17:53:42 +08:00
    我怎么感觉 k3s 比 docker compose 简单多了,特别是涉及服务更新。我这 1c2g 跑 k3s 也没问题啊
    fy
        10
    fy  
    OP
       2023-09-25 17:53:48 +08:00
    @Trim21 啊这 那乍一看起来好像没有特别的好处,似乎只是能记一下日志,提供一点 hook 、metric 之类的。
    我搜了一下看到好像有 s3 bucket 当做 docker registry 的用法,那我也这样暴力 pull 大概也行。。。?
    如果上游没更新是不会重建和重启服务的吧
    fsdrw08
        11
    fsdrw08  
       2023-09-25 17:54:29 +08:00 via Android   ❤️ 1
    podman 支持通过 k8s 格式的描述文件进行部署,可以考虑用 podman + k8s 描述文件,在描述文件的 label 里面加上 io.containers.autoupdate: registry 配置自动更新
    Trim21
        12
    Trim21  
       2023-09-25 17:55:37 +08:00
    @fy #10 我几乎不用 build 参数,不太清除 build 相关参数的行为,但是如果上游 tag 对应的 sha 没变化的时候不会 pull 并重启。
    fy
        13
    fy  
    OP
       2023-09-25 17:56:16 +08:00
    @zzl22100048 首先一个原因是我写了 compose 配置……其次是我看老贴说 k3s 直接吃 1g 内存,在性能较差机器上吃 30%的 cpu ,然后节点备份、自动扩容、网关那些功能我好像也不需要,所以想着简单点
    fy
        14
    fy  
    OP
       2023-09-25 18:05:30 +08:00
    @fsdrw08 请教下,这个新的容器工具有什么亮点吗。
    感觉过去两年,现在好像都在对 docker 喊打喊杀也不知道啥情况
    liuzhaowei55
        15
    liuzhaowei55  
       2023-09-25 18:22:40 +08:00 via Android
    docker swarm + portainer
    paranoiagu
        16
    paranoiagu  
       2023-09-25 18:27:07 +08:00 via Android
    单机跑,不涉及虚拟网络。docker compose 就很好。
    多机群集,需要虚拟网络,那么上 swarm 、k8s......
    cdlnls
        17
    cdlnls  
       2023-09-25 18:40:16 +08:00   ❤️ 1
    docker swarm ,就是比 docker-compose.yml 多一个 deploy ,可以配置滚动更新,还有 docker swarm 支持多节点。
    momocraft
        18
    momocraft  
       2023-09-25 18:56:29 +08:00   ❤️ 1
    docker-compose 可以远程更新的 https://www.docker.com/blog/how-to-deploy-on-remote-docker-hosts-with-docker-compose/
    具体原理是从当前机器通过 ssh 控制对面 host (DOCKER_HOST) 的 dockerd

    如果需要更好状态管理可以上简单的 terraform ,也能远程管理容器

    这两种做法都不需要另外跑程序
    ospider
        19
    ospider  
       2023-09-25 19:05:08 +08:00
    k3s 还不够简单么……另外,可以考虑一下 ansible ,完全可以替代 docker-compose
    kid1412621
        20
    kid1412621  
       2023-09-25 22:16:05 +08:00 via iPhone
    @cdlnls emmm 看来 swarm 还是并一无是处啊
    ETiV
        21
    ETiV  
       2023-09-25 23:04:28 +08:00 via iPhone
    自己单台就别整那么麻烦了

    docker 的 image 就当代码的运行时,你自己的代码 mount 进去跑
    dislazy2023
        22
    dislazy2023  
       2023-09-26 11:48:30 +08:00
    k3s 主要是占用磁盘比较多,需要起一些不必要的节点
    fsdrw08
        23
    fsdrw08  
       2023-09-27 08:08:02 +08:00 via Android
    @fy podman 对比 docker 的优势有 2 点
    1 ,对 rootless 支持很好,rootless 最大的好处是可以把容器所有依赖的组件都放在用户级别的目录下,例如 overlay 的文件层,volume ,启动容器对应的 systemd 服务,在 rootless 模式下这些都放在用户目录下,最终可以做到计算与存储分离,我现在的做法是创建一个专用于运行 podman 容器的用户,用户目录放在数据盘里,系统装好 podman 并配置了 linger ,开机挂载数据盘就能运行容器
    2 ,podman 支持加载 k8s 文件,支持 pod, deployment, statefulset, configmap, secret, PVC 等资源描述,可以通过 k8s 描述文件配置容器,这里的玩法就多了,例如通过 helm chart 部署
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4663 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 43ms · UTC 10:03 · PVG 18:03 · LAX 02:03 · JFK 05:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.