liangxiaobei
2022/06/11阅读:30主题:默认主题
公众号文章:Docker

Docker重要的三个基本概念:镜像、容器和仓库
一、Docker镜像
1.1 Docerk镜像理解
操作系统分为内核与用户空间。以Linux系统为例,内核启动后,会挂载
root
文件系统为其提供用户空间支持。而Docker镜像(Image)就好比是一个root
文件系统。
从上面的角度出发,我们可以理解为:Dokcer镜像是一个特殊的文件系统,其特殊性主要体现在以下两个方面:
-
(1)Docker镜像为容器的运行提供所需的程序、库、资料、配置等文件的同时,还准备了一些配置参数(比如匿名卷、环境变量、用户等); -
(2)Docker镜像不包含任何动态数据,其内容在构建之后就不会被修改。
1.2 分层存储
因为镜像包含操作系统完整的root
文件系统,这导致其体积通常很大。鉴于此缺点,Docker在Union FS技术的基础上,采用了分层存储架构的设计理念:
-
Docker镜像的构建:一层层构建,前一层是后一层的基础; -
每一层构建完成后,就不会再发生变化,后一层上的任何改变只发生在当前层。比如,我们在当前层删除前一层的文件,实际的操作并不删除前一层的文件,而是删除当前层标记的上一层文件信息; -
在构建Docker镜像时,每一层尽量只包含该层要添加的东西,任何额外的东西应该在该层构建结束前清除掉。
分层存储的特征使得镜像的复用、定制变的更为容易。这使得我们可以使用之前构建号的镜像作为基础层,然后进一步添加新的层,以定制自己所需要的内容,构建新的镜像。
二、Docker容器
镜像(Image)和容器(Container)的关系,就像是面向对象编程中的
类
和实例
。镜像是静态的定义,而容器是镜像运行的实体,容器是可以被创建、启动、停止、删除和暂停的。
2.1 Docerk容器的实质
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行与自己独立的命名空间
。因此容器可以具有自己的root
文件系统、网络配置、进程空间、用户ID空间。
容器内的进程是运行在一个隔离的环境中,使用起来就像在一个独立于宿主的系统下操作一样,而使得容器具有了封装性。想比较与直接在宿主中运行,容器的运行更加安全。
2.2 Docerk容器的存储层
容器也是分层存储的,每个容器的运行时,是以镜像为基础层,在器上创建一个当前容器的存储层。容器存储层的生命周期和容器一样,即容器消亡时,容器存储层也随之消亡,任何保存与容器存储层的信息也会丢失掉。
根据Docker的设计思想,容器不应该向其存储层写入任何数据,也就是所谓的无状态化。所有的文件写入操作应该使用如下两种方式:
-
数据卷(Volume) -
绑定宿主目录
在数据卷或绑定宿主目录位置上的读写都会跳过容器存储层,而直接对宿主或网络存储发生读写,这样处理的方式会其性能和稳定性更高。
注意:数据卷的生存周期独立于容器,即容器消亡,数据卷不会消亡。
三、Docker仓库
###3.1 Docker仓库简介
Docker仓库提供了一个集中的存储、分发镜像的服务,使得构建的Docker镜像不仅可以在当前宿主机上运行,还可以在其他服务器上使用。
-
一个Docker仓库中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag),每个标签对应一个镜像; -
仓库中镜像命名格式:通常为了便于仓库管理,一个仓库会包含一个软件不同版本的镜像,而标签可用于标识不同版本。即我们可以通过 <仓库名>:<Tag>
的格式来标识仓库中的镜像,如果不给出标签,则会使用默认的latest
标签; -
仓库的命名格式:仓库名通常以两段路径形式给出,比如 liang/nginx-proxy
,前面的liang
标识Docker仓库多用户环境下的用户名,后者的nginx-proxy
对应于软件名。
3.2 Docker仓库公开服务
Doker公开服务是开放给用户使用、允许用户管理镜像的仓库服务。用户可以免费上传、下载公开的镜像,还可以提供收费服务供用户管理私有镜像。最常用的公开Docker仓库服务包括:
-
Docker Hub:官方默认的Docker仓库,其拥有大量的高质量官方镜像; -
CoreOS的Quay.io:CoreOS相关的镜像;Google的Google Container Registry, Kubernetes的镜像使用嗯就是这个服务。
通常,国内访问这些服务会很慢,因此国内的一些云端服务商提供了针对Docker Hub的镜像服务,这就是我们常说的镜像服务加速器
。常见的有阿里云加速器、DaoCloud加速器,通过它们我们可以支持从国内的地址下载Docker Hub上的镜像。
相应的,国内也有一些云服务商提供的类似于Docker Hub的公开服务:
-
时速云镜像仓库; -
网易云镜像服务; -
DaoCloud镜像市场; -
阿里云镜像库。
3.3 私有Docker仓库
Docker官方提供了开源Docker Registry镜像,可以直接使用作为私有Registry服务。开源Docker Registry镜像只提供了Docker Registry API的服务端实现,不过这也足够支持docker
命令了,不影响其使用。但是开源的Docker仓库镜像服务没有图形界面、镜像维护、用户管理、访问控制等高级功能。将来如果遇到需要这些高级服务的场景,可以查阅有关官方的商业化版本Docker Trusted Registry服务。
作者介绍