什么是Docker
Docker是Google使用go语言进行开发的,对进程进行封装隔离,始于操作系统层面的虚拟化技术。
因为隔离的进程独立于宿主机和其它的隔离进程,因此成为容器
Docker在容器的基础上进行了进一步的封装,从文件系统、网络互联到进程隔离等等,简化了容器的维护和床架你,比虚拟机技术更为轻便、快捷
为什么要用
作为一种新兴虚拟化方式,和传统比有众多优势
- 更高效的利用系统资源
容器不需要虚拟硬件以及完整的操作系统等额外开销,因此对系统的资源利用率更高。从以下几个方面来看,应用执行速度、内存损耗、文件存储速度等都比传统的虚拟机搞笑,因此一个相同配置的主机,docker可以运行更多数量的应用
- 更快速的启动时间
由于直接运行宿主内核,可以做到秒级、毫秒级的启动时间;节省了时间
- 一致的运行环境
Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境的一致性;【开发、测试、生产环境】
- 持续交付和部署
通过定制应用镜像实现持续集成、交付、部署;通过Dockerfile进行镜像构建;Dockerfile使得镜像构建透明化,方便理解
- 轻松迁移
由于确保了环境的一致性,所以容易迁移;
- 轻松维护和扩展
使用分层存储和镜像的技术,使得应用复用更加容易,维护更新简单。
基本概念
理解以下三个概念,就理解了Docker的整个生命周期
镜像
-
操作系统分为内核、用户空间;Docker镜像相当于是一个root文件系统
-
Docker镜像是特殊的文件系统,除了提供运行时所需要的程序、库、资源、配置等文件外,还包含了一些配置参数。但是不包含任何动态数据
-
分层存储,使得镜像的复用、定制更为容易
容器
- 容器和镜像的关系,就像类、实例一样;镜像是静态的,容器是运行镜像的实体;容器可以被创建、启动、停止、删除、暂停等操作
- 容器实质就是进程,但是它运行在属于自己的独立的空间里;所以每一个容器拥有自己的root系统、网络配置、进程空间,甚至自己的用户ID空间。
- 容器也是分层存储,每一个容器运行时候,以镜像为基础层,为当前存储层;这个为容器运行读写准备的容容器存储层
- 容器消亡时候,存储层也会跟着消失;所以保存在容器存储层的信息都会没有
- 容器不应该给存储层写数据,所有的文件写入操作,都需要使用数据卷、或者绑定宿主目录;直接对宿主、网络存储进行读写,性能和稳定性高
- 数据卷的生命周期独立容器,容器消失,数据卷还在
仓库
- 分为公有和私有仓库
- 镜像构建完成后,需要发布到集中存储、分发的镜像服务Docker Registry
- 一个Docker Registry 可以包含多个Repository,每个仓库都有多个标签,每一个标签对应一个镜像
- 一般来说,一个仓库会包含同一个软件的不同版本,而标签就是用来给不同版本进行标注;
- 可以通过
<仓库名>:<标签>
的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest
作为默认标签