当前位置: 首页 > news >正文

【docker】docker技术介绍

大家好,最近在学习 Docker 时,我被一个问题困扰:

Docker 里的容器,到底是不是一个极简的虚拟机?它里面的 Linux 内核又是哪来的?

Docker 容器本质上是一组被隔离的 Linux 进程(进程树),它共享宿主机的 Linux 内核,并不是一台独立的虚拟机。

一、背景:环境配置的难题

软件开发中,环境配置是最令人头疼的问题之一。要让软件顺利运行需要操作系统的正确配置,以及所需库与组件的完整安装。以 Python 应用为例,目标机器需要匹配版本的解释器、完整的依赖包,乃至手动配置的环境变量——任何一环缺失都可能导致失败。开发者那句口头禅"在我机器上是好的"(It works on my machine),道尽了这种困境。每换一台机器就要重走一遍配置流程,耗时耗力。于是人们开始思考:能否让软件直接携带自己的运行环境,安装时将原始环境原封不动地复制过来?


二、虚拟机

虚拟机(Virtual Machine)是“在一台电脑上运行另一台完整电脑”这一思路的实现。它通过 Hypervisor(如 KVM、VMware、Hyper-V)在一套操作系统(宿主机)内,再运行一套完整的操作系统(客户机)。应用程序运行在虚拟机的操作系统里,对此几乎毫无感知,就像运行在一台真正的物理电脑上一样。

但虚拟机有三个明显缺陷:

  • 资源占用高,即便应用只用 1MB 内存,虚拟机本身就需要数百 MB;
  • 冗余开销大,系统级操作(如用户登录)无法省略;
  • 启动慢,相当于每次都要重启一套完整的操作系统。

三、容器与虚拟机的区别

为了解决虚拟机的这些痛点,Linux 容器技术诞生了。它和虚拟机的思路完全不同。

核心区别可以用下面这张表快速看懂:

3.1 容器与虚拟机的区别
项目Docker 容器传统虚拟机(VM)
本质一组被隔离的进程一台完整的虚拟电脑
有没有独立内核没有,共享宿主机内核有自己独立的操作系统和内核
占用资源极低(MB 级别)较高(GB 级别)
启动速度几秒钟十几秒到几分钟
隔离程度中等(内核级隔离)很强(硬件级虚拟化)
3.2 Linux 内核到底是怎么回事?
  • 在原生 Linux 系统上: 容器直接使用你电脑当前的 Linux 内核(用 uname -a 可以看到)。 Docker 通过 Linux 内核的两个重要技术实现隔离:

    • Namespaces(命名空间):让容器“看不见”外面其他进程、文件、网络。
    • Cgroups:限制容器能使用的 CPU、内存等资源。

    所以容器启动超快,因为它不用再加载一套内核。

  • 在 Windows 系统上(最容易搞混的地方): Windows 自己没有 Linux 内核,所以 Docker Desktop 会自动启用WSL 2(Windows Subsystem for Linux 2)。 WSL 2 会在后台启动一个轻量级的 Linux 虚拟机,里面运行的是 Microsoft 官方维护的 Linux 内核。 你创建的所有 Docker 容器,其实都跑在这个 WSL 2 的 Linux VM 里面,共享这个 VM 的内核

    层级关系是这样的:

    Windows 电脑 └── WSL 2 轻量 Linux 虚拟机(含真实 Linux 内核) └── 你的各个 Docker 容器(被隔离的进程)
  • ❌ “容器里有一个极简内核” —— 错!内核永远是宿主机(或 WSL2)的。
  • ❌ “容器就是轻量虚拟机” —— 不够准确,容器比虚拟机轻量得多,原理也完全不同。
  • ✅ 正确理解:容器 = 共享内核 + 被隔离的用户空间 + 一组进程

四、Linux 容器技术的核心概念

Linux 容器并不是一个新发明的技术,而是在 Linux 内核中早已存在的两个强大功能的组合:

  1. Namespaces(命名空间)—— 实现“隔离视野”
    • PID namespace:容器内看到的进程 ID 从 1 开始,和宿主机进程完全隔离。
    • Mount namespace:容器有自己独立的根文件系统(rootfs)。
    • Network namespace:独立的网络栈、IP、端口等。
    • UTS、IPC、User 等其他命名空间...
  2. Cgroups(Control Groups)—— 实现“资源限制”
    • 控制容器能使用的 CPU、内存、磁盘 IO、网络带宽等。
    • 防止某个容器把整个服务器资源耗尽。

Docker 等工具(如 containerd、runc)只是把这些内核特性封装成易用的命令和镜像格式,让开发者可以轻松创建和管理容器。

http://www.jsqmd.com/news/985724/

相关文章:

  • 鸿蒙新特性——TimePicker 与 TextClock 组件深度解析
  • AI时代普通人如何玩转企业级开发V2.0
  • 2026西安黄金回收避雷红黑榜:内行人深扒套路,怎么选才不踩坑? - 西安闲转记
  • vue3路由的replace属性(四)
  • AI技能平台横向盘点:觅游、携程、飞猪等5家拆解
  • 国内正规考研培训机构排行:核心服务维度实测对比 - 奔跑123
  • 2026武汉商城小程序开发制作公司哪家好? - 奔跑123
  • OpenAI秘密递交IPO申请,股市上市进程提速
  • 蚌埠市2026最新黄金回收+白银回收+铂金回收店铺门店权威榜单TOP1~5家推荐地址电话 - 三大殿
  • LPC3141/3143嵌入式开发实战:ARM9核心、USB OTG与安全启动解析
  • Dify 智能视频生成工作流:从脚本到视频的全自动化实现
  • 2026年国内正规考研培训机构实力排行一览 - 奔跑123
  • 营口市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 三大殿
  • 2026-6-10分享
  • 专业的水洗设备哪家好
  • 福州市2026最新黄金回收+白银回收+铂金回收店铺门店权威榜单TOP1~5家推荐地址电话 - 三大殿
  • 一楼潮湿背光,窗帘选什么面料耐潮不发霉
  • Eclipse 透视图(Perspective)
  • 吃透 Pro*C 国产化:从环境适配到业务落地全流程
  • 2026招聘求职类小程序开发制作公司有哪些? - 奔跑123
  • Qt 高阶 08|Qt 插件开发 接口设计、插件编写、动态加载插件
  • 菏泽市2026最新黄金回收+白银回收+铂金回收店铺门店权威榜单TOP1~5家推荐地址电话 - 三大殿
  • 百度内部启动青木、风雷两大计划,百度大动作该咋看?
  • 肇庆市2026年本地上门黄金回收门店指南 彩金+铂金+金条+白银回收门店联系方式推荐 - 三大殿
  • 网络测试仪RENIX实战:从RAW流发送到Wireshark分析,一条龙排错指南
  • Java全栈工程师面试实录:从基础到高阶的全面解析
  • 别再手动调参了!用PyTorch Lightning的ModelCheckpoint和EarlyStopping解放你的双手
  • metadef元数据定义框架深度解读:自定义算子开发与昇腾NPU扩展完全指南
  • Mac剪贴板革命:灵剪Cliperx重塑高效工作流
  • 关于占卜到一定境界的问题