一、什么是Docker
Docker是基于Go语言实现的开源容器项目,可以将Docker容器理解为一种轻量级的沙盒(sandbox)。每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过网络互相通信。其构想是要实现“Build, Ship and Run Any App, Anywhere”,即通过对应用的封装(Packaging)、分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件级别的“一次封装,到处运行”。
二、Docker与传统虚拟化
虚拟化的核心是对资源的抽象,目标往往是为了在同一个主机上同时运行多个系统或应用,从而提高系统资源的利用率,并且带来降低成本、方便管理和容错容灾等。
虚拟化级别
- 完全虚拟化
虚拟机模拟完整的底层硬件环境和特权指令的执行过程,客户操作系统无须进行修改。例如IBM p和z系列的虚拟化、VMware Workstation、VirtualBox、QEMU等; - 硬件辅助虚拟化
利用硬件(主要是CPU)辅助支持(目前x86体系结构上可用的硬件辅助虚拟化技术包括Intel-VT和AMD-V)处理敏感指令来实现完全虚拟化的功能,客户操作系统无须修改,例如VMware Workstation, Xen, KVM - 部分虚拟化
只针对部分硬件资源进行虚拟化,客户操作系统需要进行修改。现在有些虚拟化技术的早期版本仅支持部分虚拟化 - 超虚拟化
部分硬件接口以软件的形式提供给客户机操作系统,客户操作系统需要进行修改,例如早期的Xen - 操作系统级虚拟化
内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。容器相关技术即在这个范畴。
虚拟化方式比较
特性 | Docker容器 | 虚拟机 |
---|---|---|
启动速度 | 秒级 | 分钟级 |
性能 | 接近原生 | 较弱 |
内存代价 | 很小 | 较多 |
磁盘使用 | 一般为MB | 一般为GB |
运行密度 | 单机支持上千个容器 | 一般几十个 |
隔离性 | 安全隔离 | 完全隔离 |
迁移性 | 优秀 | 一般 |
Docker有着小巧、迁移部署快速、运行高效等特点,但隔离性比服务器虚拟化差,由同一个库管人员管理主机操作系统内核,因此通过库管人员可以看到所有Docker的相关信息。
服务器虚拟化拥有完全独立(隔离)的空间,属于不同的虚拟机所有者。每个虚拟机有各自的库管人员来管理当前虚拟机的操作系统内核,无法管理其它虚拟机。不存在信息共享的情况。
三、Docker核心概念
1.镜像
Docker镜像是一个只读模板,是创建Docker容器的基础,类似于虚拟机镜像。例如,一个镜像可以包含一个基本的操作系统环境,里面仅安装了Apache应用程序(或用户需要的其他软件)。可以把它称为一个Apache镜像。
其借鉴了git的思想,通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。
2.容器
Docker容器是从镜像创建的应用运行实例。它可以启动、开始、停止、删除,而这些容器都是彼此相互隔离、互不可见的。镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。
3.仓库
Docker仓库类似于代码仓库,是Docker集中存放镜像文件的场所。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。与Git代码仓库的概念非常相似。所有仓库存放在仓库注册服务器(Registry)上。
四、CentOS环境下安装Docker
首先Docker目前支持CentOS 7及以后的版本,64位操作系统,内核版本至少为3.10。
我们可以通过命令:uname -a查看内核版本详细信息
在root权限下分别运行命令,升级yum,支持devicemapper存储类型:
yum update
yum install -y yum-utils device-mapper-persistent-data lvm2
加Docker稳定版本的yum软件源:
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
更新yum软件源缓存,并安装Docker:
yum update
yum install -y docker-ce
启动docker服务
systemctl start docker
通过命令获取更全面的版本信息
docker version