docker知识

docker

1.什么是虚拟机

虚拟机技术是虚拟化技术的一种,虚拟机它可以在一种操作系统里面运行另一种操作系统,比如在Windows 系统里面运行Linux 系统。应用程序对此毫无感知,因为虚拟机看上去跟真实系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其他部分毫无影响。也就是说虚拟机是以软件的方式模拟硬件设备。这类虚拟机完美的运行了另一套系统,能够使应用程序,操作系统和硬件三者之间的逻辑不变。
在这里插入图片描述

基础设施(Server):它可以是你的个人电脑,数据中心的服务器,或者是云主机等。
主机OS(Host Operating System):你的个人电脑之上,运行的可能是MacOS,Windows或者某个Linux发行版。
虚拟机监管程序(Hypervisor):利用Hypervisor,可以在主操作系统之上运行多个不同的从操作系统,实现硬件资源虚拟化。
从机OS(Guest Operating System):假设你需要运行3个相互隔离的应用,则需要使用Hypervisor启动3个从OS,也就是3个虚拟机。这些虚拟机都非常大,也许有700MB,这就意味着它们将占用2.1GB的磁盘空间。更糟糕的是,它们还会消耗很多CPU和内存。

2.什么是docker

Docker是一个新的容器化的技术,它轻巧,且易移植,号称**“build once, configure once and run anywhere"**,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、Mysql、Nginx等打包到一个容器中,然后部署到任意你想部署到的环境。
在这里插入图片描述

主机OS(Host Operating System):所有主流的Linux发行版都可以运行Docker。
Docker引擎(Docker Engine):Docker引擎取代了Hypervisor,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。它是运行在操作系统之上的后台进程,负责管理Docker容器。
各种依赖:对于Docker而言,应用的所有依赖都打包在Docker镜像中,Docker容器是基于Docker镜像创建的应用,应用的源代码与它的依赖都打包在Docker镜像中,不同的应用需要不同的Docker镜像。不同的应用运行在不同的Docker容器中,它们是相互隔离的。

3.对比虚拟机和docker

.Docker有着比虚拟机更少的抽象层,由于Docker不需要Hypervisor实现硬件资源虚拟化,运行在Docker容器上的程序直接使用的都是实际物理机的硬件资源,因此在Cpu、内存利用率上Docker将会在效率上有明显优势。

.Docker利用的是宿主机的内核,而不需要Guest OS,因此,当新建一个容器时,Docker不需要和虚拟机一样重新加载一个操作系统,避免了引导、加载操作系统内核这个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,这个新建过程是分钟级别的,而Docker由于直接利用宿主机的操作系统则省略了这个过程,因此新建一个Docker容器只需要几秒钟。

Docker容器虚拟机
OS与宿主机共享OS宿主机OS上运行宿主机OS
存储大小镜像小,方便存储和传输镜像较大
运行性能高效利用主机内存OS额外的内存和CPU消耗
可移植性适用于各流行版本的Linux较笨重

4.docker的三个基本组件

.镜像(image): 类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。而一个镜像可以创建很多个容器,类似于Java类可以创建多个实例。Docker镜像都是只读的,如果需要获取某个文件,那么容器曾会从上到下去下一层的镜像层去获取文件,如果该层文件不存在,那么就会去下一镜像层去寻找,直到最后一层。对于用户而言,用户面向的是一个叠加后的文件系统。

.容器(container): 就如上面所讲,容器是镜像的一个实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响,容器其实就是docker启动时在镜像的顶层创建了一个可写层。

.仓库(Repository):可以理解为是镜像仓库,是Docker用来集中存放镜像文件的地方。仓库注册服务器是仓库存放的地方,一般每个仓库存放一种类型的镜像,每个镜像是通过tag来区分的,例如Ubuntu仓库中存放着多个不同版本的Ubuntu镜像。

5.UnionFS

UnionFS (联合文件系统) : Union文件系统(UnionFS) 是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一’ 次提交来一层层的叠加,同时可以将不同月录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem)。Union 文件系统是Docker镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。

**特性:**一次同时加载多个文件系统,但从外面看起来,只能看到一个文件系统,联合加载会把各层文件系统叠加起来,这样最终的文件系统会包含所有底层的文件和目录,类似于包饺子,层层叠加。

6.docker镜像加载的原理

docker镜像实际上是由一层一层的文件系统组成,由一层一层的镜像包裹起来,最后我们看到的是最外层的镜像,当我们从仓库中拉取镜像下载
在这里插入图片描述
可以发现,镜像只有几百M,而虚拟机中的镜像文件一般都大至几个G,这是bootfs和rootfs的缘故:

bootfs(boot file system):主要包含bootloader和kernel, bootloader主要是引导加载kernel, Linux刚启动时会加载bootfs文件系统,在Docker镜像的最底层是bootfs。这一层与我们典型的Linux/Unix系统是一样的,包含boot加载器和内核。当boot加载完成之后整个内核就都在内存中了,此时内存的使用权已由bootfs转交给内核,此时系统也会卸载bootfs。

rootfs (root file system):在bootfs之上。包含的就是典型 Linux 系统中的 /dev, /proc, /bin, /etc 等标准目录和文件。rootfs就是各种不同的操作系统发行版,比如Ubuntu,Centos等等。

docker是没有Hypervisor的,是与主机共享主机OS资源,并且不同版本的Linux,它们的bootfs其实是一样的,因此我们在拉取镜像时,只需要提供roofs就可以了。

镜像
在这里插入图片描述
每一次的run,都会基于基础镜像创建出新的image

容器
在这里插入图片描述
可见,容器就是在镜像的顶端创建了一个可写的层,容器启动后,其内的应用所有对容器的改动,文件的增删改操作都只会发生在容器层中,对容器层下面的所有只读镜像层没有影响,也就是说,镜像层是静态的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值