Docker概念
来源于菜鸟编程网 https://www.runoob.com/docker/docker-tutorial.html
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。
Docker 官网:https://www.docker.com
Github Docker 源码:https://github.com/docker/docker-ce
使用Docker的优点
- 快速分发和部署
- 一次创建或配置,之后可以在任意地方任意时间让应用正常运行。
- 更快速的交付和部署。
- 更高效的资源利用。
- 更轻松的迁移和扩展。
- 更简单的更新管理。
与虚拟机的比较
Docker 作为一种轻量级的虚拟化方式,启动和停止可以在秒级实现;对系统资源需求很少(在IBM服务器上已经实现了同时运行10K量级的容器实例);用过类似Git设计理念的操作来方便用户获取、分发和跟新应用镜像,存储复用,增量更新;通过Dockerfile支持灵活的自动化创建和部署机制,提高工作效率,使流程标准化。
特性 | 容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
性能 | 接近原生 | 较弱 |
内存代价 | 很小 | 较多 |
硬盘使用 | 一般为MB | 一般为GB |
运行密度 | 单机支持上千个容器 | 一般几十个 |
隔离性 | 安全隔离 | 完全隔离 |
迁移性 | 优秀 | 一般 |
基于软件的虚拟化
应用虚拟化:一般指的是一些模拟设备或诸如Wine这样的软件。
平台虚拟化:可细分下面几个子类。
- 完全虚拟化
虚拟机模拟完整的底层硬件环境和特权指令的执行过程,客户操作系统无需进行修改。
例如IBM p和z 系列的虚拟化、VMware Workstation、VirtualBox、QEMU等。
- 硬件辅助虚拟化
利用硬件(主要是CPU)辅助支持(目前x86体系结构上可用的硬件辅助虚拟化技术包括Intel-VT和AMD-V)处理敏感指令来实现完全虚拟化的功能,
客户操作系统无需修改,例如 VMware Workstation、Xen、KVM。
- 部分虚拟化
只针对部分硬件资源进行虚拟化,客户操作系统需要进行修改。
现在有些虚拟化技术的早期版本仅支持部分虚拟化。
- 准虚拟化(paravirtualization)
部分硬件接口以软件的形式提供给客户机操作系统,
客户操作系统需要进行修改,例如早期的Xen.
- 操作系统级虚拟化
内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。
容器相关技术即在这个范畴,如Docker。不需要额外的supervisor支持。
三大核心概念
镜像(Image)
类似于虚拟机镜像,可以理解为一个只读的模板是创建Docker容器的基础。通过版本管理和增量的文件系统,Docker提供了一套 十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。
容器(Container)
类似于一个轻量级的沙箱,用来运行和隔离应用。是从镜像创建的应用运行实例。可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离、互不可见的。
可以把容器看做是一个简易版的Linux系统环境以及运行在其中的应用程序打包而成的盒子。
镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。
仓库(Repository)
类似于代码仓库,是集中存放镜像文件的场所。根据所存储的镜像是否公开可分为公开仓库(Public)和私有仓库(Private)。
仓库注册服务器是存放仓库的地方,其上可存放多个仓库。
每个仓库集中存放某一类镜像,可包括多个镜像文件,通过不同的标签(tag)来进行区分。