docker的道法术器

1.2 什么是docker【时势造英雄——云原生,云部署】
docker的发展历史:
在这里插入图片描述
啥是docker:
开源的应用软件的【容器】,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的机器上,从而抹平【系统环境windows、Macos、Linux】的差异。源码托管在github上;

2.1 docker的理念
在这里插入图片描述
* 集装箱
* 标准化【运维流程化】

	* 运输方式
	* 存储方式
	* API接口

*隔离:底层使用LXC技术(一种轻量的容器虚拟化技术,是Linux的一种内核限制机制)

2.2 docker解决的问题
1.抹平环境的差异,解决软件运行环境不一致所带来的问题
2.将运维的流程标准化,从而使【快速扩展】、【服务水平伸缩】变得简单
3.隔离各个应用,避免个别应用出错造成的服务雪崩

docker化的步骤:
* 依赖集装箱打包
* 鲸鱼运输到服务器

3.1docker的核心技术
在这里插入图片描述
Build:构建——构建镜像【镜像】
Ship:运输——运输镜像,从仓库和主机上运输【仓库】
Run:Run运行的镜像就是一个容器【容器】

图解:
在这里插入图片描述
3.2docker镜像【image】
镜像的本质:一系列文件(应用程序文件、运行环境文件…)按照一定的格式打包后的【文件集】

这个【格式】就是【镜像的格式】,与Linux的一项存储技术有关——联合文件系统(Union File System),是一个分层的文件系统,可以做到将【不同的目录挂到同一个虚拟文件系统下】
docker镜像利用了【分层的概念】实现了【镜像存储】
eg:
在这里插入图片描述

docker镜像存储格式图解:
在这里插入图片描述
从上图可以明显看出:docker的镜像文件是分层,分为n层,每一层存放的文件都不一样,即:每层有每层的作用;这5层堆叠起来就构成了一个docker镜像,也就是【鲸鱼身上托着的一个【集装箱】】,但是由于docker镜像采用了联合文件系统(Union File System),可以做到将【不同的目录挂到同一个虚拟文件系统下】;
从而就做到了这种效果:
docker镜像内部文件分层,但对外表现出来的效果是不分层的,所有文件都在一个层面上!
一个docker镜像当他的所有层都被加载进来后,对外展示的效果就会是【不分层的】
注意:docker镜像文件的每一层都是只读的,除了最上面的那层是可写的。

docker中从【文件】–>【镜像】–>【容器】的过程是:
在这里插入图片描述
3.3docker容器【container】
容器的本质:就是一个进程

把容器想象成一个虚拟机,每个虚拟机都有自己的文件系统,在这个文件系统里面,他的文件也是分层的,和【镜像】的文件分层类似,只有最上一层是可读可写的,下面的n层都是只读的,当遇到需要修改n层中的文件的时候(假设这个文件在x层),那么就会将x层的文件拷贝到【最上层】,在最上层对x层的文件进行修改。

**镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的 类 和 实例 一样,镜像是静态的定义,容器是镜像运行时的实体。**容器可以被创建、启动、停止、删除、暂停等。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的 命名空间。因此容器可以拥有自己的 root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会混淆容器和虚拟机。
前面讲过镜像使用的是分层存储,容器也是如此。每一个容器运行时,是以镜像为基础层,在其上创建一个当前容器的存储层,我们可以称这个为容器运行时读写而准备的存储层为容器存储层(就是最上面的那一层)。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储层的信息都会随容器删除而丢失。
按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据,容器存储层要保持无状态化(即:不应该存放任何数据)。所有的文件写入操作,都应该使用 数据卷(Volume)、或者 绑定宿主目录,在这些位置的读写会跳过容器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此,使用数据卷后,容器删除或者重新运行之后,数据却不会丢失。

理清【物理机】、【虚拟机】和【容器】之间的关系:
物理机 = 操作系统 + 物理载体(eg:笔记本、主机机箱)
虚拟机 = 操作系统的镜像 + 创建虚拟机的软件 + 物理机宿主(虚拟机需要占用物理机的一部分物理硬件,比如:硬盘、内存、cpu)
容器 = docker镜像运行的实例

