Docker
一、虚拟化的三种架构
虚拟化的类型:基于硬件为基础,以软件的的形式模拟硬件设备(在一定的程度上解决了性能利用率的问题)–>趋近于物理设备的性能(在提高利用率的同时,尽可能提高性能)
KVM–>全虚产品–>全部都是使用软件形式定义的功能/模拟的硬件设备
EXSI–>半虚产品–>
容器
二、docker基础
docker是一个用于开发,交互和运行应用程序的开放平台。docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
Dcoker是基于容器技术的轻量级虚拟化解决方案
docker是力容器技术,把linux的cgroup、namespaces等容器底层技术进行完美的封装、并抽象为用户提供创建和管理容器的便捷界面(命令行cli、api等) c/s
1.沙箱
在计算机安装领域,沙箱是一种程序的隔离运行机制
Sandboxie(又叫沙箱、沙盘)即是一个虚拟系统程序,允许你在沙盘环境中运行浏览器或其他程序,因此运行所产生的变化可以随后删除。它创造了一个类似沙盒的独立作业环境,在其内部运行的程序并不能对硬盘产生永久性的影响。 在网络安全中,沙箱指在隔离环境中,用以测试不受信任的文件或应用程序等行为的工具。
沙箱是一种按照安全策略限制程序行为的执行环境。早期主要用于测试可疑软件等,比如黑客们为了试用某种病毒或者不安全产品,往往可以将它们在沙箱环境中运行。
经典的沙箱系统的实现途径一般是通过拦截系统调用,监视程序行为,然后依据用户定义的策略来控制和限制程序对计算机资源的使用,比如改写注册表,读写磁盘等。
2、docker的使用场景
打包应用程序简单部署
可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云
持续集成和持续交付(CI/cD) :开发到测试发布
部署微服务
提供PAAS产品(平台即服务){OpenStack的云主机类似于阿里云的ECs,属于IAAS、Docker (K8S)属于PAAS}
IAAS:基础设施即服务(裸金属)
PAAS:平台即服务(docker)
SAAS :应用即服务
K8s image镜像+ container容器的方式
war jar—》github gitlab 私有仓库(代码仓库)—》enkins(测试)(应用程序封装/构建镜像)—》运维下载,使用容器技术进行
运行/发布打包应用程序简单部署
可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云
持续集成和持续交付(cI /cD) :开发到测试发布部署微服务
提供PAAs产品(平台即服务){OpenStack的云主机类似于阿里云的ECS,属于IAAS、Docker (K8s)属于PAAS }
3、Docker引擎(Docker Engine)
Docker Engine是具有以下主要组件的客户端-服务器应用程序(C/s端):
服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。
服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。
命令行界面(CLI)客户端( docker命令)。
Docker Engine是具有以下主要组件的c/s客户端-服务器应用程序:
server端:服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。
CIENT端:REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。命令行界面(CLI)客户端( docker命令)。
docker runI
docker start
docker rm
客户端传入docker指令/命令—》通过restAPI—》进入内核中的docker-server端——》server端进行处理
—》通过rest AP工返回给docker-client端进行展示
4、docker的三大组件
Docker images:镜像
一组资源集合,包含了应用程序软件包、应用程序相关的依赖包、运行应用程序所需要的基础环境(泛指操作系统环境),可以理解为容器的模板
Docker container:容器
基于镜像的一种运行时状态
Docker registry:镜像仓库
存放image 镜像,仓库大类:1、公共仓库—》docker hub 2、私有仓库
存储镜像的地方,默认在公共的Docker Hub上查找,可以搞个人仓库。
5、docker架构
Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类
Docker采用 C/S架构 Docker daemon 作为服务端接受来自客户的请求,并处理这些请求(创建、运行、分发容器)。 客户端和服务端既可以运行在一个机器上,也可通过 socket 或者RESTful API 来进行通信。
Docker daemon 一般在宿主主机后台运行,等待接收来自客户端的消息。 Docker 客户端则为用户提供一系列可执行命令,用户用这些命令实现跟 Docker daemon 交互。
Docker使用客尸端-服务器架构。Docker 客尸端与Docker
守护进程进行对话,该守护进程完成了构建,运行和分发Docker容器的繁重工作。
Docker区别于传统的虚拟化,不需要虚拟硬件资源,直接使用容器引擎,所以速度快
Docker client:r客户端/提供一个与用户交互,展示的平台+管理、控制docker服务端(功能)的工具 docker run,客户端会将这些命令发送到dockerd,以执行这些命令。该docker命令使用DockerAPI。Docker客户端可以与多个守护程序通信。
Docker daemon:守护进程
Docker守护程序( dockerd)侦听Docker
APr请求并管理Docker对象,例如图像,容器,网络和卷。守护程序还可以与其他守护程序通信以管理Docker服务。
6、名称空间(Namespaces)
名字空间除了系统定义的名字空间之外,还可以自己定义,定义名字空间用关键字“namespace”,使用名字空间时用符号“::”指定。
Docker使用一种称为namespaces提供容器的隔离工作区的技术。运行容器时,Docker会为该容器创建一组名称空间。
这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间中运行,并且其访问仅限于该名称空间。
Docker Engine在 Linux上使用以下名称空间:该pid命名空间:进程隔离(PID:进程ID)。
6.1、docker里使用的6个名称空间
cgroup资源控制与namespaces 结合控制管理了6个名称空间资源(以下):
mount:文件系统,挂载点—》》一个文件系统内,不能重复挂载一个指定目录,例如:/mntuser操作进程的用户和用户组
pid:进程编号
uts:主机名和主机域
ipc:信号量、消息队列,共享内存(理解,不同的应用调用内存资源的时候应该使用不同的内存空间)
net:网络设备、网络协议栈、端口等
注:
cgroup:资源管理技术
7、控制组(control groups)
Linux上的Docker引擎还依赖于另一种称为控制组( cgroups)的技术。cgroup将应用程序限制为一组特定的资源。控制组允许DockerEngine将可用的硬件资源共享给容器,并有选择地实施限制和约束。例如,您可以限制特定容器可用的内存。
8、docker三要素
镜像:模板
容器:基于镜像,运行状态/运行时状态
仓库:存放镜像模板
三、虚拟化与容器的区别
四、docker优势
1、docker优势
docker 把容器化技术做成了标准化平台CAAs ( docker统一/指定了容器化技术的标准化平台)
使用docker有什么意义(实现了3个统一)
docker 引擎统一了基础设施环境-docker环境—》image—》封装一个简易的操作系统(3.O+G )
docker 引擎统一了程序打包(装箱/封装-类比于集装箱)方式-docker镜像――—》images4 docker 引擎统一了程序部署(运行)方式-docker容器
docker 把容器化技术做成了标准化平台CAAs ( docker统一/指定了容器化技术的标准化平台)
使用docker有什么意义(实现了3个统一)
docker 引擎统一了基础设施环境-docker环境—》image—》封装一个简易的操作系统(3.O+G )
3 docker 引擎统一了程序打包(装箱/封装-类比于集装箱)方式-docker镜像――—》images4 docker 引擎统一了程序部署(运行)方式-docker容器
———》基于镜像-》运行为容器(可运行的环境)
实现了一次构建、多次、多处使用
2、和虚拟化比有什么优势
docker
启动快速属于秒级别。虚拟机通常需要几分钟去启动
docker
需要的资源更少, docker
在操作系统级别进行虚拟化, docker
容器和内核交互,几乎没有性能损耗,性能优于通过 Hypervisor
层与内核层的虚拟化
docker
更轻量, docker
的架构可以共用一个内核与共享应用程序库,所占内存极小。同样的硬件环境, Docker
运行的镜像数远多于虚拟机数量,对系统的利用率非常高
与虚拟机相比, docker
隔离性更弱, docker
属于进程之间的隔离,虚拟机可实现系统级别隔离
安全性: docker
的安全性也更弱。 Docker
的租户 root
和宿主机 root
等同,一旦容器内的用户从普通用户权限提升为root权限,它就直接具备了宿主机的root权限,进而可进行无限制的操作。虚拟机租户 root
权限和宿主机的 root
虚拟机权限是分离的,并且虚拟机利用如 Intel
的 VT-d
和 VT-x
的 ring-1
硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击
可管理性: docker
的集中化管理工具还不算成熟。各种虚拟化技术都有成熟的管理工具,例如 VMware vCenter
提供完备的虚拟机管理能力
高可用和可恢复性: docker
对业务的高可用支持是通过快速重新部署实现的。虚拟化具备负载均衡,高可用,容错,迁移和数据保护等经过生产实践检验的成熟保障机制, VMware
可承诺虚拟机 99.999%
高可用,保证业务连续性
快速创建、删除:虚拟化创建是分钟级别的, Docker
容器创建是秒级别的, Docker
的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间
交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化。 Docker
在 Dockerfile
中记录了容器构建过程,可在集群中实现快速分发和快速部署
五、安装docker
1、环境设置
[root@localhost ~]#systemctl stop firewalld.service
[root@localhost ~]#setenforce 0
2、安装依赖环境
[root@localhost ~]#yum install -y yum-utils device-mapper-persistent-data lvm2
3、设置阿里云镜像
[root@localhost ~]#cd /etc/yum.repos.d/
[root@localhost yum.repos.d]#yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror, langpacks
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
4、yum安装docker
[root@localhost yum.repos.d]#yum install -y docker-ce
5、设置镜像加速器
镜像加速器注册地址:https://help.aliyun.com/document_detail/60750.html
注册步骤:
输入网址进入以下页面
[root@localhost yum.repos.d]#sudo tee /etc/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://y9hsd18p.mirror.aliyuncs.com"]
> }
> EOF
{
"registry-mirrors": ["https://y9hsd18p.mirror.aliyuncs.com"]
}
[root@localhost yum.repos.d]#systemctl daemon-reload ##重启守护进程
[root@localhost yum.repos.d]#systemctl restart docker ##重启docker
6、网络优化
[root@localhost yum.repos.d]#vim /etc/sysctl.conf
##最后一行插入
net.ipv4.ip_forward=1
try-mirrors": [“https://y9hsd18p.mirror.aliyuncs.com”]
}
[root@localhost yum.repos.d]#systemctl daemon-reload ##重启守护进程
[root@localhost yum.repos.d]#systemctl restart docker ##重启docker
6、网络优化
```bash
[root@localhost yum.repos.d]#vim /etc/sysctl.conf
##最后一行插入
net.ipv4.ip_forward=1
六、小结
面试题:
使用docker有什么意义
docker引擎统一了基础设施环境-docker容器环境(引擎)
docker引擎统一了程序打包(装箱)方式-docker镜像
docker引擎统一了程序部署(运行)方式-docker容器
镜像————》封装的某一个时刻的服务/应用状态
容器————》应用跑起来的状态(正常提供服务的状态-运行时)
(容器----“应用跑起来的状态(正常提供服务的状态-运行时)