Docker 就是预制菜,叮一下就能吃

终于把这件事理清了:

ChatGPT Image Oct 23, 2025, 01_49_38 PM.png

Screen-20251023091534@2x.png

用上 docker 之后是真的舒服,一点依赖冲突都没有了,不想用了直接删容器,也不需要担心依赖残留。

而且很适合拉个基础镜像用来当各种情况下的测试环境,除了systemd等底层方面可能会有一些区别,其他是真的感知不强。

2 Likes

docker最大的好处是处理各种库的需求的问题。某个应用需要某个特定版本的库,然后另外一个应用又需要这个库的另外一个版本。

这种时候,如果没有docker,这两个应用没法跑在同一个机器上,但是如果有了docker。就可以同时跑在一起了。

另外一个好处是干净,不会有安装某个软件所需要的软件包的残留,删除的时候特别干净。

虽然“预制菜”(Docker)很方便,但如果食用方式不对(瞎配权限)也会让人拉肚子(被攻击)或炸掉厨房(系统boom),而且还有很多黑心商家(不负责或恶意镜像维护者)使用过期(已经有大量漏洞的上古组件)甚至有毒(投毒镜像)原料。

同样的问题不用docker也会遇到。所以如果你真的不会做饭,不管是什么菜都能把厨房炸掉。

Web是Linux的GUI,Docker是Linux的EXE。

大部分人进厨房自己动手时,都会意识到或被告知其中的危险与隐患。而“仅预制菜”则没有人会告知这些,这些人“没有炸厨房或者吃坏肚子”大概率只是因为他们不知道炸厨房是什么概念,实际上他们可能早就已经炸掉了。

就像大部分普通用户只会知道Docker便捷甚至“安全”,并且他们确实可以在这样的认知的前提下继续操作。但在传统环境搭建时,这种认知可能会把这部分用户直接堵在开始阶段,他们大概率根本走不动炸厨房乃至烹饪环节。

控制变量情况下的类比才会是有效的,就像你说“仅预制菜”的用户在传统烹饪时也可能会炸掉厨房。是的,但另一个事实是这种用户可能根本就不会接触或者根本无法进行传统烹饪,所以这些用户可能根本不在对比的范畴。

Docker 很好,适合几乎任何条件的用户使用。包括能够进行传统环境搭建的用户,就像会下厨的人也可能选择预制菜。但 Docker “过于方便”了,并非说方便不好,只是目前基于 DockerHub 的生态过于执着方便而轻视了其他。

1 Like

您这个类比……恕我直言,还是有点欠妥的:

诚然,很多人习惯使用各种 WebUI 来管理服务器上的 Linux 系统,但 Linux 是有原生的 GUI 的,比如 X Window 和 Wayland 系统。

Docker 和 .exe 文件是有本质区别的。

  • .exe 文件是 Windows 系统上的二进制可执行文件,它们在运行时可能是需要依赖其他外部文件的,最常见的就是我们经常看到的各种 .dll 文件。
  • 而 Docker 有点类似于虚拟机,它相当于是把一个软件的可执行文件与全部运行这个软件需要的依赖库、系统环境一起打包在一起。

或许您想表达的是,使用 Docker 安装软件的时候,安装一个 Docker 容器就可以了;在 Windows 上安装软件时,也是运行一个 .exe 格式的安装程序就可以了;而在 Linux 上,安装一个软件包往往需要安装很多的依赖包。这种现象只是因为 Windows 和 Linux 上软件的打包、分发方式有所不同。Windows 上的安装程序往往会把软件需要的依赖库一起打包到安装程序中,而 Linux 上往往不会这么做。

@Qingwa 论坛有一个专门的Docker板块


1 Like

说docker是预制菜实际上并不准确,你要说原生安装是自己下厨的话,docker实际上相当于点外卖
特点:

  • 整合环境,一键运行/打包配送,开袋即食
  • 可以点你不会做的/别人做好镜像你就能用
  • 可以点多份一样的/可以运行多个同样容器
  • 吃完就扔/用完删除
  • 系统隔离性/餐具厨具隔离性
  • 依赖外卖平台/依赖docker平台

我还以为谁把七八年前的帖子顶上来了

七八年前哪有预制菜这种说法啊

预制菜这个比喻看着还是挺累的。

ChatGPT:Docker 是一个 开源的容器化平台,它可以让你把应用程序及其依赖(比如库、运行环境、配置文件等)打包在一个“容器”(Container)中,并且可以在任何支持 Docker 的环境中快速、稳定地运行。
Docker 就像一个“应用快递盒”,把程序和运行它所需的一切都打包好,无论在哪台机器上打开,都能保证“开箱即用”。


其他比喻尝试(纯玩儿):

3D 打印
A:

  • 设计尺寸、建模零件、支撑设计、打印测试、微调、组装成一个小玩具。
  • 然后优化了一下,把所有零件模型预先组装好,放在一个模型里,打印后只要把支撑拆掉就能玩了,并且分享出去了。

B:用的打印机和 A 相同,直接一键打印 A 分享的方案,一步到位了。

ps: 有没有3D打印机厂商赞助我一台:clown_face:

纯玩尬的

普通安装指的是安装包安装?
windows msi安装包, linux的deb pkg

还是make install

这些难度还是有区别的

嗯?这类话题不就是这样,有什么尬的。而且印象深刻,提醒作用这不是起到了吗。

普通安装:

图片.png

Docker:

PixPin_2025-10-31_16-05-30.png

网购一个家具
普通:一堆木板、螺丝、螺帽、扳手丢在快递站。
Docker:组装好的直接送货上门。

应该是从不同的地方买木板、螺丝、扳手、图纸

终于还是接触这东西了,感受就是仿佛回到了当年玩绿色软件的时代,太像了呀。

我的比喻是:

普通软件安装

你想要雇一个厨师帮你做菜,这就需要你首先有一个厨房,厨房里要有可以用的锅碗瓢盆,油盐酱醋。然后你把你的材料(蔬菜啦,鸡鸭鱼肉啦)交给厨师,让他帮你加工。

厨房理论上大家都是有的,我觉得可以用它去对应操作系统。

但厨房里的工具和材料并不一定都有,而且每家各有不同,这就很影响厨师的发挥。当缺少必要的依赖,厨师甚至无法做菜。于是,虽然请来了厨师,中途难免需要你自己跑去打酱油。

docker

厨师自带工具和调料,你只要提供场所(厨房)就可以了。给他食材,说清楚要什么,他给你做饭。

一切做完以后,你可以让他带着他的东西滚蛋,你的厨房还是原来的样子。

但是你消耗掉的食材就是消耗了,当然,你吃下去的饭也就吃下去了,并不用退给他。


基本就是绿色软件的原则:

  • 带上所需的各种依赖和环境,争取让你驱动不需要考虑任何其他问题
  • 不要污染安装目录以外的任何其他位置
  • 删除目录即完成卸载
  • 但不要像某些沙盒一样,卸载的时候,把自己做的所有修改都给恢复掉。(为什么我下载了办公软件儿,我用它修改过的所有文档全都消失了……(:з」∠)

现在我正在努力尝试理解它的网络部分。说实话,折腾到第二天,我现在成功安装并运行的实例并不多。一半儿是卡在了网络上,一半儿是卡在了各种参数映射上