Docker组件
1、 客户端:dockerclient
2、 服务端:dockerserver
3、 Docker镜像
4、 Registry
5、 Docker 容器
Docker客户端与服务器
Docker 是一个客户端、服务端(C/S)架构的程序。Docker客户端只需向Docker服务器或守护进程发出请求,服务器或守护进程将完成所有工作并返回结果。Docker守护进程有时也称为Docker引擎。Docker提供了一个命令行工具docker以及一整套RESTful API来与守护进程交互。用户可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。
docker client是一个泛称,它可以是命令行docker,也可以是遵循了docker api规则的客户端,简单地说可以理解为一个用于交互/发送指令的接口。
2、 Docker镜像
镜像是一个只读的容器模板,含有启动docker容器所需的文件系统结构及内容
Docker以镜像和在镜像基础上构建的容器为基础,以容器开发、测试、发布的单元将应用相关的所有组件和环境进行封装,避免了应用在不同平台间迁移所带来的依赖问题,确保了应用在生产环境的各阶段达到高度一致的实际效果。
镜像可以被创建、启动、关闭、重启以及销毁。
-
分层机制
docker的镜像机制是有层次感的,一个镜像可以放到另一个镜像的顶部。位于下端的为父镜像,以此类推;最底部的镜像可称为基础镜像。
镜像采用分层构建,每个镜像由一系列的镜像层组成, 当需要修改容器内的某个文件时,只对处于最上方的读写层进行变动,不覆盖下面已有文件系统的内容。 当提交这个修改过的容器文件系统为一个新的镜像时,保存的内容仅为最上层读写文件系统中被更新过的文件。
-
+ bootfs 主要包含bootloader和kernel, bootloader主要是引导加载kernel, 当容器启动成功后,kernel被加载到内存中后而引导文件系统则会被卸载unmount+ rootfs 是容器在启动时内部进程可见的文件系统,通常包含一个操作系统运行所需的文件系统 + 传统linux在内核启动时首先会挂载一个只读的rootfs,检测器完整性之后再切换为读写模式 + docker在挂载rootfs时也将其设为只读模式,挂载完毕后利用联合挂载技术在已有的只读rootfs上再挂载一个读写层。 + 只有运行中文件系统发生变化,才会把变化的内容写到读写层,并隐藏只读层中的老版本文件 + rootfs包含的就是典型Linux系统中的 /dev,/proc,/bin, /etc等标准目录和文件。
-
写时复制
-
可以在多个容器之间共享镜像,每个容器启动时不需要单独复制一份镜像文件
-
将所有镜像层以只读方式挂载到一个挂载点,在上面覆盖一个可读写的容器层。
-
写时复制配合分层机制减少了镜像对磁盘空间的占用和容器启动时间
-
内容寻址
-
根据内容来索引镜像和镜像层
-
是对镜像层的内容计算检验和,生成一个内容哈希值作为镜像层的唯一标识
-
对于来自不同构建的镜像层,只要拥有相同的内容哈希,也能被不同镜像共享
-
联合挂载
可以在一个挂载点挂载多个文件系统,将挂载点的原目录与被挂在内容进行整合,最终可见的文件系统将包含整合后各层的文件和目录 -
读写层处于容器文件系统的最顶层,其下可能联合挂载多个只读层。
-
3、 Registry(仓库)
Docker用Registry来保存用户构建的镜像。Register分为公共和私有两种。Docker公司运营的公共Registry叫做Docker Hub。用户可以在Docker Hub注册账户,分享并保持自己的镜像。
用户也可以在Docker Hub上保存自己的私有镜像。
4、容器
Docker 可以帮用户构建和部署容器,用户只需把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或者多个进程。我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或执行阶段。
总结起来,Docker容器就是:
- 一个镜像格式
- 一系列标准的操作
- 一个执行环境。