0
点赞
收藏
分享

微信扫一扫

详解Docker镜像、容器和仓库

    Docker是基于GO语言编写的开源的PaaS服务(Platform as a Service,平台即服务),作为开源的应用容器引擎,Docker可以让开发者打包应用和依赖包到可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,并且容器是完全使用沙箱机制,相互之间无需任何接口。

  1. Docker相关常识

1.1 Docker的优势

    Docker的优势表现为:

    ①快速部署:利用Docker,可以在短时间内部署成百上千个应用,能更快速地交付到线上;

    ②高效虚拟化:不需要额外的hypervisor支持,直接基于Linux实现应用虚拟化,相比虚拟机能大幅度提高性能和效率;

    ③节省开支:有效提高了服务器的利用率,降低了IT支出;

    ④简化配置:将运行环境打包保存到容器中,使用时直接启动即可;

    ⑤快速迁移和扩展:能跨平台运行在物理机、虚拟机和公有云环境中,良好的兼容性使其可以将应用极为便利地从某一宿主机(或某一平台)迁移至另一宿主机(或另一平台)

1.2 Docker组成部分

    一个完整的Docker主要由以下几部分构成:

    ①Docker主机(Host):可以是一个物理机或者虚拟机,用于运行Docker服务进程和容器;

    ②Docker服务端(Server):Docker守护进程,运行Docker容器;

    ③Docker客户端(Client):客户端使用docker命令或其他工具调用Docker API;

    ④Docker镜像(Images):可以理解为创建实例所使用的模板;

    ⑤Docker容器(Container):容器是从Docker镜像生成对外提供服务的一个或一组服务;

    ⑥Docker仓库(Registry):保存镜像的仓库,类似于git和svn这样的版本控制系。

详解Docker镜像、容器和仓库_docker

    此篇我们重点看下Docker的几个核心组成部分——镜像、容器和仓库。


  1. Docker镜像

2.1 Docker镜像的作用

    Linux操作系统包括Linux内核和用户空间两部分,当Linux系统启动后,会挂载root文件系统为其提供用户空间支持。

    Docker镜像就类似于这样一个root文件系统,Docker镜像中含有启动容器所需要的文件系统及所需内容,因此镜像主要用于创建并启动Docker容器。

2.2 联合文件系统

    Docker镜像里包含一层层的文件系统,叫做Union File System(Union FS,联合文件系统)。联合文件系统可以将多个目录挂载到一起,从而形成一整个虚拟文件系统,该虚拟文件系统的目录结构就像是普通的Linux目录结构一样。Docker通过这些文件系统,再加上宿主机的内核就构成了一个Linux的虚拟环境。

2.3 分层存储

    在联合文件系统中,每一层文件系统我们叫做一层layer,联合文件系统可以对每一层文件系统设置只读(readonly)、读写(readwrite)和写出(writeout-able)三种权限。

    但是Docker镜像中每一层的文件系统都是只读的,构建镜像的时候,从一个最基本的操作系统开始,每个构建的操作都相当于做了一层的修改,增加了一层文件系统,这样一层一层的网上叠加,上层的修改会覆盖底层该位置的可见性。当我们使用镜像的时候,只会看到一个完整的整体,而不知道也无需知道里面有几层文件系统。


  1. Docker容器

3.1 Docker容器与镜像的关系

    在Docker的组成部分,我们了解到Docker镜像类似于模板,那么Docker容器就相当于从模板复制过来运行时的实例,Docker容器可以被创建、复制、暂停和删除等。

    每一个Docker容器在运行时都是以镜像为基础层,并在镜像的基础上创建当前容器的存储层,容器存储层的生存周期与容器是一致的,因此当某一个容器删除后,该容器存储层的数据也会随之被删除掉。

3.2 最佳实践

    按照Docker最佳实践的要求,Docker容器是不应该向其存储层内写入数据的,Docker容器存储层需保持无状态话。Docker容器中的所有文件写入操作都应该使用数据卷或绑定到宿主机目录上,在这些位置的读写操作会跳过容器存储层,性能和稳定性也会更高。


  1. Docker仓库

4.1 Docker仓库的作用

    Docker仓库是一个集中存储、分发Docker镜像的仓库,客户端的docker pull和docker push命令都是直接与Docker仓库发生交互的。

4.2 Docker仓库标签

    一个Docker仓库可以包含多个仓库,每个仓库可以包含多个标签,这些标签对应每一个镜像。一般情况下,一个仓库可能会包含同一个软件的不同版本(例如Nginx1.18和1.20版本等)镜像,标签就类似于该软件的不容版本,客户端可以通过<仓库名>:<标签>的格式来指定具体版本的软件镜像,如不指定,默认会以latest作为标签。

4.3 Docker仓库分类

    按照镜像是否公开,Docker仓库可分为公共仓库和私有仓库两种。Docker hub作为Docker官方的公共仓库,已经保存了大量的常用镜像,可以方便用户直接使用;如果不想使用公共仓库,也可使用Image registry这一Docker官方提供的私有仓库部署工具。

举报

相关推荐

0 条评论