【docker基础】

1、基础概念

1.1、运行环境:

系统环境、应用环境

1.2、容器:

容器可以将应用程序及其依赖项打包成一个独立的运行环境,使得应用程序可以在不同的计算机上以相同的方式运行,而无需考虑底层操作系统和硬件的差异。

1.3、容器级虚拟化:

  • Docker:
基于PaaS平台为开发者提供服务,容器级虚拟化安全性会低于传统虚拟化
  • CoreOS
    RKT
  • RedHat
    podMan
  • Docker 送给 CNCF
    containerd

1.4、云原生:

  • 云原生是一种新兴的软件开发和部署模式,云原生的核心理念是将应用程序设计为微服务,并使用容器、编排、自动化和持续交付等技术来实现快速部署、弹性伸缩和故障恢复等功能。
  • 第一代paas:当用户加载PAAS时,自动触发构建脚本,从头到尾搭建环境提供给用户
    第二代paas:镜像封装,类似OVF模板技术,展开后即成环境

2、Docker的发展历程

2.1、Linux container

LXC,是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源

2.2、Docker定义

docker是PaaS提供商dotcloud开源的一个基于LXC的高级容器引擎(管理工具,容器还是物理机上的一个进程),源码代码托管在GitHub上,基于GO语言并遵从apache2.0协议开源

Apache协议:开发后,可以闭源,源码售卖
GPL协议:开发后,应该用GPL开源授权;GPL2.0后可以开发后源码二次售卖
  • 计算机语言分类1
    • 低级:
      汇编语言(贴近硬件,效率高)
    • 高级:
      C:语言设计、数据库、桌面操作系统、底层算法、数据挖掘、驱动
      C++:C添加了语法糖,i=i+1;i++
      Python(iaas):生态丰富;人工智能、爬虫(OpenStack)
      Java:跨平台性强;在各种芯片架构用,JVM:(Java虚拟机)软件跑在虚拟机上(安卓)
      Golang(paas):谷歌,21世纪的C语言(并发),支持CPU多核心技术(docker、kubernetes、prometheus)
      R:火狐,21世纪的C语言(安全),加入到linux内核,安全性问题
  • 计算机语言分类2
    • 编译型(代码执行效率高):源码、编译器、可执行文件

      • C
      • Golang
      • Rust
    • 解释型(开发效率高): 代码、解释器、边解释边运行

      • Shell
      • Python
      • PHP
    • 半编译半解释

      • Java

      多级构建

2.3、Docker交付设想

  • Docker 设想是交付运行环境如同海运(互联网),0S 如同一个货轮(docker),每一个在 OS 基础上的软件都如同个集装箱(docker),用户可以通过标准化手段自由组装运行环境(系统环境+应用程序),同时集装箱的内容可以由用户自定义,也可以由专业人员制造
  • Docker hub(docker镜像仓库):https://hub.docker.com/

3、docker与传统虚拟化

传统虚拟化与容器级虚拟化比较
传统虚拟化与容器级虚拟化比较

区别

对比项容器级虚拟化传统虚拟化
资源利用率
应用隔离性
安全性
拓展和部署方便不方便

1.容器级虚拟化没有虚拟化引擎和虚拟机,只有支撑文件;故消耗资源的地方更少,能 够让资源利用率相对传统虚拟化进一步提升
2.传统虚拟化优点在于隔离性更强更安全;容器级虚拟化消耗资源更低,安全性有所下降
3.docker封装运行环境使得用户部署更加方便且拥有一致性的运行环境;维护拓展也更加简便

namespace

namespace:(名字空间)隔离进程和资源
	Namespace是Linux内核提供的一种资源隔离机制,它可以将系统中的全局资源划分为多个独立的命名空间,每个命名空间都有自己的资源副本,相互之间隔离。常见的命名空间包括:
		PID Namespace:进程命名空间,用于隔离进程。
		Network Namespace:网络命名空间,用于隔离网络资源,例如网络接口、IP地址、路由表等。
		Mount Namespace:挂载命名空间,用于隔离文件系统挂载点。
		UTS Namespace:UTS命名空间,用于隔离主机名和域名。
		IPC Namespace:IPC命名空间,用于隔离进程间通信资源,例如消息队列、信号量、共享内存等。
		User Namespace:用户命名空间,用于隔离用户和用户组。
		使用Namespace可以实现资源隔离和容器化等功能,例如Docker就是使用Namespace实现容器隔离的。

