openlist
这类无依赖的单文件程序,用docker
部署是为了什么?不应该遵循 FHS 规范,安装到/opt/openlist
并使用systemd
管理吗?
但是我在实际接触中发现,为了MySQL/Nginx
性能,实际上docker
部署的没几个,反而openlist
这种web
应用大多是docker
部署。
![]() |
1
zhangfeiwudi 11 天前
方便统一迁移,标准化 , 标准化很重要,不管你是什么 openlist 还上 closelist 都是一个 dockerfile 的事儿, 方便快速 扩容大批量的 pod 和迁移整体集群
|
![]() |
2
totoro625 11 天前 ![]() docker 用户不在意性能损失,在意的是灵活部署,一键使用,删除方便,环境隔离
简单的比喻就是,iOS 安装软件删除就全没了(此处不谈钥匙串),安卓安装软件删除还残留一些配置 nginx 为例: 在意性能肯定直接安装 但是安装完在/etc/nginx 目录下一堆配置,不小心改错配置,卸载重装后问题还在,docker 安装则没有问题 |
![]() |
3
andyskaura 11 天前
这就和豆腐脑应该是咸的还是甜的一样。数据库可以 docker 部署吗?
|
![]() |
4
duanxianze 11 天前
分情况,假如是 saas 的应用,客户的服务器,系统什么的并不统一,用 docker 自然好,又或者分布式快速扩容,用 docker 也挺好,不能一概而论
|
![]() |
5
peteretep 11 天前
docker 标准化后,可以使用 docker-compose 或者 k8s ,进行更同意快捷的管理
单服务安装就没有更进一步的手段了 在业务部署数量随时间膨胀的的情况下,选一个长久的方案是合理的 如果是小玩具服务无所谓 |
6
wangxiang 11 天前 ![]() 装完就觉得系统不干净了,只能重装系统
|
7
superrichman 11 天前 ![]() 你以为是单文件,其实还是用到了系统的 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 用来保证所有用户都在一个环境里运行,软件依赖版本都一致。 |
![]() |
8
NightFlame 11 天前
@andyskaura 可以的
|
![]() |
9
imes OP @andyskaura 3#
打~起~来~了~ |
![]() |
10
imes OP @superrichman 7#
openlist 有 musl 版本,兼容性问题倒是不大。 |
11
pdone 10 天前
docker 迁移特方便 持久卷 + compose.yml 复制走 随便找个架构相同的机器就又跑起来了 喜欢折腾 nas 的朋友太喜欢了
|
![]() |
12
wunonglin PRO 容器化的好处太多了,真要性能不好加机子就行了
|
![]() |
13
wunonglin PRO 之前都有个 macos 的 docker 镜像可以跑。是真的 Mac OS 。
好像也有 Windows 的 |
![]() |
14
chanChristin PRO 因为 docker 一个配置文件就能跑起来了,我要换一台机器的话把配置文件移过去就可以了
但是其他的安装不行,一会配置这个地方,一会配置另一个地方,而且搞错了还不知道怎么回退,我不太了解 Linux 系统,这种对我来说是最方便的 |
15
Dorathea 10 天前
@andyskaura
当然可以, 把数据和配置目录映射到主机上就行 |
![]() |
16
defunct9 10 天前
完全没必要
|
![]() |
17
Reficul 10 天前
> 但是我在实际接触中发现,为了 MySQL/Nginx 性能,实际上 docker 部署的没几个。
首先这个前提就不成立,MySQL / Nginx 跑容器里的海了去了。 其次为什么有性能问题,有多少损失? |
![]() |
18
NoobNoob030 10 天前
喜欢简单一把梭,全部都用 docker 减少心智负担
|
![]() |
19
evill 10 天前
额,不懂为什么会有觉得 docker 会丢失性能,以及不能部署数据库
docker 只是把 namespace 和 cgroup 集合起来对外提供统一功能而已,实际上还是 container 在部署层面上 docker 与 systemd 、pm2 甚至 nohup 并没有区别,只是托管进程 |
![]() |
20
oneisall8955 PRO 统一规范 个人部署 尽量 all in docker ,portainer 等面板上去拉镜像就运行起来了,持久化只需要挂在
不用 ssh 上去编写 systemd service ,不用 apt install ,不用编译。。。 |
![]() |
21
imes OP @evill 19#
I/O 啊,docker 用的 overlay2 、aufs 等,再加上虚拟网络,负载一高就撑不住了。虽然可以 --volume 挂载到宿主机目录以及 --network host 共享宿主机网络栈,但也治标不治本。比如 json-file 日志 在 overlay2 层写入放大,10%的损失是很正常的。 |
23
jonsmith 10 天前 via Android
all in docker 省事,配合 docker compose 部署、备份迁移都方便。
|
![]() |
24
evill 10 天前
额,公司大规模情况下,怎么会这么裸奔呢?
网络不是应该结合 LB 等,做成 overlay 形成一个服务网络 日志都是直接放主机? 难道不是直接收集走 |
![]() |
25
RanKaede 10 天前
方便,直接装系统里就觉得不干净了,尤其是卸载后感觉会有各种不知道的配置项残留
|
![]() |
28
zhhqiang 10 天前
docker 服务起多了,小水管顶不住。
|
![]() |
29
gzldc 10 天前
@andyskaura 豆腐脑我喝咸的
|
30
fuzzsh 10 天前 via Android
@evill docker 的 container 正是使用虚拟化…… guest 对比 host 必然是有性能损失……
当然现在大多数商用服务撑不住就升配,没什么好对比 |
31
fuzzsh 10 天前 via Android
OP 用开源项目比较并不恰当,因为你不能预测什么时候会来个牛鬼蛇神开个 issue 骂你,即使做个一键安装也要侍候好某些还在坚持用 10 年前的“稳定”Linux 发行版的牛鬼蛇神
企业大概前后端分离+微服务架构,业务方向调整也快,上线可能隔 3/5 月就砍了,安装/扩容拉起容器就完事,也不用花时间开单等运维调试上线 |
![]() |
32
oneisall8955 PRO @zhhqiang 小鸡内存不够吧
|
![]() |
33
evill 10 天前
@fuzzsh 额,docker 和虚化有什么关系呢?
docker 是共享宿主机内核,只有用户空间隔离。唯一的虚化是 OS-level ,但这也是一个隔离而已 这里虚拟机没有关系,也没有什么 guest ,这些都是虚拟机的概念 |
![]() |
34
Tink PRO 主要是小白多,docker 一行命令就行了,不用去靠谱什么配置文件参数等等一堆东西
|
![]() |
35
Tink PRO 靠谱 -> 考虑
|
![]() |
36
goodryb 10 天前
记得最早推 docker 的一大优势,就是屏蔽底层操作系统,解决各种依赖问题
性能我觉得肯定是有损失的,但是损失多少,能否接受是另外一回事情 |
![]() |
38
shenlanAZ 10 天前
#10 不是所有系统都用 systemd 的,也不是所有程序都老老实实的往某个目录下写 data 。
容器化就能很好的屏蔽这些差异( not only Docker ),并且预期可控。 |
![]() |
39
phrack 10 天前
docker 方便啊,完全不用操心依赖,本地的 docker 能跑,远程但凡有个 docker 都能跑
|
40
hwdq0012 10 天前
windows 也在 推 winRT 隔离 烦死了,我就想生成绿色软件包
|
41
twl007 10 天前 via iPhone
维护一个 systemd 的配置已经是一个比写 Dockerfile 心智负担大得多的东西了
还没提你要维护管理包构建/发布/安装/更新 与之相配套的还得有 Ansible/Chief/Puppet 说真的我不知道哪里简单 |
42
FrankAdler 10 天前 via Android
我觉得做大的好处就是,不会一堆小白问你安装失败的问题了,dockerfile 写的足够好,一键执行一定成功
当然为了性能和空间我自己会找二进制文件甚至从 image 里扣出来直接运行 |
43
kingcanfish 10 天前
就按你的理论 “会损失 10%的性能” 和 早 10 分钟下班
--- 我选择早十分钟下班 |
![]() |
44
bao3 10 天前
docker 并没有多少性能损失,它又不是虚拟机,它只是容器而已。
用 docker 的人不会在意它在内核上的性能损失,因为微乎其微,你要是在意这个,那你别用就行了。 所以对你来说,并没有选择难题。 |
![]() |
45
BenHunDun 10 天前
感觉除非性能敏感和自身资源受限的情况. docker 应该是最方便的. 特别像个人使用的一些服务, 常常都不会有这些限制.
原先写一些关于中间件 zk, kafka 的代码, 中间件都是宿主机启动, 现在没有特殊的都会优先考虑 docker. 包括一些集群启动什么的也方便. 然后还有一些尝鲜式的有 docker 先起来看看感觉怎么样. |
46
momo2789 10 天前
😓为什么还有人说 docker 会有性能损失,是没看过 docker 的实现是吧。
Docker 是基于 namespace + cgroups ,本质还是宿主机内核,所以 CPU 和内存开销几乎可以忽略。非要扣性能就挂 docker volume 网络走 host 。 |
![]() |
47
cwcc 10 天前
容器如果用作隔离环境我是赞成的,比虚拟机轻量,同时也好操作。
但如果用 docker 给依赖地狱遮羞,那我不赞成,这明明是妥协,如果能干净地处理依赖或者环境配置,那肯定不用 docker 更好。 |
![]() |
48
princeofwales 7 天前 via iPhone
一个 docker 里只部署了一个 mysql 容器,是个内网应用部署好之后 3 年不需要改动一次的那种,硬要放到容器里把各个目录和端口映射出来使用,我只能说闲得蛋疼,把软件供应商 k 了一顿
|