Host OS
Server
Docker学习之基础知识
Docker是一个开源项目,诞生于2013年初,最初是dotCloud公司内部的一个业余 项目。它基于Google公司推出的Go语言实现。
Docker项目的目标是实现轻量级的操作系统虚拟化解决方案。Docker的基础是 Linux容器(LXC)等技术。在LXC的基础上Docker进行了进一步的封装,让用户不需 要去关心容器的管理,使得操作更为简便。用户操作Docker的容器就像操作一个快速轻量 级的虚拟机一样简单。
图1虚拟机的Guest OS层和Hypervisor层在docker屮被Docker Engine层所替代。虚 拟机的Guest OS即为虚拟机安装的操作系统,它是一个完整操作系统内核;虚拟机的 Hypervisor层可以简单理解为一个硬件虚拟化平台,它在Host OS是以内核态的驱动存在的。
Virtual Machines
Each virtualized applicati on in eludes not only the application ・ which may be only 10s of MB - and the necessary binaries and libraries, but also an entire guest operating system - which may weigh 10s of GB
图l虚拟机
Docker
The Docker Engine container comprises just the application and its dependencies. It runs as an isolated process in userspace on the host operating system. sharing the kernel with other containers Thus, it enjoys the resource isolation and allocation benefits of VMs but is much more portable and efficient
图二 Docker
docker并没有和虚拟机一样利用一个完全独立的Guest OS实现坏境隔离,它利用的是 目前Linux内核本身支持的容器方式实现资源和坏境隔离。简单的说,docker利用namespace 实现系统坏境的隔离;利用Cgroup实现资源限制;利用镜像实现根忖录坏境的隔离。
1.Docker 优势
作为-•种新兴的虚拟化方式,Docker跟传统的虚拟化方式相比具有众多的优势。 首先,Docker容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。 其次,Docker对系统资源的利用率很高,一台主机上可以同吋运行数千个Docker容器。 容器除了运行其屮应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的 开销尽量小。传统虚拟机方式运行10个不同的应用就要起10个虚拟机,而Docker只需 要启动10个隔离的应用即可。
具体说来,Docker在如下几个方面具有较大的优势:
更快速的交付和部署
对开发和运维(devop)人员来说,最希望的就是一次创建或配置,可以在任意地方正常运 行。
更高效的虚拟化
Docker容器的运行不需要额外的hypervisor支持,它是内核级的虚拟化,因此可以实现更 高的性能和效率。
1、docker相对于物理机其计算能力几乎没有损耗,而虚拟机对比物理机则有着非常明显的 损耗。艰拟机的计算能力损耗在50%左右。
2、 运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存 利用率上docker将会在效率上有优势;
3、 docker利用的是宿主机的内核,而不需要Guest OSo因此,当新建一个容器时,docker不 需要和熄拟机一样重新加载一个操作系统内核,避免了虚拟机启动吋所需的系统引导吋间和 操作系统运行的资源消耗;
4、 在应用程序内存访问上,虚拟机的应用程序要进行2次的虚拟内存到物理内存的映射, 读写内存的代价比docker的应用程序高。
虚拟内存 | |
暮虚拟机OS | |
虚拟物理 | |
虚拟内存 | 地址 |
OS内核 | OS内核 |
物理地址 | 物理地址 |
Docker 程序 E | 趁拟机应用程序 |
更轻松的迁移和扩展
Docker容器几乎可以在任意的平台上运行,包括物理机、帰拟机、公有云、私有云、个人 电脑、服务器等。这种兼容性可以让用户把一个应用程序从一个平台直接迁移到另外一个。
更简单的管理
使用Docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量 的方式被分发和更新,从而实现自动化并且高效的管理。
与传统虚拟机比较
特性 | 容器 | 虚拟机 |
启动 | 秒级 vim编辑器下载与安装 | 分钟级 |
硬盘使用 | 一般为MB | 一般为GB |
性能 | 接近原生 | 弱于 |
系统支持量 | 单机支持上千个容器 | 一般几十个 |
2.Docker 劣势
前面的内容主要论述docker相对于虚拟机的优势,但docker也不是完美的系统。相对于虚 拟机,docker还存在着以下几个缺点:
>资源隔离方面不如虚拟机,docker是利用cgroup实现资源限制的,只能限制资源消耗 的最大值,而不能隔绝其他程序占用自己的资源。
>安全性问题。docker 0前并不能分辨具体执行指令的用户,只要一个用户拥有执行 docker的权限,那么他就可以对docker的容器进行所有操作,不管该容器是否是由该 用户创建。比如A和B都拥有执行docker的权限,由于docker的server端并不会具体 判断docker clinet是由哪个用户发起的,A可以删除B创建的容器,存在一定的安全风 险。
>docker目前还在版本的快速更新中,细节功能调整比较大。一些核心模块依赖于高版本 内核,存在版本兼容问题
Docker的基本概念
Docker包括三个基本概念
>镜像(Image)
>容器(Container)
>仓库(Repository)
镜像(Image)
Docker镜像就是一个只读的模板。
例如:一个镜像可以包含一个完整的ubuntu操作系统环境,里面仅安装了 Apache或用户 需要的其它应用程序。
镜像可以用来创建Docker容器。
Docker提供了一个很简单的机制来创建镜像或者更新现有的镜像,用户甚至可以直接从其 他人那里下载一个已经做好的镜像来直接使用。
容器(Container)
Docker利用容器來运行应用。
容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离 的、保证安全的平台。
可以把容器看做是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和 网络空间等)和运行在其中的应用程序。
仓库(Repository)
仓库是集屮存放镜像文件的场所。有时候会把仓库和仓库注册服务器(Registry)混为一谈, 并不严格区分。实际上,仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个 镜像,每个镜像有不同的标签(tag)o
仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
最大的公开仓库是Docker Hub,存放了数量庞大的镜像供用户下载。国内的公开仓库包括 Docker Pool等,可以提供大陆用户更稳定快速的访问。
当然,用户也可以在本地网络内创建一个私有仓库。
当用户创建了自己的镜像之后就可以使用push命令将它上传到公有或者私有仓库,这样下 次在另外一台机器上使用这个镜像时候,只需要从仓库上pull下来就可以了。
安装docker
1.在 yum repository 增加 docker 的 repository
# sudo vim /pos.po
##在vim编辑器中输入以下内容后保存
|dockcrrcpo| name=Docker Repository baseurl=/rep<)/main/centos/$releasever/ cnablcd=1
gpgcheck=l
gpgkey=hllps:///gpg
2.安装 docker-engine
yum install lvm2
yum install docker-engine
重新安装的话需需要删除docker的配置和数据目录,否则会有垃圾数据
rm -rf /usr/bin/docker
rm -rf /var/lib/docker [root@localhost /]# ps aux|grep docker
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论