Docker

目录

引言

一、虚拟化(以软件的方式实现硬件的功能)

1.虚拟化背景

2.虚拟化技术

3.虚拟化技术发展

4.虚拟化原理

5.虚拟化类型

(1)全虚拟化(寄居型,用别人的操作系统)

(2)半虚拟化(操作系统是自己的,大部分都是收费的)

二、虚拟化到容器的演变

三、容器的介绍

1、容器的优点

2、容器在内核中支持2种重要技术

四、Docker

1.Docker概述

(1)docker定义

(2)使用Docker的意义(优势,三个统一)

2.Docker的使用场景

开发

打包应用程序简化部署

持续集成和持续交付(CI/CD) :开发到测试发布

部署微服务

3.Docker引擎

4.Docker三大组件

Docker images:镜像(模板)

Docker container:容器(基于镜像,运行状态/运行时状态)

Docker registry:镜像仓库(存放镜像,模板)

扩展知识

5. Docker流程

6.Docker与虚拟机的区别

如何防范进程隔离带来的隐患

7. Docker底层原理(namespace+cgroup)

名称空间(namespace)一》资源隔离--用容器化技术封装

控制组(Control groups) 


引言

以linux而言,linux操作系统会有一个主进程pid=1派生出其他进程来控制不同服务

例如: pid=2 ——> python pid=3——>java pid4——>php,三个服务可能会相互影响

使用者期望将这三个不同的服务,跑在不同的运行时环境中实现相互不影响,同时不会增加服务器成本

——> 延伸出——>能否将这三种服务分别封装起来——>KVM虚拟化技术,实现了一个操作系统模拟多个操作系统/不同的运行时环境

随着技术发展——>虚拟化技术开销较大(例如:只 要运行一个py脚本,想要使用虚拟化方式实现,还需要安装一个操作系统,并不方便/合理)

——>延伸出容器技术

虚拟化层的抽象层(用户层)剥离,使用docker engine来替代(来宾操作系统去除),只要通过引擎就可以直接连接到宿主机操作系统中,极大减小了开销

一、虚拟化(以软件的方式实现硬件的功能)

1.虚拟化背景

美国环境保护EPA报告中曾经统计过一组统计数据: EPA研究服务器和数据中心得能源效率时发现,实际上服务器只有5%得时间时在工作的,其他时间一直处于休眠状态

软件资源是没有硬件资源性能高(稳定和效率)的(相同功能)

2.虚拟化技术

通过虚拟化技术将一台计算机虚拟为多台逻辑计算机,在一台计算机 上同时运行多个逻辑计算机,同时每个逻辑计算机可运行不同的操作系统,应用程序都可以在相互独立的空间内运行而互相不影响,从而提高计算机的工作效率

1、在一个操作系统中(win10) 模拟多个操作系统(centos. win10、 suse) ,同时每个操作系统可以跑不同的服务(nginx+tomcat) ,从而实现一台宿主机搭建一个集群 (从整体)

2、 通过软件/应用程序的方式,来实现物理硬件的功能 【ensp,以软件形式实现物理设备的功能(二层交换机路由器、三层交换机等)】

3.虚拟化技术发展

1961年,IBM709机器实现了分时系统,将CPU占用切分为多个极短的时间片(1/100sec)每一个时间片执行不同的工作, 通过对这些时间片进行轮询,从而将一个CPU伪装成多个CPU

1972年,IBM正式将system370机的分时系统命名为虚拟机

1990年,IBM推出的system390机支持逻辑分区 (将一个CPU分为多份, 相互独立,也就是逻辑分割)

Xen 2003年问世,是一个外部的hypervisor/VMM程序 (虚拟机管理程序), 能够控制宿主机和给多个客户机分配资源

KVM: 2007年问世,现已内置在kernel内核中的

Xen支持的虚拟化技术:全虚拟化,半虚拟化

KVM:支持的虚拟化技术:全虚拟化

4.虚拟化原理

5.虚拟化类型

(1)全虚拟化(寄居型,用别人的操作系统)