一个问题:已经有了【虚拟机技术】为什么还需要【docker】?
首先明确一个基本事实:
【虚拟机】和【docker】他们解决问题的技术是一样的——虚拟化技术。
但是他们所要解决的问题是存在差异的:
虚拟机主要解决的是——用户隔离
docker主要解决的是——应用隔离
这两个问题的边界是不一样的,图解:
在这里插入图片描述
那【用户隔离】和【应用隔离】有啥不一样?
【用户隔离】:我们都知道,现实生活中,每个人都有自己的电脑,每台电脑上都有一个完整的操作系统,那么就相当于【一个用户独占一个操作系统】,即:一个用户需要一个完整的操作系统才可以满足他的需求

那一个应用需要一个完整的操作系统资源才可以运行起来吗?显然是不用的(虽然有那种情况,但是很少,很少)
所以,这个时候就需要docker技术了,通过docker技术的【镜像化打包】,将【应用程序】、【应用程序依赖的运行时】、【应用程序依赖的操作系统资源】等一系列的【运行时依赖树】”连根拔起“,【整体文件分层】镜像化打包成一个【docker镜像】,而容器就是镜像的运行实例。

从这里可以看出:【应用隔离】比 【用户隔离】要轻量很多,【用户隔离】需要一整个操作系统,而【应用隔离】只需要操作系统的一部分。
所以,虽然使用【虚拟机技术】一样可以实现【应用隔离】,但是,消耗会很大,会产生巨大浪费,因此,docker技术的出现并席卷IT技术界,是有其真实的行业痛点存在的。

使用虚拟机运行多个相互隔离的应用图解:
在这里插入图片描述
使用Docker运行多个相互隔离的应用图解:
在这里插入图片描述
docker有docker的优势,虚拟机有虚拟机技术的应用场景;
虚拟机更擅长于彻底隔离整个运行环境。例如,云服务提供商通常采用虚拟机技术隔离不同的用户。
Docker通常用于隔离不同的应用,例如前端,后端以及数据库。

两者【隔离图】对比:
在这里插入图片描述
docker容器使用由Linux内核提供的命名空间,大多数人把命名空间认为是一个上下文或域的授权

虚拟机的伟大在于:通过抽象来增加并行,服务于多操作系统的使用情况以及业界最好的安全性。但对于隔离,它们相当的昂贵,容器提供的隔离就便宜。

【服务器虚拟化】与【服务器Docker化】图解:
在这里插入图片描述
服务器:港口(拥有场地和各种设备)
服务器虚拟化:港口上的仓库(拥有独立的空间堆放各种货物或集装箱)
服务器Docker化:港口上的集装箱

不同的集装箱属于不同的运单(Docker上运行不同的应用实例),相互独立(隔离)。但由同一个人管理(主操作系统的内核),因此通过管理员可以看到所有集装箱的相关信息(因为共享操作系统内核,因此相关信息会共享)。

服务器虚拟化就好比在码头上(物理主机及虚拟化层),建立了多个独立的仓库(虚拟机)。其拥有完全独立(隔离)的空间,属于不同的客户(虚拟机所有者)。每个仓库有各自的管理员(当前虚拟机的操作系统内核),无法管理其它仓库,不存在信息共享的情况。

所以:需要根据不同的应用场景和需求采用不同的方式使用Docker技术或使用服务器虚拟化技术。
典型的Docker应用场景:主机上的Docker实例属于单一用户的情况下,在保证安全的同时可以充分发挥Docker的技术优势。

典型的虚拟机应用场景:对于隔离要求较高的环境如混合用户环境,就可以使用服务器虚拟化技术。

3.4docker仓库【warehouse】
远程docker开源仓库:hub.docker.com
国内仓库:c.163.com/hub#/home

docker仓库直接类比maven仓库就可以了,说白了,就是一个放docker镜像的地方

参考文章:
1.https://yeasy.gitbook.io/docker_practice/basic_concept/container
2.https://www.jianshu.com/p/50f48eb25215
3.https://www.imooc.com/video/14615/0

写在最后:转载需要注明出处

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值