惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

有赞技术团队
有赞技术团队
M
MIT News - Artificial intelligence
Hugging Face - Blog
Hugging Face - Blog
博客园 - 聂微东
量子位
S
SegmentFault 最新的问题
V
Visual Studio Blog
博客园 - 【当耐特】
Apple Machine Learning Research
Apple Machine Learning Research
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
小众软件
小众软件
Stack Overflow Blog
Stack Overflow Blog
Vercel News
Vercel News
D
Docker
J
Java Code Geeks
博客园 - 三生石上(FineUI控件)
博客园 - Franky
Recent Announcements
Recent Announcements
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
MongoDB | Blog
MongoDB | Blog
D
DataBreaches.Net
Y
Y Combinator Blog
云风的 BLOG
云风的 BLOG
V
V2EX

博客园 - 左直拳

在centos上部署gitea服务器 我的2025 利用wvp-gb28181-pro国标级联实现上级观看下级摄像头 将c++程序部署到docker 安装linux时的存储设置 使用Mobile Atlas Creator 2.0获取离线地图 利用SRS拉取摄像头辅码流实现浏览器展示多路摄像头预览功能 自签名证书需要手动确认风险导致nginx转发无效问题 前端vue3+后端spring boot导出数据 c++程序示例:多线程下的实例计数器 linux下变更mysql的数据文件目录 c++项目使用drogon框架提供Resful API在CPU ARM架构下崩溃问题 编写c++程序分别在x86和arm架构的ubuntu下访问CAN 接口设备 时区问题导致java程序查询无结果 ubuntu 20.04挂载固态硬盘 项目绩效域 c++中构造对象实例的两种方式及其返回值 c++中“&”符号代表引用还是取内存地址? 高级项目管理
程序跑在docker容器里会有性能瓶颈吗?
左直拳 · 2025-08-21 · via 博客园 - 左直拳

一直以来我都担心,程序跑在docker里,安装和管理方便是方便,但会不会有性能瓶颈呢?你比如说服务器的CPU很强,好多核,内存也很大,好多G,但程序跑在docker里,会不会只能分得一点点,进而受限?

AI说,不会。除非我们在创建容器得时候,特别指定。

简单来说,默认情况下,Docker 容器可以充分利用宿主机的 CPU 和内存资源,不会 “只能分得一点点”。这是因为 Docker 的资源管理机制是 “按需分配” 而非 “固定分配”,除非手动做了资源限制,否则容器会根据程序需求动态使用宿主机的硬件资源。

docker容器只是进程级别的隔离,它共享宿主机的资源,这一点与虚拟机不同。虚拟机是完全隔离,性能上限是分配的资源,并且虚拟机的开销比较大,资源损耗比较多,会有性能损失。

详述如下:

1、CPU 资源

默认情况下,容器没有 CPU 使用上限,会和宿主机上的其他进程(包括原生进程)公平竞争 CPU 时间片。如果宿主机 CPU 很强(比如多核、高频),容器内的程序可以像原生程序一样利用这些核心和性能。
例如:宿主机有 16 核 CPU,容器内的程序如果是多线程的,完全可以占用所有 16 核的资源(只要程序本身支持)。

2、内存资源

默认情况下,容器可以使用宿主机的所有空闲内存(除非宿主机内存耗尽,此时会触发 OOM 机制,可能优先杀死容器进程)。
例如:宿主机有 128GB 内存,容器内的程序如果需要大量内存(比如处理大文件、缓存数据),可以正常使用到接近 128GB(只要其他进程不占用)。

3、什么情况下会 “分得很少”?

只有主动通过 Docker 参数限制了容器的资源使用时,才会出现这种情况。例如:

#限制容器最多使用1核CPU和1GB内存
docker run -d --cpus=1 -m 1g ...

这种情况下,即使宿主机有更强的硬件,容器也会被 “卡” 在设置的上限内。

4、容器没有多少性能损耗

将程序运行在 Docker 容器中,通常不会显著影响性能,也不会明显限制宿主机硬件优势的发挥。Docker 的底层技术(如 Linux Namespaces、Control Groups 等)设计目标是实现轻量级隔离,而非虚拟化,这与传统虚拟机(如 VMware)有本质区别,因此性能损耗非常低。

5、总结

默认配置:容器可以充分利用宿主机的 CPU 和内存,和原生程序几乎无差异,不会 “浪费” 硬件性能。
手动限制:如果出于资源隔离的目的(比如防止某个程序占满资源),可以通过–cpus、-m等参数限制,但这是人为配置,而非 Docker 的默认行为。