跟小编玩转Docker到天亮 —— 聊聊docker,走进docker世界

一、引言

        

今天小编要开始编写新系列的文章啦, 本次围绕的主角是 “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入门到公司常用基本操作。

呐呐呐呐呐今天就到此结束吧!!!

万水千山总是情,小手点赞行不行!!!

     

发布了152 篇原创文章 · 获赞 422 · 访问量 43万+

猜你喜欢

转载自blog.csdn.net/weixin_38111957/article/details/103057792