一、引言
今天小编要开始编写新系列的文章啦, 本次围绕的主角是 “Docker”。
“早就有其他博主早就写过啦,阅读量杠杠的”
“是谁? 是谁在说话?”
当然确实早已有其他博主写过docker相关的博客,但是那又怎样? 他有小编长得帅吗?小编我就是要写(偷笑,偷笑)
但话说回来,当初从小编写第一篇博客起,初心是为了分享自己的学习过程,比小编优秀的博主数不甚数,自己能够坚持自己的风格就行啦。
那来说说小编这次为什么选择写Docker吧,也是在实际工作当中所遇到的问题,然后通过Docker最终解决了小编长久以来的困扰。
二、docker解决了什么问题?
场景一:请看下面开发与测试人员的对白
测试员:“你这个项目下载后,启动不了啊?”
程序员:“怎么可能,我本地可以启动的啊”
测试员:“不信你过来看看”
程序员:“你下载后这里操作不对,应该是这样”
相信这个场景经常在办公室听到一段类似的对话,当然小编也遇过这种情况。可能会因为操作系统、环境变量、或者一些其他配置导致项目这本地还启动好好的,到别人那就不行了。
启动运行一个项目所需要的基本东西包括:操作系统、JDK、Tomcat、代码 (以JavaWeb项目为例)
现在docker就可以拿上来用了,docker可以帮你把所有项目相关的东西打包好,生成一个镜像(Image)。
这个镜像可以放到自己公司的仓库(Repository)、或者其他第三方仓库,提供给其他测试人员、开发人员只需要下载对应的镜像文件,直接在docker中就可以使用啦。
场景二:程序与程序之间抢占系统资源,这个问题对于小编来说以及见怪不怪了,假设我们公司现在有一台测试服务器,上面跑满了各种应用服务,那么有一天突然有其中一个服务down掉了,登陆上服务器一看,内存溢出。
场景一有提到说,docker会把项目相关的东西全部打包生成一个镜像,每一个镜像之间具有隔离性,并且是以一个独立的容器(Container)来运行,当然就可以避免抢占资源的情况。
场景三:快速容器部署,小编经常对接一家新的医院,医院都会提供一台新的服务器,这个时候小编就需要安装jdk配置环境变量、Tomcat等等一系列操作。 由于每一家医院所部署的服务都是一摸一样的,那这个时候采用docker就可以很快速地搞定。
不需要再如此繁琐的操作,只需要安装docker,下载镜像,启动项目保证原滋原味。
docker还有一个特别友好的特点,跨平台,比如说最常用的:windows、macOs、linux,都可以对应的支持。
三、docker 到底是个什么东西?
首先我们来看一下docker官网:https://www.docker.com/,docker的图片就是个蓝色的小鲸鱼,大家可以混个脸熟。
docker的发展历史小编就不详细讲了,感兴趣的小伙伴可以度娘一下。
在文章上部分提到了三个关键字:镜像(Image)、仓库(Repository)、容器(Container),这三个关键字也就是docker核心思想了。
那么这三个关键字是怎么联系起来的呢? 跟大家简单描述一下docker运行程序过程,从仓库里面拿到一个镜像文件下载到本地,通过一条命令让镜像运行起来,最后变成容器。
docker就是用来装应用的一个容器,就好像书包可以装书、杯子可以装水一样,你可以把一个mysql放到docker里、也可以把自己所写的一个程序放到docker里面。
镜像:其实镜像就是一系列的文件,它可以包含我们应用程序的文件、也可以包括运行环境的配置文件,最后打包成为一个镜像。
容器:那容器又该怎么理解呢?容器的本质就是一个进程,镜像所包含的文件都是只读文件,但是我们可以通过对容器进行写操作,从而达到修改对效果。
仓库:当其他小伙伴需要使用到你所生成的镜像时,这个时候就需要去仓库去找到你对应的镜像文件。目前比较常用的有:
https://hub.docker.com/ docker自己提供的一个中央仓库,但访问较慢
https://c.163yun.com/hub 这个是网易的一个仓库,国内一般比较推荐使用这个
如果不想把公司内部的一些镜像放置到其他地方去,也可以在公司内网搭建一个仓库来使用
那我们接下来继续来更直观的看到docker的架构图,这个图能更加直观的看出docker的执行流程。那个小编粗略的解释下图的执行流程。
一共包含三部分,最左边docker客户端,中间是docker服务端、右边的是docker仓库,假设小编电脑刚刚安装了docker,现在想要使用一个redis的服务。
第一步:通过客户端docker pull redis(这个需要去仓库找对应的redis镜像名字,默认的仓库是hub.docker.com),然后把镜像下载到本地。
第二步:通过客户端docker run redis(这个也是下载后对应的镜像名字),输入命令之后会先去本地仓库找有没有对应的镜像文件,如果没有则会去对应的仓库中心先下载,下载之后运行。如果有就直接运行,最后变成容器。
图中还有一个docker build 这个是需要生成自己的镜像文件时,所使用的命令。
四、docker 和 虚拟机 有什么区别?
使用区别:
虚拟机:假设现在有一台电脑,需要使用虚拟机来安装一个redis服务,首先我们需要下载一个虚拟机的运行软件,然后下载相对应的操作系统,然后在虚拟机软件中进行系统安装,最后在系统中安装redis服务。
docker:只需要在本机安装docker,直接执行docker run 命令,则可以享受到对应的redis服务。
文件大小:
虚拟机:抛开其他安装软件不说,一个操作系统就的花上3、4个G把,一般在新建虚拟机时,一般给硬盘大小会给到20~30G左右。
docker:从下图就可以得出,一个镜像文件大概就几百兆左右,往往低于虚拟机的。
运行速度:
虚拟机:如果从开机到执行相对应的服务,估计也得花上了2、3分钟,因为虚拟机它是与虚拟化操作系统硬件资源进行交互。
docker:直接调度本地电脑系统硬件资源,往往我们使用docker run命令启动,一般只需要2秒即可完成启动。
说了这么多,那为什么两者区别会这么大呢? 那就需要了解下它们本质的区别。
从图上就能够很直观的看出区别,虚拟机都需要为虚拟机提供硬件模拟,而docker所有的应用程序都作为Docker容器工作,性能更好
五、总而言之,言而总之
那么今天docker大概就扯到这里,docker面向学习的人员很广,不管是开发、测试、运维掌握docker也都是很有必要的一门技术。
小编后面还准备了关于docker一系列的学习文章,比如什么教你如何年薪百万,老司机永远不会翻车,技术小白如何跳槽技术总监,有兴趣吗? 感兴趣就关注小编吧!!!
好啦,上面都是瞎扯的哈哈哈哈,但真的真的真的准备了docker一系列相关文章,能让你从docker入门到公司常用基本操作。
呐呐呐呐呐今天就到此结束吧!!!
万水千山总是情,小手点赞行不行!!!