当前位置: 首页 > 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.zskr.cn/news/1497467.html

相关文章:

  • vue3路由的replace属性(四)
  • AI技能平台横向盘点:觅游、携程、飞猪等5家拆解
  • OpenAI秘密递交IPO申请,股市上市进程提速
  • Dify 智能视频生成工作流:从脚本到视频的全自动化实现
  • 2026-6-10分享
  • 一楼潮湿背光,窗帘选什么面料耐潮不发霉
  • 福州市2026最新黄金回收+白银回收+铂金回收店铺门店权威榜单TOP1~5家推荐地址电话 - 三大殿
  • Java全栈工程师面试实录:从基础到高阶的全面解析
  • 【AgentScope Java新手村系列】(1)框架简介与环境搭建
  • 从开发视角看安全:我的Spring Boot项目是如何一步步防御XSS、CSRF和越权的?
  • 苏州市新道动力设备科技有限公司 - 火电厂 除盐水冷却装置 最好 品牌 定制
  • 避坑指南:用Docker在Ubuntu上快速部署Mosquitto,告别环境依赖烦恼
  • 从棋盘格到人脸:用OpenCV Sobel算子实战图像边缘检测,对比dx,dy不同组合的效果差异
  • 7th grade [math] (2026.06.09)
  • 新乡朗格+积家手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • 避坑指南:PixHawk飞控接Benewake TF02-i-CAN雷达时,90%的人会忽略的CAN总线设置细节
  • 铜仁卡地亚+GP芝柏表手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • 别再只调API了!深入理解风格迁移:从Gram矩阵到内容/风格分离的数学原理与调参实战
  • Rimworld Mod制作避坑指南:从ThingDef命名到XML结构,新手必看的Defs文件核心要点
  • 基于深度学习YOLOv11的家具识别检测系统(YOLOv11+YOLO数据集+UI界面+登录注册界面+Python项目源码+模型)
  • 郑州卡地亚+GP芝柏表手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • 数据契约驱动的机器学习Pipeline:重构数据科学家与工程师的协作范式
  • 从唐诗到商品推荐:我用Neo4j Desktop给电商数据做了个“知识图谱”实验
  • 深入S32K Bootloader的Flash操作:为什么你的CAN升级程序会写砖?避坑指南来了
  • 别再求人了!手把手教你用CMW500和QRCT搞定WiFi定频测试(高通平台保姆级教程)
  • 鸿蒙开发实战:金额大写转换工具
  • 摸鱼神器,这班现在爽了!
  • STM32F105到GD32F305的CAN驱动移植实战:我踩过的五个坑与填坑指南
  • 告别FTP客户端!用PowerShell的PSFTP模块实现自动化文件传输(含Azure部署实战)
  • 避开这5个坑,你的2D视觉机器人手眼标定精度能翻倍 | 基于棋盘格的实战经验分享