一、虚拟化简介
1、虚拟化概念
计算机虚拟化(Computing Virtualization),一种资源管理技术,是指通过虚拟化技术将一台计算机的各种实体资源 , 如处理器 , 网络 , 内存及存储等 , 抽像 , 转换后呈现出来 , 打破实体结构间的不可切割的障碍,虚拟成多台逻辑计算机。在一台计算机上同时运行多个逻辑计算机,每个逻辑计算机可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
虚拟化使用软件的方法重新定义划分 IT 资源,可以实现 IT 资源的动态分配、灵活调度、跨域共享,提高 IT 资源利用率,使 IT 资源能够真正成为社会基础设施,服务于各行各业中灵活多变的应用需求。
虚拟化目标 :
同一主机上运行多个系统或应用 , 从而提高系统资源的利用率 , 同时带来降低成本 , 方便管理和容错容灾
2、虚拟化级别
(1)完全虚拟 -- 处理器密集型技术,因为它要求 hypervisor 管理各个虚拟服务器,并让它们彼此独立 (Vmware/Virtual PC)
(2)准虚拟 -- 改动客户操作系统,让它以为自己运行在虚拟环境下,能够与 hypervisor 协同工作 (para-virtualization)
(3)系统虚拟 -- 没有独立的 hypervisor 层。相反,主机操作系统本身就负责在多个虚拟服务器之间分配硬件资源,并且让这些服务器彼此独立
(4)桌面虚拟化—桌面虚拟化主要功能是将分散的桌面环境集中保存并管理起来,包括桌面环境的集中下发,集中更新,集中管理。桌面虚拟化使得桌面管理变得简单,不用每台终端单独进行维护,每台终端进行更新
所以,Docker 和其他容器(container)技术都属于系统虚拟化范畴
3、虚拟化类型
对于系统虚拟化技术来说,虚拟层为用户提供了一个完整的虚拟机:包括内核在内的一个完整的系统镜像。 CPU 虚拟化技术可以为每个用户提供一个独享且和其他用户隔离的系统环境,虚拟层可以为每个用户分配虚拟化后的 CPU 、内存和 IO 设备资源
物理机我们一般称为宿主机(Host),宿主机上面的虚拟机称为客户机(Guest)。那么 Host 是如何将自己的硬件资源虚拟化,并提供给 Guest 使用的呢?
这个主要是通过一个叫做 Hypervisor 的程序实现的。根据 Hypervisor 的实现方式和所处的位置,虚拟化按照结构分为两种类型:1型虚拟化和2型虚拟化。
4、虚拟化分类
1型虚拟化
Hypervisor 直接安装在物理机上,多个虚拟机在 Hypervisor 上运行。Hypervisor 实现方式一般是一个特殊定制的 Linux 系统。Xen 和 VMWare 的 ESXi 都属于这个类型。
2型虚拟化
物理机上首先安装常规的操作系统,比如 Redhat、Ubuntu 和 Windows。Hypervisor 作为 OS 上的一个程序模块运行,并对管理虚拟机进行管理。KVM、VirtualBox 和 VMWare Workstation 都属于这个类型。
理论上讲:
1型虚拟化一般对硬件虚拟化功能进行了特别优化,性能上比2型要高;
2型虚拟化因为基于普通的操作系统,会比较灵活,比如支持虚拟机嵌套。嵌套意味着可以在KVM虚拟机中再运行KVM。
容器位于前两者之上,以进程的形式存在于操作系统之中
容器为应用程序提供了隔离的运行空间:每个容器内都包含一个独享的完整用户环境空间,并且一个容器内的变动不会影响其他容器的运行环境。为了能达到这种效果,容器技术使用了一系列的系统级别的机制诸如:利用Linux namespaces 来进行空间隔离,通过文件系统的挂载点来决定容器可以访问哪些文件,通过 cgroups 来确定每个容器可以利用多少资源。此外容器之间共享同一个系统内核,这样当同一个库被多个容器使用时,内存的使用效率会得到提升。
二、docker简介
1、容器虚拟化
容器( container-based )虚拟化方案,充分利用了操作系统本身已有的机制和特性,以实现轻量级的虚拟化(每个虚拟机安装的不是完整的虚拟机),甚至有人把他称为新一代的虚拟化技术, Docker 无疑就是其中的佼佼者
在一台服务器上同时运行上百个虚拟机,肯定会被认为是痴人说梦,而在一台机器上同时运行一千个 Docker 容器,这已成为现实
2、Docker 的目标:
Build,Ship and Run Any App,Anywhere— 即通过对应用组件的封装 (Packaging), 发布(Distribution), 运行(runing) 等生命周期的管理 , 达到应用组件级别的”一次封装 , 到处运行”。
3、docker的组成
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
一个完整的Docker有以下几个部分组成:
(1)dockerClient客户端
(2)Docker Daemon守护进程
(3)Docker Image镜像
(4)DockerContainer容器
容器:
存储、运输工具
实现对容器内部的物品实现包含(实现了一个相对隔离的环境)
容器:模拟(虚拟)出一个相对隔离的空间
镜像:
用来创建容器的模版,放在镜像仓库中,例如nginx,redis,httpd等
4、docker重要网站
Docker官网:https://www.docker.com/
Docker官方文档:https://docs.docker.com/
Docker仓库:https://hub.docker.com/
Docker中文社区:http://www.docker.org.cn/
Docker官方英文资源:
docker官网:http://www.docker.com
Docker windows入门:https://docs.docker.com/windows/
Docker Linux 入门:https://docs.docker.com/linux/
Docker mac 入门:https://docs.docker.com/mac/
Docker 用户指引:https://docs.docker.com/engine/userguide/
Docker 官方博客:http://blog.docker.com/
Docker Hub: https://hub.docker.com/
Docker开源: https://www.docker.com/open-source
Docker中文资源:
Docker中文网站:http://www.docker.org.cn
Docker入门教程: http://www.docker.org.cn/book/docker.html
Docker安装手册:http://www.docker.org.cn/book/install.html
一小时Docker教程 :https://blog.csphere.cn/archives/22
Docker纸质书:http://www.docker.org.cn/dockershuji.html
DockerPPT:http://www.docker.org.cn/dockerppt.html
三、Docker的特点
1、优点:
(1)启动快,资源占用小 , 资源利用高,快速构建标准化运行环境
(2)创建分布式应用程序时快速交付和部署,更轻松的迁移和扩展,更简单的更新管理
2、局限:
(1)Docker 是基于 Linux 64bit 的,无法在 windows/unix 或 32bit 的 linux环境下使用
(2)LXC 是基于 cgroup 等 linux kernel 功能的,因此 container 的 guest 系统只能是linux
(3)隔离性相比 KVM 之类的虚拟化方案还是有些欠缺,所有 container 公用一部分的运行库
(4)管理相对简单,主要是基于 namespace 隔离
(5)cgroup 的 cpu 和 cpuset 提供的 cpu 功能相比 KVM 的等虚拟化方案相比难以度量 ( 所以 dotcloud 主要是按内存收费 )
(6)docker 对 disk 的管理比较有限(docker磁盘存储在一个目录下)
(7)container 随着用户进程的停止而销毁, container 中的 log 等用户数据不便收集
3、docker与虚拟机的比较:
(1)启动快比虚拟机 , 可以秒级启动
(2)对资源占用小 , 宿主机上可运行千台容器
(3)方便用户获取 , 分布 , 和更新应用镜像 , 指令简单 , 学习费用低
(4)通过 Dockerfile 配置文件来灵活的自动创建和部署镜像 & 容器 , 提高工作效率
(5)Docker 除了运行其中应用外 , 基本不消耗其他系统资源 , 保证应用性能同时 , 尽量减小系统开销
docker与kvm的对比
kvm:
1. 虚拟机
2. 使用复杂
3. 启动过程相对慢(分钟)
4. 模版文件较大
5. 和物理完全隔离
6. 模拟的是一个完整系统,可以登录并实现管理
docker:
1. 直接虚拟出来一个用户空间
2. 使用简单
3. 启动非常块(秒级)
4. 模版文件很小(体积小)(容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包)
5. 在一定程度上和物理机隔离
6. 仅仅是模拟一部分用户空间,不方便管理
4、docker使用理由
(1)快速部署服务
(2)多租户
(3)实现隔离
(4)让一个主机运行多个容器
(5)提高开发效率
(6)简化配置过程
(7)实现软件的跨平台
5、docker的主要用途:
(1)提供一次性的环境。比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
(2)提供弹性的云服务。因为 Docker 容器可以随开随关,很适合动态扩容和缩容。
(3)组建微服务架构。通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。
四、docker的安装
1、docker的安装
安装docker需要配置网络源
(1)配置阿里云的网络源
第一步:下载阿里云的docker安装包(yum仓库的目录下)
[root@ren7 yum.repos.d]# wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
第二步:配置extra和epel源
[extra] name=centos extra enabled=1 gpgcheck=0 baseurl=https://mirrors.aliyun.com/centos/7/extras/x86_64/ [epel] name=epel enabled=1 gpgcheck=0 baseurl=https://mirrors.aliyun.com/epel/7Server/x86_64/
第三步:使用yum安装
docker-ce 是社区版,免费的
docker-ee 是企业版,收费的
[root@ren7 ~]# yum install docker-ce -y
(2)配置云唯图书馆的源
第一步:vim /etc/resolv.conf
nameserver 172.16.254.110
第二步:下载docker安装脚本
[root@ren7 ~]# wget http://download2.yunwei.edu/shell/docker.tar.gz
第三步:解压并执行安装脚本
[root@ren7 ~]# tar xzf docker.tar.gz [root@ren7 ~]# cd docker [root@ren7 docker]# ls ca.crt docker-app.tar.gz docker.sh remove.sh [root@ren7 docker]# ls ca.crt docker-app.tar.gz docker.sh remove.sh [root@ren7 docker]# sh docker.sh docker docker-compose docker-containerd docker-containerd-ctr docker-containerd-shim dockerd docker-init docker-proxy docker-runc Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /etc/systemd/system/docker.service. [root@ren7 docker]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@ren7 docker]# cat docker.sh #/bin/bash tar zxvf docker-app.tar.gz -C /usr/local/bin/ mkdir -p /etc/docker mkdir -p /etc/docker/certs.d/reg.yunwei.edu cp ca.crt /etc/docker/certs.d/reg.yunwei.edu/ echo "172.16.254.20 reg.yunwei.edu">>/etc/hosts cat <<EOF>/etc/docker/daemon.json { "registry-mirrors": ["http://cc83932c.m.daocloud.io"], "max-concurrent-downloads": 10, "log-driver": "json-file", "log-level": "warn", "log-opts": { "max-size": "10m", "max-file": "3" } } EOF cat <<EOF>/etc/systemd/system/docker.service [Unit] Description=Docker Application Container Engine Documentation=http://docs.docker.io [Service] Environment="PATH=/usr/local/bin:/bin:/sbin:/usr/bin:/usr/sbin" ExecStart=/usr/local/bin/dockerd ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT ExecReload=/bin/kill -s HUP $MAINPID Restart=on-failure RestartSec=5 LimitNOFILE=infinity LimitNPROC=infinity LimitCORE=infinity Delegate=yes KillMode=process [Install] WantedBy=multi-user.target EOF systemctl daemon-reload && systemctl enable docker.service && systemctl start docker.service
2、docker镜像加速配置
因为docker镜像都在国外,而国内网络访问的比较慢,后续拉取docker镜像十分缓慢,所以在安装docker之后需要配置加速器。
(1)获取阿里云加速地址
第一步:打开阿里云官网
https://www.aliyun.com/?utm_content=se_1000301910
第二步:选择产品与服务 --->镜像与服务
第三步:选择镜像加速器,获取自己docker的加速器地址
(2)vim /etc/docker/daemon.json 中写入如下内容(如果文件不存在请手动创建)
{ "registry-mirrors": ["https://registry.docker-cn.com","https://twk069lg.mirror.aliyuncs.com","http://cc83932c.m.daocloud.io"] }
添加一个网址即可
(3)重启服务
systemctl restart docker