将物理硬件资源全部通过软件的方式抽象化,最后进行调用

使用的方法

使用hypervisor (VMM)软件,其原理是在底层硬件和服务器之间建立一个抽象层, 而基于核心的虚拟机是面向Linux系统的开源产品hypervisor(VMM)可以捕捉CPU的指令, 为指令访问硬件控制器和外设充当中介

(2)半虚拟化(操作系统是自己的,大部分都是收费的)

需要修改操作系统

二、虚拟化到容器的演变

三、容器的介绍

1、容器的优点

  • 灵活:即使是最复杂的应用也可以集装箱化
  • 轻量级:容器利用并共享主机内核
  • 可互换:可以即时部署更新和升级
  • 便携式:可以在本地构建,部署到云,并在任何地方运行
  • 可扩展:可以增加并自动分发容器副本
  • 可堆叠:可以垂直和即时堆叠服务

容器是在linux上本机运行,并与其他容器共享主机的内核,它运行的是一个独立的进程,不占用其他任何可执行文件的内存,非常轻量。

虚拟机运行的是一个完整的操作系统,通过虚拟机管理程序对主机资源进行虚拟访问,相比之下需要的资源更多。

2、容器在内核中支持2种重要技术

docker本质就是宿主机的一个进程,docker是通过namespace实现资源隔离,通过cgroup实现资源限制,通过写时复制技术copy-on-write实现了高效的文件操作(类似虚拟机的磁盘比如分配500g并不是实际占用物理磁盘500g)

四、Docker

1.Docker概述

(1)docker定义

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

沙箱(Sandbox):在计算机安全领域,沙箱是一种程序 的隔离运行机制Docker在2013年一炮而红,直到现在,已经成为容器技术的代名词。Docker从一开始就以提供标准的运行时环境为目标,真正做到"build once, run anywhere",可以将同一个构建版本用于开发、测试、预发布、生产等任何环境,并且做到了与底层操作系统的解耦。在此基础上还进一步发展出了CaaS (容器即服务)技术。

2013年将容器化技术做成了标准化平台

(2)使用Docker的意义(优势,三个统一)

 docker 引擎统一了标准化平台

docker 引擎统一了程序打包(装箱)方式-docker镜像

docker 引擎统一了程序部署运行时的环境-docker 容器

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

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

话术

使用docker有什么意义

docker引擎统一了 基础设施环境-docker环境一》 image 一》 封装一个简易的操作系统 docker 引擎统一了程序打包(装箱/封装-类比于集装箱)方式-docker镜像一 》images docker 引擎统一了程序部署(运行)方式-docker容器 一》 基于镜像一》运行为容器(可运行的环境) 实现了一次构建、多次、多处使用  

2.Docker的使用场景

开发

只要打包jar包或者var包,上传镜像就可以了

打包应用程序简化部署

可脱离底层硬件任意迁移(实现了应用的隔离,将应用拆分并进行解耦),例如:服务器从腾讯云迁移到阿里云

持续集成和持续交付(CI/CD) :开发到测试发布

企业中,开发到运维整体流程

①首先由开发进行代码研发,研发好之后进行编译、打包
PS: 打包:一 般会使用maven工具打war包或者jar包

②打完包之后,放置对应的运行时环境中,进行试运行
PS:这里的运行时环境指:例如tomcat ( java环境) php ( php环境)等

③中间会加上一-些测试过程,测试代码的有效性、可用性和可执行性

④以上测试完成,运维会将这个软件包拉过来,运行在实际生产的运行时环境中

问题:(容器的特性可以解决这个问题)

在以上的第②点中,不同开发语言的运行时环境混淆在一起运行会有很大的隐患,以及不便

传统中,所谓的运行时环境,例如tomcat (java环境) php (php环境)等
容器中,所谓的运行时环境,指的试“容器”内部
在此之前,容器是一个运行时环境,构成容器的组件是image镜像(一个运行时环境的模板)

部署微服务

提供PAAS产品(平台即服务){OpenStack的云主机类似于阿里云的ECS, 属于IAAS、 Docker (K8S) 属于PAAS}

