Docker 的工作原理——构建、分发、运行 · 思维导图
Docker 的工作原理——构建、分发、运行. 可编辑的思维导图,以彩色分支、子主题和曲线连接呈现想法。 曲线表示联系;只有方向重要时才使用箭头。
Docker 把应用和它运行所需的一切打包成一个镜像,再把镜像作为容器运行——一个隔离的进程,在任何装有 Docker 引擎的机器上表现完全一致。
Docker 的工作原理——构建、分发、运行 · 思维导图
The interactive MindMap canvas for this explanation — every lane, row and arrow above is a real QueryChart diagram you can open and edit.
如何阅读这张思维导图
- 从中心主题开始,沿着彩色分支探索相关想法。
- 曲线表示联系;只有方向重要时才使用箭头。
Describe & build
这一分支汇集 “The Dockerfile is a recipe: base image, dependencies, files to copy, the command to run. It makes the build reproducible — the same file produces the same image everywhere.”, “docker build packages the app and its dependencies”.
Image
这一分支汇集 “An image is the packaging artifact: everything the app needs to run, frozen in read-only layers. It never changes once built.”, “Image is pushed to a registry, or pulled from one”.
Container
这一分支汇集 “docker run starts a container from the image”, “Namespaces isolate what the process can see (its own file system, network, processes); cgroups limit what it can use (CPU, memory). This is how many containers run on one host without fighting.”.
Host kernel
这一分支汇集 “Container shares the host kernel but has its own file system”.
Portable app
这一分支汇集 “Because the container carries its own runtime, libraries and configuration, “works on my machine” stops being a real failure mode.”.
跨分支联系
镜像是只读快照;容器是它跑起来的一个实例。
容器共享宿主机内核,用命名空间伪造出隔离——所以它几秒钟就能启动,而虚拟机要几分钟。
cgroups 限制容器能消耗的资源,一个吵闹的邻居就饿不死整台主机。
镜像的不可变性,正是“到哪儿跑都一样”成立的原因。
Docker 提供打包方式和运行时;Kubernetes 这类编排系统负责跨多台主机管理大量容器。
Key relationships and takeaways
- 镜像是只读快照;容器是它跑起来的一个实例。
- 容器共享宿主机内核,用命名空间伪造出隔离——所以它几秒钟就能启动,而虚拟机要几分钟。
- cgroups 限制容器能消耗的资源,一个吵闹的邻居就饿不死整台主机。
- 镜像的不可变性,正是“到哪儿跑都一样”成立的原因。
- Docker 提供打包方式和运行时;Kubernetes 这类编排系统负责跨多台主机管理大量容器。
When to use this visual
- 向开发者解释 Docker 为什么能工作,以及容器与虚拟机有什么不同。
- 在团队写下第一个 Dockerfile 之前,用构建—分发—运行这套模型带他们上手。
- 为一场关于环境漂移的讨论打底——为什么“在我机器上是好的”不再站得住脚。
运作方式
调整中心主题
根据项目或课程修改中心主题的名称。
扩展分支
编辑想法并添加示例或注释。
连接相关想法
绘制跨分支连接;只有方向重要时才使用箭头。
常见问题
容器和虚拟机有什么区别?
虚拟机虚拟的是硬件:它携带一个完整的操作系统,一切都由虚拟机管理程序(hypervisor)居中调度,所以它笨重、启动慢。容器虚拟的是操作系统:它共享宿主机内核,用命名空间做隔离,用 cgroups 做资源限制。这就是容器能在几秒内启动、并且轻量得多的原因——代价是同一台主机上的所有容器共用这台主机的内核。
镜像和容器分别是什么?
镜像是静态制品——由 Dockerfile 构建出来的、应用及其依赖的只读快照。容器是这个镜像动起来的样子:一个运行中的进程,上面叠了一层可写层。你只构建一次镜像,却可以从它启动上千个容器,彼此互相隔离。
Docker 怎么隔离容器?
靠两个 Linux 内核特性。命名空间让每个容器拥有自己的一套系统视图——自己的文件系统、网络栈、进程表和用户 id——于是它看起来就像一台独立的机器。cgroups(控制组)限制并计量资源,给一个容器能消耗的 CPU、内存和 I/O 设上限,这样它就无法把邻居拖垮。
Docker 为什么让应用可移植?
因为镜像把应用连同它的运行时、库和配置一起打包——除了内核之外的一切。只要有 Docker 引擎在,镜像就以同样的方式运行,于是开发者的笔记本、CI runner 和生产服务器之间的差距,就缩小到那些被刻意留在镜像之外的配置。
在 QueryChart 中编辑此思维导图
在可编辑画布中打开思维导图。移动想法、添加分支并绘制连接。