Docker入门--0.通俗易懂说docker

文章目录

    • 1.容器?虚拟机?
    • 2.Docker镜像
      • 2.1 Docker镜像就是不可写的一部分文件
      • 2.2 不得不说Docker容器
    • 3.Docker优势

Docker入门--0.通俗易懂说docker_第1张图片
久闻Docker大名,但是又一直没有使用过Docker,接触Docker之前,也很疑惑Docker究竟是什么美女画皮,被各大厂商追捧,这个系列主要是Docker简易教程,尽量用最简单的例子说明Docker以及使用。

1.容器?虚拟机?

虚拟化技术已经发展了很多年了,从虚拟机到现在的各种云服务器,其实都是虚拟化虚拟化技术落地开花的实例,虚拟化技术带给我们众多的方便之处,我们可以很方便的使用VMware在windows平台上创建多个Linux系统的镜像使用,互联网各大公司提供的个人云服务器,也是基于虚拟化技术实现的,可能一台服务器上有上百个云服务器被创建,然后向用户出售。

而Docker,提出了容器的概念,其实容器也算是一种虚拟化技术,但是和传统的虚拟机又有很大差距。咱们先来看几张对比图:

第一张是虚拟机的架构图:
Docker入门--0.通俗易懂说docker_第2张图片
可以看到,虚拟机是基于Hypervisor(虚拟机管理)技术,在操作系统之上实现了每个虚拟机系统之间完全的隔离:

每个虚拟机都包括应用程序、必要的二进制文件和库以及一个完整的客户操作系统(Guest OS),尽管它们被分离,它们共享并利用主机的硬件资源

意思也很简单,虚拟机内运行的是一个完整的操作系统,进程管理完全隔离,文件系统完全隔离,网络系统完全隔离,你把他看成一台自己的电脑也没有任何问题,而事实上各大云厂商提供的云服务器,就是一个很好的例子。

那么Docker提出的容器是什么概念呢?
Docker入门--0.通俗易懂说docker_第3张图片
这里可以看到, Docker运行基于Docker Engine,这是Docker使用Go语言实现的一个引擎,而Docker镜像运行在引擎之上,而承载Docker镜像的Docker进程被称为容器。

这时我们会很容易发现,Docker容器是一个进程,既然是进程,那么也就是说需要基于操作系统运行,也就是说无论内存管理和文件系统以及网络,都不是像虚拟机那样隔离的很彻底。

这时候又有一个新的概念出现了,Docker镜像,听上去是不是很像虚拟机中的Linux系统镜像?别急,我们下面细细讲解什么是Docker镜像。

2.Docker镜像

既然是镜像,也就说明他是个其实是存储在硬盘上的文件,而Docker镜像则是一种特殊的镜像,你如果打开它会发现其中的文件结构有点像Linux中的文件结构,其实Docker镜像就是包含配置文件但不包含系统内核的Linux系统。

2.1 Docker镜像就是不可写的一部分文件

这样说可能有些绕,那我就通俗点讲,Docker镜像就像是张只读的游戏光盘,Docker引擎就像是Docker专用的解码光驱,而操作系统就像游戏机,游戏光盘里含有各种游戏素材 (容器自带的配置文件),但是如何展现出来3D效果,以及各种物理运算,还是得靠游戏机 (系统内核),也就是说Docker镜像最终还是依靠操作系统里运行的。

当然上面这些描述可能有些不准确,但是为了更方便的理解。下面也有大神的说法:

Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等) 。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任何改变只发生在自己这一层。

2.2 不得不说Docker容器

我这里说的Docker容器,狭义上认为是包装后的Docker镜像就可以了,也就是说相当于在不可写的镜像上加了可写层的关系(事实上还有很多区别,这里就不展开说了,想详细了解点这里)

那如果通俗点讲镜像和容器,Docker镜像依旧是那张只读的游戏光盘,而容器就是游戏机上不同的存档,我们不能修改游戏素材内容,但是能修改存档内容,然后我们就可以选择其中一个存档开始玩耍了!

其实侧面反映出来,一个镜像可能有多个容器

Docker容器分为静态和动态,静态就是没运行的程序,动态就是运行在OS中的进程 (不了解程序和进程的同学请自觉面壁十分钟!)

3.Docker优势

这个我都不想说,既然大家对他趋之若鹜,那一定是好处大大的,贴张图吧:
Docker入门--0.通俗易懂说docker_第4张图片
无论是占用资源,启动速度,还是管理难易程度,都是Docker绝对的优势。

对了,这里还要说明一点, 一个Docker容器只能运行一个我们需要的软件哦(ubuntu,redis,mysql等等),这算不算比起虚拟机的一个缺点 ?但是Docker是可以运行在虚拟机中的。


参考:

  1. Docker简介–阿里云社区
  2. 什么是Docker
  3. Docker与VM虚拟机的区别以及Docker的特点

你可能感兴趣的:(中间件使用)