💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
## [官方文档][1] ![](http://qiniu.echosoul.cn/17-8-16/85976119.jpg) * 容器技术的兴起源于 PaaS 技术的普及; * Docker 公司发布的 Docker 项目具有里程碑式的意义; * Docker 项目通过“容器镜像”,解决了应用打包这个根本性难题。 > 容器本身没有价值,有价值的是“容器编排”。 容器技术生态才爆发了一场关于“容器编排”的“战争”。而这次战争,最终以` Kubernetes` 项目和 `CNCF` 社区的胜利而告终。 ## 进程 一旦“程序”被执行起来,它就从磁盘上的二进制文件,变成了计算机内存中的数据、 寄存器里的值、堆栈中的指令、被打开的文件,以及各种设备的状态信息的一个集合。像这样一 个程序运起来后的计算机执行环境的总和,即进程。 而容器技术的核心功能,就是通过约束和修改进程的动态表现,从而为其创造出一个“边界”。 对于 Docker 等大多数 Linux 容器来说,`Cgroups` 技术是用来制造约束的主要手段,而 `Namespace` 技术则是用来修改进程视图的主要方法。 ## Docker 镜像 操作系统分为**内核**和**用户空间**。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。 Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等) 。镜像**不包含任何动态数据**,其内容在构建之后也**不会被改变**。 ### 分层存储 因为镜像包含操作系统完整的 root 文件系统,其体积往往是庞大的,因此在Docker 设计时,就充分利用 **Union FS** 的技术,将其设计为分层存储的架构。 ## Docker 容器 镜像(Image) 和容器(Container) 的关系,就像是面向对象程序设计中的 **类** 和 **实例**一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。 容器的实质是**进程**,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 **命名空间**。 ### 容器存储层 容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。 按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化。所有的文件写入操作,都应该使用 数据卷(Volume) 、或者绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。 ## Registry 仓库 一个 Docker Registry 中可以包含多个仓库(Repository) ;每个仓库可以包含多个标签(Tag) ;每个标签对应一个镜像。 ## 开源与商业版 开源的 Docker Registry 镜像只提供了 Docker Registry API 的服务端实现,足以支持 docker 命令,不影响使用。但不包含图形界面,以及镜像维护、用户管理、访问控制等高级功能。在官方的商业化版本 Docker Trusted Registry 中,提供了这些高级功能 [1]:https://docs.docker.com/