一、前言
开发者,本文主要在3A服务器下学习Docker镜像,容器,仓库这三个概念,理解了这三个概念, 就理解了Docker的整个生命周期,为后续学习打下坚实基础。
二、镜像(Image)
和大多数虚拟化技术一样,Docker也有镜像的概念,镜像是运行虚拟环境的基础,也是迁移虚拟环境的强大工具。
举个例子,假如小周想要安装正版系统,可以使用正版 iso 镜像文件,但是小周也不知道哪个才是纯净的镜像文件,小周倒霉,第一次安装是盗版的,所谓盗版就是指在纯净系统上进行了个人diy后,再次制作发布的镜像。
吃一堑长一智,小周这次来到官网下载并安装了纯净的系统镜像,三年过去了。。。小周的电脑性能有点力不从心了,决定换一台电脑,小周这三年努力学习,在电脑上下载和存放了很多重要学习资料,能不能有种办法可以无痛的迁移到新电脑上呢?聪明的小周想到了盗版系统,于是跑去电脑店让技术人员给他的电脑定制了一个属于自己的系统镜像,小周拿着镜像文件,咔哧咔哧的来到新电脑前,三下五除二就安装成功了,就这样连着系统和自己的数据完整的迁移了,小周非常开心,大喊 “奥里给” 。
回到正题,在Docker中,镜像是一个包含应用程序以及相关依赖库的文件,在Docker容器启动的时候,它以只读的方式被用于创建容器运行的基础环境。
如果把容器理解为应用运行的虚拟环境,那么镜像就可以看作这个环境的持久化副本,通过镜像我们很容易保存虚拟环境的运行状态,从而很方便的完成镜像的迁移以及复制等等操作。
三、容器(Container)
镜像和容器的关系,就像面向对象中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体,容器可以被创建、启动、停止、删除等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间,因此容器可以拥有自己的 root文件系统,自己的网络配置,自己的进程空间,甚至自己的用户空间,容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样,这种特性使得容器封装的应用比直接在宿主运行更加安全。
每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,通常称这个为容器运行时读写而准备的存储层为 容器存储层,容器存储层的生命周期和容器一样,容器消亡时,容器存储层也随之消亡。
四、仓库(Repository)
仓库(Repository)是集中存放镜像的地方。
镜像构建完成后,可以很容易的在当前宿主机上运行,但是如果需要在其它服务器上使用这个镜像,此时我们就需要一个集中存储和分发镜像的服务,Docker Registry 就是这样的服务。
4.1、Docker Hub
Docker官方维护了一个公共仓库Docker Hub,大部分需求都可以通过在 Docker Hub 中直接下载镜像来实现。
4.2、私有仓库
除了使用公开服务外,用户还可以在本地搭建私有仓库,官方提供了Docker Registry镜像,可以直接使用做为私有 Registry 服务,后续会详细✍