V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
cmos
V2EX  ›  Docker

万物皆 docker 部署,真的有必要吗?

  •  
  •   cmos · 2025 年 8 月 21 日 · 5953 次点击
    这是一个创建于 155 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 为了开发/测试一致性,使用 Docker 安装 MySQL 、Nginx ,是正常的。
    • 系统庞杂、繁琐,不容易部署,用 docker 是高效、稳定的。

    openlist这类无依赖的单文件程序,用docker部署是为了什么?不应该遵循 FHS 规范,安装到/opt/openlist并使用systemd管理吗?

    但是我在实际接触中发现,为了MySQL/Nginx性能,实际上docker部署的没几个,反而openlist这种web应用大多是docker部署。

    52 条回复    2025-10-18 15:59:33 +08:00
    zhangfeiwudi
        1
    zhangfeiwudi  
       2025 年 8 月 21 日
    方便统一迁移,标准化 , 标准化很重要,不管你是什么 openlist 还上 closelist 都是一个 dockerfile 的事儿, 方便快速 扩容大批量的 pod 和迁移整体集群
    totoro625
        2
    totoro625  
       2025 年 8 月 21 日   ❤️ 7
    docker 用户不在意性能损失,在意的是灵活部署,一键使用,删除方便,环境隔离
    简单的比喻就是,iOS 安装软件删除就全没了(此处不谈钥匙串),安卓安装软件删除还残留一些配置

    nginx 为例:
    在意性能肯定直接安装
    但是安装完在/etc/nginx 目录下一堆配置,不小心改错配置,卸载重装后问题还在,docker 安装则没有问题
    andyskaura
        3
    andyskaura  
       2025 年 8 月 21 日
    这就和豆腐脑应该是咸的还是甜的一样。数据库可以 docker 部署吗?
    duanxianze
        4
    duanxianze  
       2025 年 8 月 21 日
    分情况,假如是 saas 的应用,客户的服务器,系统什么的并不统一,用 docker 自然好,又或者分布式快速扩容,用 docker 也挺好,不能一概而论
    peteretep
        5
    peteretep  
       2025 年 8 月 21 日
    docker 标准化后,可以使用 docker-compose 或者 k8s ,进行更同意快捷的管理
    单服务安装就没有更进一步的手段了

    在业务部署数量随时间膨胀的的情况下,选一个长久的方案是合理的

    如果是小玩具服务无所谓
    wangxiang
        6
    wangxiang  
       2025 年 8 月 21 日   ❤️ 4
    装完就觉得系统不干净了,只能重装系统
    superrichman
        7
    superrichman  
       2025 年 8 月 21 日   ❤️ 2
    你以为是单文件,其实还是用到了系统的 so 文件的。

    ldd ./openlist
    linux-vdso.so.1 (0x00007f9c78298000)
    libresolv.so.2 => /usr/lib/libresolv.so.2 (0x00007f9c7824e000)
    libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f9c78249000)
    libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f9c78244000)
    libc.so.6 => /usr/lib/libc.so.6 (0x00007f9c78000000)
    /lib64/ld-linux-x86-64.so.2 => /usr/lib64/ld-linux-x86-64.so.2 (0x00007f9c7829a000)

    最经典比如 gilbc 的版本问题,这个是报错最多的。你不知道用户会在什么环境里用,有的版本高了,有的版本低了都不行,直接无法启动。

    docker 用来保证所有用户都在一个环境里运行,软件依赖版本都一致。
    89adc64
        8
    89adc64  
       2025 年 8 月 21 日
    @andyskaura 可以的
    cmos
        9
    cmos  
    OP
       2025 年 8 月 21 日
    @andyskaura 3#
    打~起~来~了~
    cmos
        10
    cmos  
    OP
       2025 年 8 月 21 日
    @superrichman 7#
    openlist 有 musl 版本,兼容性问题倒是不大。
    pdone
        11
    pdone  
       2025 年 8 月 21 日
    docker 迁移特方便 持久卷 + compose.yml 复制走 随便找个架构相同的机器就又跑起来了 喜欢折腾 nas 的朋友太喜欢了
    shakaraka
        12
    shakaraka  
    PRO
       2025 年 8 月 21 日
    容器化的好处太多了,真要性能不好加机子就行了
    shakaraka
        13
    shakaraka  
    PRO
       2025 年 8 月 21 日
    之前都有个 macos 的 docker 镜像可以跑。是真的 Mac OS 。

    好像也有 Windows 的
    Leeeeex
        14
    Leeeeex  
    PRO
       2025 年 8 月 21 日
    因为 docker 一个配置文件就能跑起来了,我要换一台机器的话把配置文件移过去就可以了
    但是其他的安装不行,一会配置这个地方,一会配置另一个地方,而且搞错了还不知道怎么回退,我不太了解 Linux 系统,这种对我来说是最方便的
    Dorathea
        15
    Dorathea  
       2025 年 8 月 21 日
    @andyskaura
    当然可以, 把数据和配置目录映射到主机上就行
    defunct9
        16
    defunct9  
       2025 年 8 月 21 日
    完全没必要
    Reficul
        17
    Reficul  
       2025 年 8 月 21 日
    > 但是我在实际接触中发现,为了 MySQL/Nginx 性能,实际上 docker 部署的没几个。

    首先这个前提就不成立,MySQL / Nginx 跑容器里的海了去了。 其次为什么有性能问题,有多少损失?
    NoobNoob030
        18
    NoobNoob030  
       2025 年 8 月 21 日
    喜欢简单一把梭,全部都用 docker 减少心智负担
    evill
        19
    evill  
       2025 年 8 月 21 日
    额,不懂为什么会有觉得 docker 会丢失性能,以及不能部署数据库
    docker 只是把 namespace 和 cgroup 集合起来对外提供统一功能而已,实际上还是 container

    在部署层面上 docker 与 systemd 、pm2 甚至 nohup 并没有区别,只是托管进程
    itechify
        20
    itechify  
    PRO
       2025 年 8 月 21 日
    统一规范 个人部署 尽量 all in docker ,portainer 等面板上去拉镜像就运行起来了,持久化只需要挂在
    不用 ssh 上去编写 systemd service ,不用 apt install ,不用编译。。。
    cmos
        21
    cmos  
    OP
       2025 年 8 月 21 日
    @evill 19#
    I/O 啊,docker 用的 overlay2 、aufs 等,再加上虚拟网络,负载一高就撑不住了。虽然可以 --volume 挂载到宿主机目录以及 --network host 共享宿主机网络栈,但也治标不治本。比如 json-file 日志 在 overlay2 层写入放大,10%的损失是很正常的。
    cmos
        22
    cmos  
    OP
       2025 年 8 月 21 日
    @Reficul 17#
    受限于文件系统和虚拟网络,10%的性能损失是很常见的,要是没有配置好,30%也不是不可能。
    jonsmith
        23
    jonsmith  
       2025 年 8 月 21 日 via Android
    all in docker 省事,配合 docker compose 部署、备份迁移都方便。
    evill
        24
    evill  
       2025 年 8 月 21 日
    额,公司大规模情况下,怎么会这么裸奔呢?

    网络不是应该结合 LB 等,做成 overlay 形成一个服务网络
    日志都是直接放主机? 难道不是直接收集走
    RanKaede
        25
    RanKaede  
       2025 年 8 月 21 日
    方便,直接装系统里就觉得不干净了,尤其是卸载后感觉会有各种不知道的配置项残留
    evill
        26
    evill  
       2025 年 8 月 21 日
    @imes 而且我真的不认为“负载一高就撑不住了”
    我所在公司,大几十万的日活,大概 400 多台虚拟机,all docker 并没有负载高就撑不住的情况
    Reficul
        27
    Reficul  
       2025 年 8 月 21 日
    @imes

    你这么说,说明你没测过。
    zhhqiang
        28
    zhhqiang  
       2025 年 8 月 21 日
    docker 服务起多了,小水管顶不住。
    gzldc
        29
    gzldc  
       2025 年 8 月 21 日
    @andyskaura 豆腐脑我喝咸的
    pingdog
        30
    pingdog  
       2025 年 8 月 21 日 via Android
    @evill docker 的 container 正是使用虚拟化…… guest 对比 host 必然是有性能损失……
    当然现在大多数商用服务撑不住就升配,没什么好对比
    pingdog
        31
    pingdog  
       2025 年 8 月 21 日 via Android
    OP 用开源项目比较并不恰当,因为你不能预测什么时候会来个牛鬼蛇神开个 issue 骂你,即使做个一键安装也要侍候好某些还在坚持用 10 年前的“稳定”Linux 发行版的牛鬼蛇神

    企业大概前后端分离+微服务架构,业务方向调整也快,上线可能隔 3/5 月就砍了,安装/扩容拉起容器就完事,也不用花时间开单等运维调试上线
    itechify
        32
    itechify  
    PRO
       2025 年 8 月 21 日
    @zhhqiang 小鸡内存不够吧
    evill
        33
    evill  
       2025 年 8 月 21 日
    @fuzzsh 额,docker 和虚化有什么关系呢?

    docker 是共享宿主机内核,只有用户空间隔离。唯一的虚化是 OS-level ,但这也是一个隔离而已

    这里虚拟机没有关系,也没有什么 guest ,这些都是虚拟机的概念
    Tink
        34
    Tink  
    PRO
       2025 年 8 月 21 日
    主要是小白多,docker 一行命令就行了,不用去靠谱什么配置文件参数等等一堆东西
    Tink
        35
    Tink  
    PRO
       2025 年 8 月 21 日
    靠谱 -> 考虑
    goodryb
        36
    goodryb  
       2025 年 8 月 21 日
    记得最早推 docker 的一大优势,就是屏蔽底层操作系统,解决各种依赖问题
    性能我觉得肯定是有损失的,但是损失多少,能否接受是另外一回事情
    COW
        37
    COW  
       2025 年 8 月 21 日
    @imes 如果不考虑其他因素,只说单机 Docker ,挂载本地磁盘的性能和裸机差距非常小。
    shenlanAZ
        38
    shenlanAZ  
       2025 年 8 月 21 日
    #10 不是所有系统都用 systemd 的,也不是所有程序都老老实实的往某个目录下写 data 。

    容器化就能很好的屏蔽这些差异( not only Docker ),并且预期可控。
    phrack
        39
    phrack  
       2025 年 8 月 21 日
    docker 方便啊,完全不用操心依赖,本地的 docker 能跑,远程但凡有个 docker 都能跑
    hwdq0012
        40
    hwdq0012  
       2025 年 8 月 21 日
    windows 也在 推 winRT 隔离 烦死了,我就想生成绿色软件包
    twl007
        41
    twl007  
       2025 年 8 月 21 日 via iPhone
    维护一个 systemd 的配置已经是一个比写 Dockerfile 心智负担大得多的东西了

    还没提你要维护管理包构建/发布/安装/更新

    与之相配套的还得有 Ansible/Chief/Puppet

    说真的我不知道哪里简单
    FrankAdler
        42
    FrankAdler  
       2025 年 8 月 21 日 via Android
    我觉得做大的好处就是,不会一堆小白问你安装失败的问题了,dockerfile 写的足够好,一键执行一定成功
    当然为了性能和空间我自己会找二进制文件甚至从 image 里扣出来直接运行
    kingcanfish
        43
    kingcanfish  
       2025 年 8 月 21 日
    就按你的理论 “会损失 10%的性能” 和 早 10 分钟下班
    ---
    我选择早十分钟下班
    bao3
        44
    bao3  
       2025 年 8 月 22 日
    docker 并没有多少性能损失,它又不是虚拟机,它只是容器而已。
    用 docker 的人不会在意它在内核上的性能损失,因为微乎其微,你要是在意这个,那你别用就行了。
