Docker是啥

一、我为什么会接触docker

公司最近有个大项目,由于项目集成系统过多,忽然被叫过去搞什么docker,说是部署微服务很方便。于是百度知乎简书各种网站上搜索,并亲自实践了一波,有感而发,写下这片文章。
Docker是啥

二、为什么会有docker

1.简介

自从开始搞java,一旦遇到什么重复的东西,总想给他封装起来先,然后起个名字,以后就通过接口去调用这些重复的东西。既然开发可以把代码造成轮子,凭什么运维不可以把运行环境造成轮子。Docker就是用来解决微服务运行环境打包问题的。Docker是一个开源的容器引擎,可以将应用程序和运行程序所需要的运行环境隔离,并且将运行环境像程序一样进行管理。使用了Docker后,可以实现更快的打包,测试以及部署应用程序。

2.优势

随着时代的变迁,物理机、虚拟机、容器的对比。

1.物理机

就是我们手可以摸到,眼睛可以看到的服务器设备。单个服务器,成本昂贵,并且现在的物理机性能已经远超于过去,我们实际使用到的物理机性能只占了一小部分,就像拿着外星人笔记本来玩俄罗斯方块,太浪费了。知乎引用过来的关于物理机的形象解释。如下图。
Docker是啥

2.虚拟机

由于物理机性能得不到充分使用,于是出现了虚拟机技术,在一台物理机上部署十几台虚拟机,来当作十几台性能略差的物理机来用,当不需要时,又可以随便删除掉不需要的实例,同时回收这部分实例的资源,而且并不会影响到其他实例。虚拟机完美的模拟了一台物理机的所有资源,麻雀虽小五脏俱全。有cpu,有显卡,网卡。这些模拟出来的东西都是通过计算实现的,给物理机实体凭空增加了不少计算量。
Docker是啥
虚拟机形象解释。如下图。
Docker是啥

3.容器

容器技术未火爆之前,大家用的都是虚拟机,VMware和OpenStack。虚拟机的cpu,显卡,网卡,都是通过物理机计算虚构出来的,增加了不少计算量,而容器仅仅在操作系统层面向上,对应用的所需各类资源进行了隔离。
容器的形象解释,如下图。
Docker是啥

四、与docker相关得概念

1.镜像————image

直观的镜像文件

镜像这东西,我好像从装系统开始,就已经接触过了。我一开始见到的是.iso后缀的系统镜像。ISO对应虚拟光驱,就和真实的光碟对应真实的光驱一样。前两个我们触碰不到。一开始我们使用这个东西,安装系统,首先我们需要Windows系列的ISO系统镜像文件,可去IT之家下载Windows 10 - 16299版系统镜像文件,保存到本地磁盘中,双击打开,我们就会发现在我的电脑界面多出了一个虚拟光驱,打开可以看到镜像中所有的文件。我还真的去我的电脑搜索了一下,发现我的电脑里居然有镜像文件。
Docker是啥
我试着双击了Microsoft Office,居然可以直接打开,然后就展现出了这个文件里面的细节,宛如一个压缩文件。
Docker是啥
然后在我的电脑界面,多出了一个有关Microsoft Office的虚拟光驱
Docker是啥
我接着尝试了另外几个ISO镜像文件,其中一个是小鸡模拟器中的galgame游戏
Docker是啥
其中的图片可以打开。
Docker是啥
并且在我的电脑中又一次多了几个虚拟光驱。并且C盘和D盘的容量并没有变化,感觉像是创建了一个快捷方式。
Docker是啥
而且,百度上说镜像文件是无法直接使用的,需要利用一些虚拟光驱工具进行解压后才能使用。但是我感觉window的文件资源管理器好像自带虚拟光驱解读。双击就可以使用。

镜像文件官方概念

镜像文件格式是一个基于文件的磁盘镜像格式。所谓镜像文件其实和ZIP压缩包类似,它将特定的一系列文件按照一定的格式制作成单一的文件,以方便用户下载和使用,例如一个测试版的操作系统、游戏等。镜像文件由微软公司设计且发布于Windows Vista及其之后的Windows操作系统中,用来支持他们的一部分标准安装过程。镜像文件是光盘的“提取物”。它与旧版Windows操作系统兼容良好,且部分用于Windows Fundamentals for Legacy PCs中。
其实以前在学习java的时候,要去外网下一个比较大的东西,这个时候视频中的老师,告诉我们可以去阿里云的镜像网站去直接下载,国内下载速度很快。其实就是把人家国外的各种包都创建了一个副本,然后放到自己的中央仓库里,别人直接从中央仓库下载就可以了,不用再去忍受外网的龟速。

docker镜像

docker镜像,也和以上东西是同样的道理,就是把各种jar包,JDK等等文件,按照各种不同版本创建了不同的副本,也就是镜像文件,然后放到了docker的中央仓库里,到时候直接docker pull 文件名: 版本号,就从中央仓库将需要的文件打包拉到自己本地或服务器上。
引用各方大佬-------->
镜像(Image)就是一堆只读层(read-only layer)的统一视角,里面每个文件都只能读,不可以写,不可以修改。
Docker是啥
从左边我们看到了多个只读层,它们重叠在一起。除了最下面一层,其它层都会有一个指针指向下一层。这些层是Docker 内部的实现细节,并且能够在主机的文件系统上访问到。统一文件系统 (union file system) 技术能够将不同的层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统。我们可以在图片的右边看到这个视角的形式。

2.容器————container

容器 (container) 的定义和镜像 (image) 几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。Docker引擎利用容器来运行,隔离各个应用,容器是镜像创建的实例,可以创建,启动,停止,删除容器,容器之间是相互隔离,互不影响的,类似于沙箱。镜像本身是只读的,容器从镜像启动,相当于在镜像上层创建了一个可写层,镜像本身不变。
Docker是啥
由于容器的定义并没有提及是否要运行容器,所以实际上,容器 = 镜像 + 读写层。

3.仓库————repository

Docker 仓库是集中存放镜像文件的场所。这个比较好理解。

4.docker概念小结

可见镜像才是docker中的核心。既可以自己创建镜像,上传至中心仓库供大家使用,也可以从远程仓库拉取他人的镜像,供自己使用,开源就是牛逼啊
Docker是啥

五、docker的使用

本篇主要阐述docker为什么,具体使用docker参见如下文章。
使用docker快速部署一个java项目