b0207191 发表于 2022-4-20 19:17

docker各种问题贴

本帖最后由 b0207191 于 2022-7-27 23:46 编辑

现在容器很时髦,但是不知道隔离导致性能影响多大,有没有这方面的介绍

参考链接
http压测nginx在Docker中的性能损失 - 灰信网(软件开发博客聚合) (freesion.com)

Docker部署服务,最大的性能损失在于网络,docker-proxy转发性能表现一般。但实际一般项目也不会达到这种水平的负载量,宿主机器测试时,本地网卡lo的流量已达11000Mbps,超过万兆网口的物理限制。其次性能损失在于文件系统IO
又比如,docker好像可以识别usb设备,那么usb访问速度影响多大呢

tsubasa9 发表于 2022-4-20 19:29

没啥影响,容器本质是内核分配的不同命名空间

superlattice 发表于 2022-4-20 21:33

docker网络大概两种,一种是宿主机的IP+端口绑到容器里的一个端口,相当于NAT,就是文中那种情况,另一种是network namespace里的一对veth,那样网络性能等于linux下bridge(网桥/软交换)性能,瓶颈会小很多。

拜拜 发表于 2022-4-20 21:42

我记得docker比v虚拟机性能好很多

—— 来自 Hisense HNR320T, Android 10上的 S1Next-鹅版 v2.5.3

hanqi7012 发表于 2022-4-20 21:54

docker真好用

我挂pt的话把transmission放里面用起来没问题吧

最近下载机打算把功能全放到docker里面



neotaburiss 发表于 2022-4-20 21:57

nextcloud这种感觉原生的比docker版本性能好店,不知道是我错觉还是程序设计原因,我这里普遍反应之前的docker版本的nextcloud卡顿

abcbuzhiming 发表于 2022-4-20 22:37

samfs 发表于 2022-4-20 22:43

本帖最后由 samfs 于 2022-6-17 09:39 编辑

weakiwi 发表于 2022-4-20 23:44

如楼上说所,docker用的是cgroup,systemd也用cgroup,不太会有太大的差异。更多影响还是来自于docker自己实现的组件
docker-proxy转发性能表现一般。-> 那就不要用默认网络模式, 用host mode就行。

lvcha 发表于 2022-4-21 06:40

refo2613 发表于 2022-4-21 07:50

Hieda 发表于 2022-4-21 07:57

走的cgroups+命名空间隔离,影响很小很小
当然安全性也基本没有保证

qqdragon 发表于 2022-4-21 11:33

host嘛你真要的纠结网络性能的话   

Senni 发表于 2022-4-21 11:58

docker快要过时了

b0207191 发表于 2022-4-21 21:57

Senni 发表于 2022-4-21 11:58
docker快要过时了

啥?那取代它的是啥?   

土路生優里 发表于 2022-4-21 23:29

过时是说k8s往containerd上发展吧
自己本地起测试用docker compose还是挺方便的,生产还是k8s算球,当个yaml boy少操心就是最好的

—— 来自 OnePlus KB2005, Android 12上的 S1Next-鹅版 v2.5.3

win8 发表于 2022-4-22 00:13

不谈工作,纯自用,Windows跑docker挺拉的,有没有别的替代

satan023 发表于 2022-4-22 00:31

win8 发表于 2022-4-22 00:13
不谈工作,纯自用,Windows跑docker挺拉的,有没有别的替代

用linux跑

土路生優里 发表于 2022-4-22 00:46

win8 发表于 2022-4-22 00:13
不谈工作,纯自用,Windows跑docker挺拉的,有没有别的替代

wsl试试呗,docker desktop支持wsl2挺久了,我自己用下来没啥问题, 在wsl里面开发和跑容器测试都挺方便

—— 来自 OnePlus KB2005, Android 12上的 S1Next-鹅版 v2.5.3

migros 发表于 2022-4-22 01:25

gpu docker大概是host的92%——这个数据跟硬件配置和系统和驱动可能都有关系

网络的话,docker bridge就是烂啊没啥说的

—— 来自 samsung SM-N9860, Android 12上的 S1Next-鹅版 v2.5.2-play

QShen 发表于 2022-4-22 09:55

win8 发表于 2022-4-22 00:13
不谈工作,纯自用,Windows跑docker挺拉的,有没有别的替代

你是指跑Windows container还是Linux container?
默认情况下都是在hyper-v里面跑一个虚拟机

如果是Windows container可以试一下在Win server下面的Process isolate

tsubasa9 发表于 2022-4-22 10:04

win8 发表于 2022-4-22 00:13
不谈工作,纯自用,Windows跑docker挺拉的,有没有别的替代

直接用原生Linux
win的docker本质是跑在虚拟机里的Linux的docker
而且无论wsl1还是2,io性能都很拉

macos 发表于 2022-4-22 22:40

QShen 发表于 2022-4-22 09:55
你是指跑Windows container还是Linux container?
默认情况下都是在hyper-v里面跑一个虚拟机


windows的容器好像只有个人版才运行正常,而且俺看不出他能干啥

QShen 发表于 2022-4-22 22:52

macos 发表于 2022-4-22 22:40
windows的容器好像只有个人版才运行正常,而且俺看不出他能干啥

我能想到的就是在CI服务器里面有些用处吧,测试代码对不同MSVC版本的兼容性,比在同一台机器上装好几个环境好管理一些,同时又比虚拟机稍微方便一点。但是缺点也非常明显,image太大了,一个完整的编译环境十几G了。

听说携程那边曾经把Windows container用到过生产环境做服务,不知道现在他们还用不用

九八式衍射弹 发表于 2022-4-25 16:18

