在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各类实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户能够比本来的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。通常所指的虚拟化资源包括计算能力和资料存储。linux
在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能太低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件 对资源充分利用web
虚拟化技术种类不少,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。docker
(1)全虚拟化架构数据库
虚拟机的监视器(hypervisor)是相似于用户的应用程序运行在主机的OS之上,如VMware的workstation,这种虚拟化产品提供了虚拟的硬件。json
(2)OS层虚拟化架构ubuntu
(3)硬件层虚拟化centos
硬件层的虚拟化具备高性能和隔离性,由于hypervisor直接在硬件上运行,有利于控制VM的OS访问硬件资源,使用这种解决方案的产品有VMware ESXi 和 Xen server缓存
Hypervisor是一种运行在物理服务器和操做系统之间的中间软件层,可容许多个操做系统和应用共享一套基础物理硬件,所以也能够看做是虚拟环境中的“元”操做系统,它能够协调访问服务器上的全部物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor,VMM)。安全
Hypervisor是全部虚拟化技术的核心。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载全部虚拟机的客户操做系统。 宿主机bash
Hypervisor是全部虚拟化技术的核心,软硬件架构和管理更高效、更灵活,硬件的效能可以更好地发挥出来。常见的产品有:VMware、KVM、Xen等等。Openstack
在计算机的世界中,容器拥有一段漫长且传奇的历史。容器与管理程序虚拟化(hypervisor virtualization,HV)有所不一样,管理程序虚拟化经过中间层将一台或者多台独立的机器虚拟运行与物理硬件之上,而容器则是直接运行在操做系统内核之上的用户空间。所以,容器虚拟化也被称为“操做系统级虚拟化”,容器技术可让多个独立的用户空间运行在同一台宿主机上。
因为“客居”于操做系统,容器只能运行与底层宿主机相同或者类似的操做系统,这看起来并非很是灵活。例如:能够在Ubuntu服务中运行Redhat Enterprise Linux,但没法再Ubuntu服务器上运行Microsoft Windows。
相对于完全隔离的管理程序虚拟化,容器被认为是不安全的。而反对这一观点的人则认为,因为虚拟容器所虚拟的是一个完整的操做系统,这无疑增大了攻击范围,并且还要考虑管理程序层潜在的暴露风险。
尽管有诸多局限性,容器仍是被普遍部署于各类各样的应用场合。在超大规模的多租户服务部署、轻量级沙盒以及对安全要求不过高的隔离环境中,容器技术很是流行。最多见的一个例子就是“权限隔离监牢”(chroot jail),它建立一个隔离的目录环境来运行进程。若是权限隔离监牢正在运行的进程被入侵者攻破,入侵者便会发现本身“身陷囹圄”,由于权限不足被困在容器所建立的目录中,没法对宿主机进一步破坏。
最新的容器技术引入了OpenVZ、Solaris Zones以及Linux容器(LXC)。使用这些新技术,容器不在仅仅是一个单纯的运行环境。在本身的权限类内,容器更像是一个完整的宿主机。对Docker来讲,它得益于现代Linux特性,如控件组(control group)、命名空间(namespace)技术,容器和宿主机之间的隔离更加完全,容器有独立的网络和存储栈,还拥有本身的资源管理能力,使得同一台宿主机中的多个容器能够友好的共存。
容器被认为是精益技术,由于容器须要的开销有限。和传统虚拟化以及半虚拟化相比,容器不须要模拟层(emulation layer)和管理层(hypervisor layer),而是使用操做系统的系统调用接口。这下降了运行单个容器所需的开销,也使得宿主机中能够运行更多的容器。
尽管有着光辉的历史,容器仍未获得普遍的承认。一个很重要的缘由就是容器技术的复杂性:容器自己就比较复杂,不易安装,管理和自动化也很困难。而Docker就是为了改变这一切而生的。
(1)本质上的区别
(2)使用上的区别
(1)上手快。
用户只须要几分钟,就能够把本身的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改应用程序也很是迅速,能够说达到“随心所致,代码即改”的境界。
随后,就能够建立容器来运行应用程序了。大多数Docker容器只须要不到1秒中便可启动。因为去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也能够运行更多的容器,使用户尽量的充分利用系统资源。
(2)职责的逻辑分类
使用Docker,开发人员只须要关心容器中运行的应用程序,而运维人员只须要关心如何管理容器。Docker设计的目的就是要增强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而下降那种“开发时一切正常,确定是运维的问题(测试环境都是正常的,上线后出了问题就归结为确定是运维的问题)”
(3)快速高效的开发生命周期
Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具有可移植性,易于构建,并易于协做。(通俗一点说,Docker就像一个盒子,里面能够装不少物件,若是须要这些物件的能够直接将该大盒子拿走,而不须要从该盒子中一件件的取。)
(4)鼓励使用面向服务的架构
Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或进程,这样就造成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务均可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得很是简单,同时也提升了程序的内省性。(固然,能够在一个容器中运行多个应用程序)
1.3 Docker组件
Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只须要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成全部工做并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你能够在同一台宿主机上运行Docker守护进程和客户端,也能够从本地的Docker客户端链接到运行在另外一台宿主机上的远程Docker守护进程。
镜像是构建Docker的基石。用户基于镜像来运行本身的容器。镜像也是Docker生命周期中的“构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。例如:
添加一个文件;
执行一个命令;
打开一个窗口。
也能够将镜像看成容器的“源代码”。镜像体积很小,很是“便携”,易于分享、存储和更新。
Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫作Docker Hub。用户能够在Docker Hub注册帐号,分享并保存本身的镜像(说明:在Docker Hub下载镜像巨慢,能够本身构建私有的Registry)。
Docker能够帮助你构建和部署容器,你只须要把本身的应用程序或者服务打包放进容器便可。容器是基于镜像启动起来的,容器中能够运行一个或多个进程。咱们能够认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。 容器基于镜像启动,一旦容器启动完成后,咱们就能够登陆到容器中安装本身须要的软件或者服务。
因此Docker容器就是:
一个镜像格式;
一些列标准操做;
一个执行环境。
Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到本身的设计中,惟一不一样的是:集装箱运输货物,而Docker运输软件。
和集装箱同样,Docker在执行上述操做时,并不关心容器中到底装了什么,它无论是web服务器,仍是数据库,或者是应用程序服务器什么的。全部的容器都按照相同的方式将内容“装载”进去。
Docker也不关心你要把容器运到何方:咱们能够在本身的笔记本中构建容器,上传到Registry,而后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主机中。像标准集装箱同样,Docker容器方便替换,能够叠加,易于分发,而且尽可能通用。
使用Docker,咱们能够快速的构建一个应用程序服务器、一个消息总线、一套实用工具、一个持续集成(CI)测试环境或者任意一种应用程序、服务或工具。咱们能够在本地构建一个完整的测试环境,也能够为生产或开发快速复制一套复杂的应用程序栈。
Docker官方建议在Ubuntu中安装,由于Docker是基于Ubuntu发布的,并且通常Docker出现的问题Ubuntu是最早更新或者打补丁的。在不少版本的CentOS中是不支持更新最新的一些补丁包的。
因为我学习的环境都使用的是CentOS,所以这里咱们将Docker安装到CentOS上。注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前须要安装其余不少的环境并且Docker不少补丁不支持更新。
2.3安装Docker
使用yum命令在线安装
yum install docker
docker -v
systemctl命令是系统服务管理器指令,它是 service 和 chkconfig 两个命令组合。
启动docker:systemctl start docker
中止docker:systemctl stop docker
重启docker:systemctl restart docker
查看docker状态:systemctl status docker
开机启动:systemctl enable docker
查看docker概要信息:docker info
查看docker帮助文档:docker --help
Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker容器启动是须要的一些文件,而这些文件就能够称为Docker镜像。
列出docker下的全部镜像:docker images
REPOSITORY:镜像所在的仓库名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像的建立日期(不是获取该镜像的日期)
SIZE:镜像大小
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
为了区分同一个仓库下的不一样镜像,Docker提供了一种称为标签(Tag)的功能。每一个镜像在列出来时都带有一个标签,例如12.十、12.04等等。每一个标签对组成特定镜像的一些镜像层进行标记(好比,标签12.04就是对全部Ubuntu12.04镜像层的标记)。这种机制使得同一个仓库中能够存储多个镜像。--- 版本号
咱们在运行同一个仓库中的不一样镜像时,能够经过在仓库名后面加上一个冒号和标签名来指定该仓库中的某一具体的镜像,例如docker run --name custom_container_name –i –t docker.io/ubunto:12.04 /bin/bash,代表从镜像Ubuntu:12.04启动一个容器,而这个镜像的操做系统就是Ubuntu:12.04。在构建容器时指定仓库的标签也是一个好习惯。
若是你须要从网络中查找须要的镜像,能够经过如下命令搜索
docker search 镜像名称
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程建立的
Docker镜像首页,包括官方镜像和其它公开镜像。Docker Hub上最受欢迎的10大镜像(经过Docker registry API获取不了镜像被pull的个数,只能经过镜像的stars数量,来衡量镜像的流行度。毫无疑问,拥有最高stars数量的库都是官方库)。
国情的缘由,国内下载 Docker HUB 官方的相关镜像比较慢,可使用国内(docker.io)的一些镜像加速器,镜像保持和官方一致,关键是速度块,推荐使用。Mirror与Private Registry的区别:
Private Registry(私有仓库)是开发者或者企业自建的镜像存储库,一般用来保存企业内部的 Docker 镜像,用于内部开发流程和产品的发布、版本控制。
Mirror是一种代理中转服务,咱们(好比daocloud)提供的Mirror服务,直接对接Docker Hub的官方Registry。Docker Hub 上有数以十万计的各种 Docker 镜像。
在使用Private Registry时,须要在Docker Pull 或Dockerfile中直接键入Private Registry 的地址,一般这样会致使与 Private Registry 的绑定,缺少灵活性。
使用 Mirror 服务,只须要在 Docker 守护进程(Daemon)的配置文件中加入 Mirror 参数,便可在全局范围内透明的访问官方的 Docker Hub,避免了对 Dockerfile 镜像引用来源的修改。
简单来讲,Mirror相似CDN,本质是官方的cache;Private Registry相似私服,跟官方没什么关系。对用户来讲,因为用户是要拖docker hub上的image,对应的是Mirror。yum/apt-get的Mirror又有点不同,它实际上是把官方的库文件整个拖到本身的服务器上作镜像,并定时与官方作同步;而Docker Mirror只会缓存曾经使用过的image。
使用命令拉取:
docker pull centos:7
目前国内访问docker hub速度上有点尴尬,使用docker Mirror势在必行。现有国内提供docker镜像加速服务的商家有很多,下面重点ustc镜像。
ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优点之一就是不须要注册,是真正的公共服务。
https://lug.ustc.edu.cn/wiki/mirrors/help/docker
步骤:
(1)编辑该文件:vi /etc/docker/daemon.json // 若是该文件不存在就手动建立;说明:在centos7.x下,经过vi。
(2)在该文件中输入以下内容:
{ "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }
(3)注意:必定要重启docker服务,若是重启docker后没法加速,能够从新启动OS
一、 docker rmi $IMAGE_ID:删除指定镜像
二、 docker rmi `docker images -q`:删除全部镜像