Docker 是大型架构的必备中间件,下面我重点来详解Docker运行原理@mikechen
Docker
Docker 是容器化平台,它允许开发者将应用程序、及其所有依赖项,打包到一个可移植的容器中。
然后可以在任何支持 Docker 的环境中,以相同的方式运行,解决了传统软件开发和部署中环境不一致导致的问题。

核心目标: “Build once, run anywhere”(一次构建,到处运行)。
Docker运行原理
Docker运行原理,主要会包含如下组件:

主要会涉及到:Docker镜像、Docker容器、Docker仓库…等组件。
Docker镜像
Docker镜像 (Image): 是构建容器的基础。
镜像是只读的模板,包含了运行应用程序所需的所有文件和配置,可以把镜像看作是应用程序的“安装包”。
Docker 镜像是一个只读的、分层构建的文件系统快照。
每一个镜像由多个层(layer)组成,如下图所示:

底层通常是基础操作系统(如 alpine、ubuntu)。
每个 Dockerfile 指令(如 RUN、COPY)都会形成一个新层。
使用 UnionFS/OverlayFS …等联合挂载文件系统,将多层合并为一个整体。
Docker容器
Docker 容器是镜像的运行时实例,具有读写权限、和独立运行空间。
一个镜像,可以创建多个容器,每个容器都是相互隔离的运行环境,可以把容器看作是应用程序的“运行态”。

Linux 命名空间提供了轻量级的虚拟化形式,可以将操作系统的全局资源进行隔离,使得每个容器都认为自己拥有独立的资源。
包括:
-
PID:进程隔离;
-
NET:网络隔离;
-
MNT:挂载点隔离;
-
IPC:信号量等隔离;
-
UTS:主机名隔离;
-
USER:用户权限隔离。
Docker仓库
仓库 (Registry) :是存储和分发镜像的场所: 仓库用于集中存储和管理 Docker 镜像。

用户可以从仓库拉取镜像到本地运行容器,也可以将本地构建的镜像推送到仓库进行共享。
可以把仓库看作是应用程序“安装包”的存储、和分发中心。
三者紧密工作,首先,在本地通过 Dockerfile 构建了一个镜像(Image),上传到 Docker Hub(Registry);
生产环境中的主机拉取这个镜像并启动容器(Container),容器中运行的是具体的业务应用。
总之,Docker通过镜像、容器和仓库三者的紧密结合,实现了应用的快速构建、分发和运行。