所以对你来说,并没有选择难题。
    BenHunDun
        45
    BenHunDun  
       2025 年 8 月 22 日
    感觉除非性能敏感和自身资源受限的情况. docker 应该是最方便的. 特别像个人使用的一些服务, 常常都不会有这些限制.

    原先写一些关于中间件 zk, kafka 的代码, 中间件都是宿主机启动, 现在没有特殊的都会优先考虑 docker. 包括一些集群启动什么的也方便.

    然后还有一些尝鲜式的有 docker 先起来看看感觉怎么样.
    momo2789
        46
    momo2789  
       2025 年 8 月 22 日
    😓为什么还有人说 docker 会有性能损失,是没看过 docker 的实现是吧。
    Docker 是基于 namespace + cgroups ,本质还是宿主机内核,所以 CPU 和内存开销几乎可以忽略。非要扣性能就挂 docker volume 网络走 host 。
    cwcc
        47
    cwcc  
       2025 年 8 月 22 日
    容器如果用作隔离环境我是赞成的,比虚拟机轻量,同时也好操作。

    但如果用 docker 给依赖地狱遮羞,那我不赞成,这明明是妥协,如果能干净地处理依赖或者环境配置,那肯定不用 docker 更好。
    princeofwales
        48
    princeofwales  
       2025 年 8 月 24 日 via iPhone
    一个 docker 里只部署了一个 mysql 容器,是个内网应用部署好之后 3 年不需要改动一次的那种,硬要放到容器里把各个目录和端口映射出来使用,我只能说闲得蛋疼,把软件供应商 k 了一顿
    julyclyde
        49
    julyclyde  
       2025 年 9 月 6 日
    当然没有必要
    只是有些人除了这个也不会别的了

    另外:
    据说某些 NAS 系统不让在系统层面安装软件,只提供 docker
    julyclyde
        50
    julyclyde  
       2025 年 9 月 6 日
    @zhangfeiwudi 你 dockerfile 既不能带命令行参数也不自带说明
    要说 compose/k8s 作为解决方案还差不多;纯 docker 那还差得远
    julyclyde
        51
    julyclyde  
       2025 年 9 月 6 日
    @evill 比 nohup 还是强太多了。因为 nohup *并不* 托管进程
    Jacobson
        52
    Jacobson  
       2025 年 10 月 18 日 via iPhone
    @wangxiang 我靠,原来不只是我有这种洁癖…
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   927 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:39 · PVG 04:39 · LAX 12:39 · JFK 15:39
    ♥ Do have faith in what you're doing.