Docker

一、虚拟化的三种架构

虚拟化的类型:基于硬件为基础,以软件的的形式模拟硬件设备(在一定的程度上解决了性能利用率的问题)–>趋近于物理设备的性能(在提高利用率的同时,尽可能提高性能)

KVM–>全虚产品–>全部都是使用软件形式定义的功能/模拟的硬件设备

在这里插入图片描述

EXSI–>半虚产品–>
在这里插入图片描述

容器

在这里插入图片描述

二、docker基础

在这里插入图片描述

docker是一个用于开发,交互和运行应用程序的开放平台。docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 LinuxWindows操作系统的机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

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”,使用名字空间时用符号“::”指定。

  1. 不指定名字空间的变量或函数都是当前名字空间下的变量或函数。
  2. 不定义名字空间的情况下,都属于全局名字空间。
  3. 同一个名字空间可以定义多次。

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 虚拟机权限是分离的,并且虚拟机利用如 IntelVT-dVT-xring-1 硬件隔离技术,这种隔离技术可以防止虚拟机突破和彼此交互,而容器至今还没有任何形式的硬件隔离,这使得容器容易受到攻击

可管理性: docker 的集中化管理工具还不算成熟。各种虚拟化技术都有成熟的管理工具,例如 VMware vCenter 提供完备的虚拟机管理能力

高可用和可恢复性: docker 对业务的高可用支持是通过快速重新部署实现的。虚拟化具备负载均衡,高可用,容错,迁移和数据保护等经过生产实践检验的成熟保障机制, VMware 可承诺虚拟机 99.999% 高可用,保证业务连续性

快速创建、删除:虚拟化创建是分钟级别的, Docker 容器创建是秒级别的, Docker 的快速迭代性,决定了无论是开发、测试、部署都可以节约大量时间

交付、部署:虚拟机可以通过镜像实现环境交付的一致性,但镜像分发无法体系化。 DockerDockerfile 中记录了容器构建过程,可在集群中实现快速分发和快速部署

五、安装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容器

镜像————》封装的某一个时刻的服务/应用状态

容器————》应用跑起来的状态(正常提供服务的状态-运行时)
(容器----“应用跑起来的状态(正常提供服务的状态-运行时)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值