Docker架构最全详解(图文全面总结)

Docker架构最全详解(图文全面总结)

Docker是云原生非常核心的组件,也是大厂经常考察的内容,下面我就全面来详解Docker架构@mikechen

Docker

Docker 是一个开源的容器化平台,允许开发者打包、发布、和运行应用程序、及其依赖的轻量级容器。

如下图所示:

Docker架构最全详解(图文全面总结)

与集装箱相似,Docker 容器提供了一种标准化的封装方式,使得应用程序和其依赖项可以以一种统一的格式打包、和分发。

与集装箱类似, Docker 容器都提供了隔离性,使得它们可以独立运行,互不干扰。

并且,集装箱和 Docker 容器都具有高度的可移植性,可以在不同的环境中轻松地部署和运行。

 

Docker架构

Docker的架构,如下图所示:

Docker架构最全详解(图文全面总结)

Docker中有两个最重要的设计,分布式是:镜像(Images)、和容器(Containers)。

 

Docker镜像

Docker 镜像是一个只读的模板,包含了运行应用程序所需的一切:代码、运行时环境、系统工具、库以及依赖项。

而容器,则是在镜像的基础上创建的运行实例,提供了一个独立、可移植的运行环境。

如下图所示:

Docker架构最全详解(图文全面总结)

用户可以使用 docker pull 命令,从 Docker Hub 上拉取镜像到本地主机,也可以使用 docker build 命令根据 Dockerfile 构建自定义镜像。

Docker架构最全详解(图文全面总结)

当拉取到Docker镜像后,用户可以使用 docker run 命令,来创建多个容器实例。

 

Docker容器

容器则是在镜像的基础上创建的运行实例,提供了一个独立、可移植的运行环境,使得应用程序可以在任何支持 Docker 的平台上运行。

Docker 容器的实现原理,涉及到 Linux 内核的一些特性和容器化技术,主要包括: Linux 命名空间(Namespaces)、Linux 控制组(Cgroups)和联合文件系统(UnionFS)等。

1. Linux 命名空间(Namespaces)

Linux 命名空间是 Linux 内核提供的一种机制,用于隔离系统资源的视图,如:进程、网络、文件系统等。

常见的 Linux 命名空间:PID 命名空间(PID Namespace)、网络命名空间(Network Namespace)、挂载命名空间(Mount Namespace)等。

 

2、Linux 控制组(Cgroups)

Linux 控制组是 Linux 内核提供的一种机制,用于限制和管理系统资源的使用,如 CPU、内存、磁盘 I/O 等。

常见的包括:

  • CPU 控制组:限制容器可以使用的 CPU 时间片、和核心数量;
  • 内存控制组:限制容器可以使用的内存量;
  • 块 I/O 控制组:限制容器的磁盘 I/O 速度;
  • 网络控制组:限制容器的网络带宽和优先级。

 

3、联合文件系统(UnionFS)

联合文件系统是一种将多个文件系统层叠加在一起的文件系统,使得它们看起来像一个单独的文件系统。

联合文件系统的底层通常是一个只读的基础层,可以是一个操作系统的基础镜像、或者其他的文件系统。

在基础层之上,每个容器都有一个可读写的容器层,这个容器层包含了容器的运行时配置信息、应用程序的变更以及其他临时文件。

当容器对文件系统进行写操作时,这些修改会被记录在容器层中,而不会影响到基础层。

总之,Linux 命名空间、Linux 控制组、和联合文件系统是 Docker 容器化技术的核心组件。

它们共同实现了容器的隔离、资源限制和文件系统管理,使得容器可以实现轻量化、隔离化和可移植化。

作者简介

陈睿|mikechen,10年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注作者「mikechen」公众号,获取更多技术干货!

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

评论交流
    暂无讨论,说说你的看法吧