IAAS: 基础设施即服务 (硬件,五大资源)

SAAS:应用即服务(LAMP)

PAAS: 平台即服务(docker)

3.Docker引擎

 Docker Engine是具有以下主要组件的C/S客户端-服务器应用程序:

server端 :服务器是一种长期运行的程序,称为守护程序进程( dockerd命令)。

CLIENT端 : REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。

命令行界面(CLI)客户端(docker命令)。

docker run docker start docker rm客户端传入docker指令/命令一》通过restAPI一》 进入内核中的docker-server端-》server端进行处理 》通过rest API返回给docker-client端进行展示

4.Docker三大组件

Docker images:镜像(模板)

Docker的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板
通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。

Docker container:容器(基于镜像,运行状态/运行时状态)

Docker的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证平台的安全性。
可以把容器看做是要给简易版的linux环境(包括root用户权限、镜像空间、用户空间和网络空间等)和运行在其中的应用程序。

Docker registry:镜像仓库(存放镜像,模板)

Docker仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用push命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。

总结:

Docker是容器管理工具,容器由镜像创建而来,镜像从仓库中获取而来,仓库分为公有、私有。 存储镜像的地方,默认在公共的Docker,Hub上查找,也可以搞个人本地仓 库。

扩展知识

仓库分类:

公有仓库:Docker官方仓库  (docker hub)

私有仓库:个人化、私有化的仓库 (registry harbor)

Docker 的镜像、容器、日志等内容全部都默认存储在 /var/lib/docker 目录下。               

5. Docker流程

6.Docker与虚拟机的区别

不同点container(容器)VM(虚拟机)
启动速度秒级分钟级
运行性能接近原生(直接在内核中运行)(与宿主机共享内核)50%左右损失
磁盘占用MBGB
数量成百上千一般几十台
隔离性进程级别(进程隔离)(某种程度上有安全隐患)系统级别(系统隔离更彻底)
操作系统主要支持Linux几乎所有
封装程度只打包项目代码和依赖关系完整的操作系统,与宿主机隔离

如何防范进程隔离带来的隐患

隐藏真实IP:防火墙映射,keepalive

改变常用端口

7. Docker底层原理(namespace+cgroup)

名称空间(namespace)一》资源隔离--用容器化技术封装

Docker使用一种称为namespaces提供容器的隔离工作区的技术。运行容器时,Docker 会为该容器创建一组名称空间。

这些名称空间提供了一层隔离。容器的每个方面都在单独的名称空间中运行,并且其访问仅限于该名称空间。

Docker Engine在Linux.上使用以下名称空间:

cgroup资源控制与namespaces 结合控制管理了6个名称空间资源(以下)

该pid命名空间:进程隔离(PID: 进程ID)。

该net命名空间:管理网络接口(NET: 网络)。网络设备、网络协议栈、端口等

该ipc命名空间:管理访问IPC资源(IPC: 进程间通信)。信号量,队列,共享内存

该mnt命名空间:管理文件系统挂载点(MNT: mount)。一个文件系统内不能重复挂载一个指定目录

该uts命名空间:隔离内核和版本标识符。(UTS:Unix时间共享系统)。主机名和主机域

该user命名空间:操作进程的用户和用户组

cgroup :资源管理技术( LINUX--->cgroup )作用:限制使用资源

控制组(Control groups) 

Linux上的Docker引擎还依赖于另一种称为控制组(cgroups)的技术。cgroup将应用程序限制为一组特定的资源。控制组允许DockerEngine将可用的硬件资源共享给容器,并有选择地实施限制和约束。例如,您可以限制特定容器可用的内存。

cgroups管理所支持的版本3.8版本
所以1inux内核版本至少为3.8

总结:Dcoker是基于容器技术的轻量级虚拟化解决方案 docker是容器技术,把linux的cgroup、 namespaces 等容器底层技术进行完美的封装、并抽象为用户提供创建和管理容器的便捷界面(命令行Cli、api等)C/S 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值