Docker简介
什么是虚拟化
- 在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的 各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实 体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这 些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的 虚拟化资源包括计算能力和资料存储。
- 在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的 旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件 对资 源充分利用
- 虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化 (vip)、桌面虚拟化、服务虚拟化、虚拟机等等。
什么是docker
Docker
是一个开源项目,诞生于
2013
年初,最初是
dotCloud
公司内部的一个业
余项目。它基于
Google
公司推出的
Go
语言实现。 项目后来加入了
Linux
基金会,遵
从了
Apache 2.0
协议,项目代码在
GitHub
上进行维护。
Docker 自开源后受到广泛的关注和讨论,以至于
dotCloud
公司后来都改名为
Docker Inc
。
Redhat
已经在其
RHEL6.5
中集中支持
Docker
;
Google
也在其
PaaS
产品
中广泛应用。
Docker 项目的目标是实现轻量级的操作系统虚拟化解决方案。
Docker
的基础是
Linux
容器(LXC)等技术。
在 LXC
的基础上
Docker
进行了进一步的封装,让用户不需要去关心容器的管理,
使得操作更为简便。用户操作
Docker
的容器就像操作一个快速轻量级的虚拟机一样简
单。
为什么选择Docker?
(1)上手快。
用户只需要几分钟,就可以把自己的程序
“Docker
化
”
。
Docker
依赖于
“
写时复
制
”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到
“
随心所致,代码
即改
”
的境界。
随后,就可以创建容器来运行应用程序了。大多数
Docker
容器只需要不到
1
秒中即
可启动。由于去除了管理程序的开销,
Docker
容器拥有很高的性能,同时同一台宿主机
中也可以运行更多的容器,使用户尽可能的充分利用系统资源。
2)职责的逻辑分类
使用Docker
,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心
如何管理容器。
Docker
设计的目的就是要加强开发人员写代码的开发环境与应用程序要
部署的生产环境一致性。从而降低那种
“
开发时一切正常,肯定是运维的问题(测试环境
都是正常的,上线后出了问题就归结为肯定是运维的问题)
”
3)快速高效的开发生命周期
Docker
的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应
用程序具备可移植性,易于构建,并易于协作。(通俗一点说,
Docker
就像一个盒子,
里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒
子中一件件的取。)
4)鼓励使用面向服务的架构
Docker
还鼓励面向服务的体系结构和微服务架构。
Docker
推荐单个容器只运行一个
应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序
或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调
试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,可以在一个容器中
运行多个应用程序)
容器与虚拟机比较
图片比较了
Docker
和传统虚拟化方式的不同之处,可见容器是在操作系统层
面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
Hypervisor虚拟了硬件,可以装不同的操作系统 ,在不同的操作系统上安装各自的环境,完成代码部署
docker Engine是在环境和本机操作系统之间做了隔离,但所有环境依旧使用的是本机的操作系统。
与传统的虚拟机相比,Docker优势体现为启动速度快、占用体积小。
Docker 组件
Docker服务器与客户端
Docker
是一个客户端
-
服务器(
C/S
)架构程序。
Docker
客户端只需要向
Docker
服务
器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。
Docker
提
供了一个命令行工具
Docker
以及一整套
RESTful API
。你可以在同一台宿主机上运行
Docker
守护进程和客户端,也可以从本地的
Docker
客户端连接到运行在另一台宿主机上
的远程
Docker
守护进程。
Docker镜像与容器
镜像是构建Docker
的基石。用户基于镜像来运行自己的容器。镜像也是
Docker
生命
周期中的
“
构建
”
部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步
构建出来。例如:
添加一个文件;
执行一个命令;
打开一个窗口。
也可以将镜像当作容器的
“
源代码
”
。镜像体积很小,非常
“
便携
”
,易于分享、存储和更
新。
Docker
可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进
容器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认
为,镜像是
Docker
生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。 容
器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件
或者服务。
所以
Docker
容器就是:
一个镜像格式;
一些列标准操作;
一个执行环境。
Docker
借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,
Docker
将这个
模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而
Docker
运输软件。
和集装箱一样,
Docker
在执行上述操作时,并不关心容器中到底装了什么,它不管
是
web
服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的
方式将内容
“
装载
”
进去
Docker
也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传
到
Registry
,然后下载到一个物理的或者虚拟的服务器来测试,在把容器部署到具体的主
机中。像标准集装箱一样,
Docker
容器方便替换,可以叠加,易于分发,并且尽量通
用。
Registry(注册中心)
Docker用Registry来保存用户构建的镜像。
Registry
分为公共和私有两种。
Docker
公司运营公共的
Registry
叫做
Docker Hub
。用户可以在
Docker Hub
注册账号,分享并保
存自己的镜像(说明:在
Docker Hub
下载镜像巨慢,可以自己构建私有的
Registry
)
https://hub.docker.com/