一 容器技术
容器技术是'虚拟化技术的一个分支',Docker只是'其中一个',属于'轻量级的虚拟化'
像阿里'CCE'、Google'GKE'、Tencent'TKE',都有自己的'自研容器',属于同一个'技术类型'
二 Docker的诞生
Docker是dotcloud公司开源的产品,而dotcloud是2010年成立的公司,基于PAAS(Platfrom as a Service) 平台为开发者提供服务的,做服务平台的,2013-10改名为Docker!
说明:任何一门技术也'不可能'在2~3年成立,依赖于某些'底层的技术'-->'namespace和cgroup'
PAAS:已经部署好的运行环境,我们只需要把'应用程序'往上一放就OK
Docker是第三代的PAAS,'运行环境'不是通过脚本的产生,而是'通过Docker的封装'
三 Docker是什么
'解析':Docker到底是什么?
Docker的底层是内核虚拟化技术(Linux Container),Docker只是一个上层封装的工具而已!
1)Linux Container 是一种'内核虚拟化'技术,可以提供轻量级的虚拟化,以便'隔离进程和资源'
2)Docker 是PASS提供商dotcloud开原的一个‘基于LXC‘的高级容器引擎(工具,管理器),源代码'托管'在Github上,基于'Go语言'并遵从'Apach2.0协议'开源!
'关键词':底层实现技术、开发语言、遵循的协议!
go语言:类似C,少一点include,天生支持多线程,现代版的C语言!
Docker的启动是毫秒级别的
(3)Docker的解释说明
公司有一批货物,产品对'不同的人'使用(小孩,孕妇,成年人),货物'不要相互感染'
把一些想要的,'想封装在一起的资源'把它放在'同一个货箱中',将货箱装上车!
OS('货轮')-->在OS基础上的'软件'(理解成集装箱)
1)Docker可以做隔离-->集装箱
2)集装箱与集装箱之间可以相互补充,第一个集装箱没有装完可以装到第二个集装箱中,把两个集装箱绑在一起,而且怎么绑都是我说了算,自由组装,但是得有标准化的手段,这个标准已经被定义了,所以要掌握这些标准来自由组装!
3)集装箱的内容可以由用户自定义,也可以由专业人员制造
内容:可以是天生就来的,或者说是自己一点一点塞进去了!
(4)虚拟机和Docker各自的优缺点!
###########传统虚拟机###########
底层-->Server('硬件')-->Host OS('宿主操作系统') -->Hypervisor(虚拟监视器)-->Guest OS (虚拟机)-->Bins/Lib(lib库)-->App(部署的'应用程序')
分类:完全虚拟化,内核隔离!
优点:不同的应用程序是通过内核隔离,每个都有自己的操作系统!
缺点:对公司而言,操作系统不能带来利益的增长,运行100个操作系统也不会加钱,而是这些上层应用程序的工厂才能加钱!
这些操作系统(Guest OS)都是不需要的,没有环境,应用程序怎么部署,传统尴尬!
#######Docker#######
右边:解决这个问题
Servr--->Host OS -->'Docker Engine' -->Docker Enginee(Docker的管理引擎)-->'Bin/lib-->依赖库' --->App
共享:好几个APP在一个上面,并且共享操作系统!
原来的情形:操作系统运行需要消耗资源(多个虚拟机)!
现在:这种方式,把这些本会消耗的资源给其它应用程序使用,例如Nginx,高并发!
缺点:安全性差,应用程序之间并没有隔离机制!
容器虚拟化消耗的本机不必要的资源最少,同样的硬件属性可以支撑更多的用户访问!但安全性比较差!
消耗过多的必须要的资源,安全性最高(内核)
不同版本的--->对应的内核
宿主操作系统没有了(Guest)
#############Docker的组成##############
(1)Docker的构成
Docker的三大组件:'仓库-->repository'、'容器-->container'、'镜像-->image'
镜像
'镜像是什么'
# 操作系统镜像(最早的理解)--->现在--->Docker的镜像
Docker镜像理解--->'封装好的运行环境'
# 举例:把Nginx优化好之后封装成一个镜像,别人拿到这个镜像之后,运行之后变成容器!
# 什么是运行之后:把它加载,得到容器
容器
#####容器是什么#####
# 容器:正在运行的的运行环境!
# 举例:Nginx正在工作,这个状态可以理解为正在运行的工作环境!
# 镜像跟容器是有转换关系的!
仓库
仓库:'存放镜像',这个位置就是仓库!
# Docker官方的镜像仓库:hub.docker.com!
# 下载下来-->镜像--->运行nginx的运行环境
Docker的组件
Docker Client:'Docker的客户端'-->客户端的连接工具
Dockerd 是一个引擎,类似于一个'守护进程'(dameon),当客户端对其发出命令,执行获取结构,获取操作系统的LXC进行工作!
Docker Server:'接受'用户通过Docker Client'发出请求',并按照相应的的路由规则实现'路由规则'转发!
Docker是怎样优化得到的
# 链接--->问题:操作系统进行更改(ip_forward),两个应用程序需求不一样!
# 解决:加一个空白层(设备),应用优先级大于底层(核心)!
# 注意:每个应用都有一个独立的空白层!
# 更严重:应用A挂了,本身是共享你的操作系统,依赖于你!
# 说明:不用应用程序共享,而是镜像共享!
# 多个镜像:占用很多的存储资源,分层!
分层的理解
RHEL7(1G) -->nginx(200M)-->php -->mysql(5.7)
# mysql的升级-->需要5.8版本,直接把其删除
# 一个镜像有很多个子文件组成(不能超过128层)
# 链接-->镜像的某一层已经有了,会直接跳过,下载别的,减少存储量!
Docker的加速配置
# Docker放在国外(美国)--->现在CDN做的比较好-->稍微快点!
# 阿里,百度-->Docker加速,反向代理!