Docker是云原生的核心,掌握好Docker容器更有利于掌握好Docker@mikechen
Docker
Docker最初是由一家名为dotCloud的公司开发的,该公司后来更名为Docker Inc。
Docker通过提供一个简单易用的工具和平台,极大地简化了容器的创建、部署和管理。
尽管Linux容器技术早已存在,但直到2013年,Docker的出现才真正使其变得普及。
在 2013 年的 PyCon 大会 上,Solomon 发布了 Docker 项目的第一个版本,并宣布开源。
一夜之间,Docker 引爆了技术圈:
-
开发者用它来“打包运行环境”;
-
运维用它来“一键部署”;
-
大公司纷纷拥抱(Google、Red Hat、AWS、Microsoft…)。
这标志着容器从“底层技术”转变为“开发部署标准”。
Docker容器原理
Docker的核心在于其三个关键组件:镜像(Images)、容器(Containers)和仓库。
Docker容器原理,如下图所示:
Docker镜像
Docker 镜像是一个只读模板,用于创建 Docker 容器。
它包含了应用运行所需的所有内容:操作系统环境、程序文件、库、配置等。
镜像基于 UnionFS(联合文件系统) 构建,由多层叠加组成,每一层代表一次变更:
+-------------------------+ ← 应用层(如 Flask 程序) | app.py, requirements.txt| +-------------------------+ ← 依赖层(pip install flask) | Python 环境 | +-------------------------+ ← 基础层(Ubuntu / Alpine) | 操作系统基础环境 | +-------------------------+
这些层彼此独立、可复用,从而提高镜像构建效率。
Docker容器
容器是镜像运行后的实例,是一个隔离的进程环境,拥有自己的文件系统、网络、PID 空间等,但共享宿主机内核。
Docker 在运行容器时会做以下几件事:
-
读取镜像并加载只读层;
-
创建一个新的可写层(容器层);
-
启动容器进程(PID=1);
-
设置命名空间(Namespace)和资源限制(Cgroups)。
容器提供了一个隔离的运行环境,使得应用程序可以在其中独立运行,互不干扰。
Docker仓库
仓库是集中存储和分发镜像的地方,就像 GitHub 是代码的仓库,Docker Hub 是镜像的仓库。
三者关系,如下:
┌────────────┐ │ 镜像 Image│ ← 构建于 Dockerfile └────┬───────┘ │ docker run ↓ ┌───────┴───────┐ │ 容器 Container│ ← 镜像的运行态 + 可写层 └───────┬───────┘ │ docker commit/push ↓ ┌───────┴───────┐ │ 仓库 Registry │ ← 存储与共享镜像的平台 └───────────────┘
镜像是构建基础,容器是运行实例,仓库是镜像来源。
三者构成了 Docker 技术的完整闭环,支撑起整个容器生态系统。
mikechen
mikechen睿哥,10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!

后台回复【架构】即可获取《阿里架构师进阶专题全部合集》,后台回复【面试】即可获取《史上最全阿里Java面试题总结》