Docker 构成三大件
Docker的架构主要由三个核心组件构成,这是 Docker 三大件。
Docker Client
这是开发者与Docker交互的部分。无论你是直接使用 Docker 命令行,还是用 Docker desktop、OrbStack这些 GUI 工具,实际上都是在使用Docker客户端。包括使用 Dockerfile 实际上也是对 Client 命令的包装。
它负责将你输入的指令传递给Docker守护进程(Docker daemon),并显示出执行结果。
Docker Host
这是Docker运行的核心环境。在Docker主机上,最关键的部分就是Docker守护进程(Docker daemon)。它负责处理 Docker API 的请求,管理各种Docker对象,包括下面这几个:
• 镜像(Images):容器的只读模板,包含了运行应用所需的所有依赖和配置。 • 容器(Containers):镜像的运行实例,可以被启动、停止、删除等。 • 网络(Networks):容器间通信的桥梁。 • 数据卷(Volumes):用于数据持久化的机制。
Docker Registry
这是存储Docker镜像的地方。Docker Hub是默认的公共镜像仓库,国内也有不少的镜像站,虽然现在很多不能用了,包括各个云平台一般也有自己的镜像仓库,很多公司也会搭建公司内部的镜像仓库。
我记得15年我做 devops 的时候,公司就搭了镜像仓库,因为当时公司用的那些镜像都是高度定制化的,而且配置略复杂,搭建镜像仓库就很合适。
Docker 如何工作的
好了,了解了 Docker 核心组件后,我们再来看看Docker是如何工作的吧。
使用者启动一个容器一定是从一个镜像创建出来的,那就从镜像的构建、镜像上传、镜像拉取直到容器运行这几个阶段来看一下 Docker 的工作过程。
构建阶段
镜像的发布者可以通过 docker save 命令将自己的容器打包成一个镜像,但是更好的方式是直接编写Dockerfile,定义好各种依赖和参数。
最后使用docker build命令构建镜像,Docker客户端将指令发送给Docker守护进程。守护进程解析Dockerfile文件,根据其指定的参数和配置,创建一个符合要求的镜像。
分发阶段
使用docker push命令,将构建好的镜像上传到Docker仓库,不管是公共仓库还是内部仓库。
之后其他人就可以通过docker pull命令从仓库中获取这个镜像。到这一步大部分人应该都很熟悉了,镜像可能没打包过,但是用镜像启动容器应该是轻车熟路的。
运行阶段
使用docker run命令,Docker守护进程会基于指定的镜像创建并启动一个新的容器,如果之前没有用docker pull命令拉取过,那会自动拉取。
容器在一个隔离的环境中运行,拥有自己的文件系统、网络和进程空间。
Docker的工作原理保证了所有使用这个镜像的环境都是一致的,这样就不会出现开发说:“在我的机器上是没问题的呀?在测试环境是可以的呀?”这样的问题了。
通过将应用及其依赖打包到一个标准化的单元(容器)中,Docker确保了应用可以在任何支持Docker的环境中一致地运行。
此外,Docker的轻量级特性使得它可以在同一台主机上同时运行多个容器,每个容器都是相互隔离的。这种隔离性和可移植性使得Docker在微服务架构、持续集成/持续部署(CI/CD)流程中发挥着重要作用。
Docker 、Dockerfile、Docker Swarm、K8S 之间的关系
Docker 和 Dockerfile
Dockerfile是一个文本文件,包含了一系列指令和参数。它用于定义如何构建Docker镜像。
当执行docker build命令时,Docker会读取Dockerfile中的指令,并据此创建一个Docker镜像。
可以将Dockerfile理解为镜像的"配方",而Docker则是"厨师",按照这个配方烹饪出最终的"菜肴"(镜像)。
Dockerfile是输入,Docker镜像是输出,而Docker平台则是将输入转化为输出的工具。
Docker 和 Docker Swarm
Docker Swarm是Docker原生的集群管理和编排工具。
当需要的容器变多了,并且经常有需要扩展容器的需求时,就需要编排工具了。
Docker Swarm则用于管理多个Docker主机组成的集群。可以将多个运行Docker的机器组合成一个虚拟的Docker主机,让运维人员轻松地在多台机器上部署和扩展Docker容器。
它提供了一些基本的编排功能,如服务发现、负载均衡、滚动更新等。
可以将Docker Swarm视为Docker的扩展,它使得Docker能够在集群环境中更好地工作。
Docker 和 K8s
Kubernetes,通常简称为K8s,是一个更加强大和复杂的容器编排平台。
Kubernetes最初是为Docker容器设计的,但它现在支持多种容器运行时,包括Docker和Containerd。
虽然 Kubernetes 宣布不再直接支持 Docker 了,但是实际上支持Containerd 就是支持 Docker了,所以默认 K8s 就是Docker 的编排工具。
Kubernetes提供了比Docker Swarm更丰富的功能,包括自动扩缩容、自我修复、批处理、水平扩展等。
本网站的文章部分内容可能来源于网络和网友发布,仅供大家学习与参考,如有侵权,请联系站长进行删除处理,不代表本网站立场,转载者并注明出处:https://www.jmbhsh.com/yulebagua/36385.html