docker的overhead非常低,工业界都普遍使用了,你就别操心性能问题了

refo2613 发表于 2022-4-25 19:26

结夜野棠. 发表于 2022-4-25 19:30

Senni 发表于 2022-4-21 11:58
docker快要过时了

podman 或者 nerdctrl

refo2613 发表于 2022-4-25 21:10

b0207191 发表于 2022-5-2 21:38

本帖最后由 b0207191 于 2022-5-2 22:28 编辑

感觉像java,类似点,jar和os中间隔了一个java vm,这样jar在各种系统上可以不用重编译直接跑, docker app和os中间隔了一个docer,这样docker app不用重新编译可以直接跑



另外发现一个问题,docker pull busybox,docker pull centos都是缩水版的,连gcc都没有。。。。

世界的膀胱者 发表于 2022-5-3 00:24

b0207191 发表于 2022-5-2 21:38
感觉像java,类似点,jar和os中间隔了一个java vm,这样jar在各种系统上可以不用重编译直接跑, docker a ...

在Linux上docker app和系统之间不需要用到虚拟化,但是MacOS版和Windows版docker需要启动一个Linux虚拟机来运行docker app。然后另一个docker在macos/Windows上性能不佳的原因(我感觉这个应该是docker在非Linux系统上慢的主要原因)是为了在macos和Windows上提供和Linux相似的体验,docker和操作系统之间做了一个文件系统的抽象层。然而这个抽象层性能说不上好,导致挂载到docker application上的文件io速度相当之慢。

对于你的第二个问题,docker有一个模块化的思路。你要什么应用就起一个新容器来跑这个应用。比方说如果你需要一个用来跑gcc的app和一个用来跑多媒体服务器的app,你不该把gcc和多媒体服务器塞到同一个容器里,而是应该分别起一个gcc的容器和一个多媒体服务器。
做法是你可以用官方提供centos(或者其他任何发行版)的镜像,在这个镜像的基础上分别制作一个带gcc的容器和一个带多媒体服务器的容器。

我是这么理解docker的,有错误的地方麻烦指出来

— from samsung SM-G9910, Android 12 of S1 Next Goose v2.5.2-play

phorcys02 发表于 2022-5-3 01:24

除了网络部分基本没啥太大性能损失,网络也有各种损失低的轮子...

当然如果你的应用大量都是需要跑满千兆网万兆网的,那docker确实得不偿失

風舞雪 发表于 2022-5-3 02:58

其实vm损失也不大 kvm大概20%左右 说实话
中间还有个micro kernel vm
类似kata contianer或者firecracker或者gvisor
我是愿意用损失来换简单部署的 毕竟机器可以加 全是硬件累死

大沢佑香 发表于 2022-5-3 14:16

b0207191 发表于 2022-5-2 21:38
感觉像java,类似点,jar和os中间隔了一个java vm,这样jar在各种系统上可以不用重编译直接跑, docker a ...

要这些包你可以自己搞image啊,不要用官方做好的那些最基础【纯净】的image
这些image基本都是为了给你做base image用的

另外愿意用标准化换性能+1,公司生产环境用云原生pod+流水线,基本就是push完代码点一下部署就行了,不要太舒服

tsubasa9 发表于 2022-5-3 14:33

b0207191 发表于 2022-5-2 21:38
感觉像java,类似点,jar和os中间隔了一个java vm,这样jar在各种系统上可以不用重编译直接跑, docker a ...

差远了,jvm是应用层虚拟机,把bytecode解释运行成本机native code,当然现在有jit了性能并不会损失太多
docker不存在任何转译,就是原始native code
实际上docker更像appimage,flatpak,snap这种程序和库的隔离手段(docker还多了资源隔离),而不是虚拟机或模拟器

b0207191 发表于 2022-5-3 21:06

tsubasa9 发表于 2022-5-3 14:33
差远了,jvm是应用层虚拟机,把bytecode解释运行成本机native code,当然现在有jit了性能并不会损失太多
...

有种说法,docker就是app,而且还号称跨平台,那么为什么没有一统天下,代替windows上的exe,Android上的apk,linux上的elf,so,

tsubasa9 发表于 2022-5-3 21:10

谁告诉你跨平台的?
docker只是Linux容器技术的一种,还是快入土的那个

weakiwi 发表于 2022-5-3 22:20

b0207191 发表于 2022-5-3 21:06
有种说法,docker就是app,而且还号称跨平台,那么为什么没有一统天下,代替windows上的exe,Android上的 ...

docker没有跨平台吧,我记得docker是基于namespace的,是个linux内核的功能。mac行不行不知道,win是肯定不行的,之前win上的docker实际上还是跑在hyper-v里面的。

b0207191 发表于 2022-5-3 22:24

weakiwi 发表于 2022-5-3 22:20
docker没有跨平台吧,我记得docker是基于namespace的,是个linux内核的功能。mac行不行不知道,win是肯定 ...

嗯,说错了,应该是跨不同linux的发行版,

satan023 发表于 2022-5-5 09:46

tsubasa9 发表于 2022-5-3 21:10
谁告诉你跨平台的?
docker只是Linux容器技术的一种,还是快入土的那个

现在最流行的是啥。k8s吗?

tsubasa9 发表于 2022-5-5 09:58

weakiwi 发表于 2022-5-3 22:20
docker没有跨平台吧,我记得docker是基于namespace的,是个linux内核的功能。mac行不行不知道,win是肯定 ...

bsd有自己的一套类似的玩意儿,叫做jail
ios的jailbreak也是出自这个概念
页: [1] 2
查看完整版本: docker各种问题贴