4、docker原理

  • Docker是利用LXC内核虚拟化技术隔离进程和资源,使得容器之间相互独立互不干扰。再通过共享内核,达到降低资源消耗的目的
  • 容器是镜像执行的实例,容器本质上一个进程,所以容器可以被创建、杀死、重启、启动、停止等

5、docker构成

5.1、docker三要素

  • 仓库:存放镜像所在的服务
    docker仓库:hub.docker.com(针对大带宽镜像未来会收费,国内可用)
    quay.io(开源、国内用不了)红帽
    gcr.io(开源、国内用不了)谷歌
  • 容器
    • 类似传统虚拟化中的虚拟机(VM),一个虚拟机就是一个实例,一个虚拟机只能由一个镜像创建
    • 镜像运行的实例,本质上是一个进程;一个镜像可以创建出多个容器,但是一个容器只能由一个镜像创建;容器可以封装成镜像
    • 每一个Docker容器在运行时都是以镜像为基础层,并在镜像的基础上创建当前容器的存储层(在镜像的最上面加了一层读写层),容器存储层的生存周期与容器是一致的,因此当某一个容器删除后,该容器存储层的数据也会随之被删除掉
  • 镜像
    封装系统环境(去掉内核的外部生态)+应用环境(应用的可执行文件和所应用需依赖)是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等),镜像不包含 任何动态数据,其内容在构建之后也不会被改变。
    镜像一般命名为mysql:5.6centos、mysql:5.6ubuntu
    • 系统环境
      • Centos7
      • ubuntu
    • 应用环境
      • Tomcat环境
      • JDK环境

分层存储

	Docker镜像里包含一层层的文件系统,叫做Union File System(Union FS,联合文件系统)。
	UFS(联合文件系统)可以将多个目录挂载到一起,从而形成一整个虚拟文件系统,该虚拟文件系统的目录结构就像是普通的Linux目录结构一样。
	Docker通过这些文件系统,再加上宿主机的内核就构成了一个Linux的虚拟环境

5.2、docker自身组件

	Docker Client:
		Docker 的客户端(可本地/远程访问-需开启,一般不建议开启)
		作用:下达命令
		通过网络连接发送指令,基于http协议
		
	Docker Server:
		Docker daemon 的主要组成部分,接受用户通过 Docker Client 发出的请求,并按照相应的路由规则实现路由分发。
		API应用程序编程接口(只要符合接口动作就能请求对应资源和动作方式)   
	
	Docker 镜像:
		Docker 镜像运行之后变成容器(docker run)
	
	C/S架构:有守护进程(docker daemon),帮我们启动容器

在这里插入图片描述
在这里插入图片描述

  • (1)客户端发起下载指令,
    • docker daemon本地有
      • 就返回结果,
      • (4)docker run启动应用,
      • (5)返回结构
    • docker daemon本地没有
      • (2)从docker镜像仓库搜索
      • (3)并下载镜像,返回给客户端消息
      • (4)docker run启动应用
      • (5)返回结果
        在这里插入图片描述

各个linux发行版

共性:内核一样(linux魔改版,bbr除外,谷歌开发解决tcp拥堵问题)
区别:外围生态(防火墙、包管理工具、解析器等)

6、docker化应用存在的方式

6.1、linux一切皆文件,文件特性共享

在这里插入图片描述

6.2、会出现耦合,A不在了,B就运行不了

在这里插入图片描述
代码解耦,部署耦合

微服务(MS:micro service):解耦(每个服务是独立逻辑)

	以前的软件:一个功能的进程崩了,整个程序会崩
		part
			用户管理
			商品展示
			库存系统
			物流系统
	
	微服务思想的软件:一个部分进程崩了,不会影响其他部分正常运行
		Part1:用户管理
		Part2:商品展示
		Part3:库存系统
		Part4:物流系统

6.3、解耦

在这里插入图片描述

	应用镜像为只读
	运行态内核(物理机提供)可以共享
	linux发行版的外围生态以文件形式放在镜像中

6.4、可写层:配置不同需求的镜像

在这里插入图片描述

6.5、UFS(unionFS):

联合文件系统/分层文件系统
在这里插入图片描述
在这里插入图片描述

  • 例如
    • mysql镜像1.0

      • Centos7文件系统
      • mysql文件系统
    • apache镜像1.0

      • Centos7文件系统
      • apache文件系统
    • 清单文件(有的不下载、没有的下载、逐一按需组合)

      • Centos7
      • apache
      • mysql

7、容器创建、封装过程

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

旺旺溜溜球

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值