一、Docker 是什么?
Docker 一定程度上可以将其想象一个更轻量的电脑,有自己私有化的操作系统,网络,独立的内存。并且其提供了足够强的封装能力。同集装箱类比,我们在一个空间内封装好了一切。宿主机就是拉箱子的船,一个封装好的集装箱就是一个独立的存在,可以做到地下的船随意换,而箱子内容不变。正式Docker 有了这种能力,在我们安装服务的时候避免对宿主机繁琐的配置,就可以将一个软件运行起来。以前我们开发一个java程序,宿主机必须提供jre 环境。如果没有这个环境,不好意思该程序无法执行,有了容器后这些就简单了。拉取一个镜像,然后运行起来,结束。
二、Docker Engine
在 Docekr 中有一个核心就是 Docker Engine,这个是什么呢?就简单的将其理解为一个C/S服务吧,更通俗的讲就是个软件。整体架构图如下:
![59ff9ced3dd0d2fbe9b48ff57f0f1fec.png](https://i-blog.csdnimg.cn/blog_migrate/1237cf14cb0fa60f822eff94c1259602.jpeg)
在这里对其核心的部分概念进行简单的介绍,没有提及的内容,过于相比较复杂,在后文中再进行进行详细描述:
- Server:整个结构最核心的部分,命令的真实执行者,里面住着 docker daemon,简单的说就是一个守护docker守护进程,长期的运行着,常驻于内存中,负责创建和管理dockers 对象,比如:image,containers,network和volume。在Linux 中可以找到一个叫
dockerd
的进程就是它。 - Rest Api: 正如它的名字就是一个对外提供的接口,利用这些接口可以实现对 docker 服务的调用执行,完成和 daemon 通信。
- Client: 最外层的命令行界面(CLI)。
三、Docker 架构
Docker 就是前文提到的C/S 架构,整体架构图如下:
https://docs.docker.com/engine/images/architecture.svgdocs.docker.comDocker 的整体架构分为三部分,Clint,Docker_Host,Registey,上图有很清晰的处理流程:
- Clinet:和前文中提到的一致,就是命令行的操作界面,通过其使用Api 接口,完成和Doceker daemon 的通信。
- Docker_Host: Docker 的宿主机,可以是物理机,也可以是虚拟机,上面跑着一个dockers 服务,我们使用 docker daemon 实现对docker 对象生命周期管理。
- Registey: docker registry 严格意义它不属于docker中,他是另外的一个仓库服务,是docker 镜像的存储中心,docker 的官方仓库为docker hub,也之处我们自己创建。为了方便在开发团队中我们会维护一个仓库,这个仓库我们一般使用 harbor 实现。
四、Docker 对象
在上文中我提到一个概念叫 docker 对象,事实这些对象才是我们每天要用的东西,常用的主要有 image
、containers
、network
、volumes
、plugins
。这里对容器中两个常用的做简单概述说明。
- images: 是一个封装好的只读模板文件,用于后期创建创建容器使用。内部封装了最小操作系统,你的应用程序,以及一些其他必备服务,这些封装内容完全可以有用户指定。
- containers:容器是通过image 运行起来的一个实例。可以看作一个进程。内部含有独立的网络和存储,容器与容器,容器与宿主机之间默认是隔离的。
参考资料: https:// docs.docker.com/get-sta rted/overview/