00:00
好,接下来呢,我们就进入docker的实战环节,那先来了解一下docker里边的一些基本概念,这样我们希望呢,即使没学过docker的同学也能顺着我们这个逻辑,快速的先跟我们玩起来。首先我们来说docker的存在解决了哪些问题呢?第一个就是统一标准,所谓的这个统一标准,我们说的第一个场景,比如应用构建,因为我们以前写的这个应用可能用各种不同的编程语言,你使用Java编的或者C加加,哪怕呢是Java script,这是整的。然后呢,这个应用呢要打成一些软件包,所以我们这个构建呢,我可以理解成打成软件包,然呢这样就五花八门门了,有些呢给我们给的是一个压缩包,有些呢给的是一个文件夹,有些呢直接给你源程序,让你自个编译去,所以呢,这个应用构建部分,你的语言不同,整个的整个构建方式不同,导致的各种东西挺麻烦的,所以我们就想你能不能来个纯粹直接点的,你看Windows多。
01:00
爽的,你甭管给我写的啥软件,点exe双击执行就行,所以我们这个docker呢,也就想能不能这样,你甭管是谁写的软件,你给我统一打成一个包,打成一个我规定的包,所以呢,未来我们可能会使用docker build把我们的这个软件呢,打成一个标准格式的这个包,这个包呢,我们把它称为镜像,所以呢,以后啊,大家也甭管谁整到了你的这个软件包呢,我们都把它称为一个镜像,这是有一个标准格式的,然后呢,第二个解决了我们这个应用分享,其实呢,如果是我们以前这个五花八门的这个软件包,有些东西呢,你可能要去官方网站下载,有些呢,你拿U盘拷过来等等,反正乱七八糟一大堆,那其实有了我们上一步应用构建成统一标准镜像以后,我们可以怎么办?我们可以把这个所有的这个软件镜像,所有软件的镜像,就每个软件呢,有他自己打好的这个镜像,然后呢,放到一个地方,放到一个指定地方。
02:00
Docker呢,我们把它叫docker hi,然后呢,所有软件的东西呢,你就去去这儿下载就行了,这个四项特别像什么我们安卓手机里边的这个应用市场,对吧,应用市场,然后呢,我们安卓里边的所有软件,你就去你的应用市场里边下就行了,你也甭管从哪来的,谁写的,对吧,你下来就用就行,所以呢,我们也解决了应用分享,也非常简单。再说再然后呢,就是我们应用的运行,其实还是得益于上一步,因为我们现在都打包成了一个统一标准的格式,统一的标准格式,标准的咱们这个镜像,所以我们现在呢,都打成了这个镜像,相当于是一个软件包,就像Windows里面的EX1一样,Windows有了EX1双击就行,而我们docker呢,有了这个镜像,你把这个镜像搞来以后呢,Docker我们的这个应用就启动了,而我们以前的应用想要启动,你想想啊,Java的启动方式,什么Java杠炸一大堆C加加的,你还得编译啊。再整一。
03:00
打对javascript的每一个都不一样,所以呢这挺麻烦的,所以有了docker以后呢,就是一句话,所有的软件打成统一的镜像,然后呢,Docker run,呃,按照这个镜像运行起来就行了,而这些镜像呢,你也可以去软件市场里边去找就行了,所以这就是我们的docker出现的意义,而docker的出现呢,正好也也给我们开启了一个时代,我们把这个时代呢,称为容器化时代,什么叫容器化时代,我们大概的理解一下,呃,区别于容器化,我们以前呢,有一个东西叫虚拟化技术,举个例子,我现在呢有一个机器,这个机器比如八核64G啊,配置很高,然后我们机器里边要跑很多的应用,我们以前如果把所有应用都放在一个机器里边,可能某一个软件啊,比如这个应用内存泄露对吧,从4G一直把64G全占完,把其他应用可能就挤下去了,所以呢,这个为了安全起见,我们把这些应用要隔离,所以第一种办法就是我给我的这个机器啪啪啪我装三个虚拟机对吧。
04:00
我这个虚拟机呢八个G,然后呢,我这个虚拟机呢占八个G,我这个虚拟机呢占八个G,我们把这三个虚拟机呢,启动每一个虚拟机里边部署它各自的应用,这样的话呢,我们在这个虚拟机里边的应用,就算内存泄露,它顶多漏到八个G,那也不会影响别人,所以呢,我们为了让我们的这个应用能隔离化的运行,我们可以有一个容器化技,哎,这个叫不是容器化,叫虚拟化技术,就是装虚拟机的方式来解决,但虚拟机呢也有诸多的缺点,比如每一个虚拟机的镜像,它都是GB级节级别啊,比如我们在Windows里边,我们装三个stos的这个linus系统,那可能呢,每一个Linux的这些镜像都很大,然后呢,而且呢,整个创建使用呢也比较复杂,你的整个虚拟机创业过程,虽然我们现在有一些呃,成熟的商业软件快速化创建,那其实也是比较复杂的,但是呢,它也能带来优点,就是隔离性强,我们虚拟机里边跑的这个程序,哎,你跑死你也不会把。
05:00
别人高涨,所以呢这样就是挺不错的,然后但是呢,缺点也是我们的启动版,我们每一个虚拟机启动可能要花费上啊好几分钟对吧?呃,然后呢,包括移植分享也不方便,比如我们这个应用对吧,我们现在呢换环境了啊,装到另外我们想要给另外一个呃服务器上搞,那咋办呢?你可可能需要把这个应用带上这个虚拟机整套运行环境,假设这个是Java应用啊,你这个应用要运行起来,你的虚拟机上要装Java环境等等一大堆对吧?然后呢,你把整套环境,这个虚拟机镜像你全部迁移过去,光你把这个镜像抽取过来可能又得一大会儿,所以呢,虚拟虚拟化技术稍微有点重量级,那接下来怎么办呢?Docker就推出另外一种叫容器化技术,但这个容器化呢,其实是Linux做的,只不过docker来做一个简单封装就行了,而容器话呢,就非常简单抛,呃,就是摒弃了我们虚拟机的那个泵,重设计我们这个。
06:00
计划呢,就是我们的这个,呃,服务器,比如装了这个操作系统,以前的虚拟机呢,每一个虚拟机其实都是又是一个完整的操作系统,但是docker呢,聪明了,你既然你都有操作系统了,我就给你搞一些差异化的东西,我保存起来,所以呢,每一个应用它的整个完整的环境,只是区别于我当前服务器的一个差异化环环境,对吧,我的这个差异化环境,所以呢,我比你多了些什么,我给这哒哒哒啊,假设呢这么一家,所以呢,其实每一个我们称为容器的镜像,它确实很小的,可能呢,MB级别啊,甚至于呢,我们基础的Linux这个镜像呢,它只有5MB级别,所以非常小啊,为啥只有5MB,因为可能几百MB,几个G都已经在机器上有了,所以呢,这就是我们这个docker,首先呢在镜像级别,在镜像级别我们已经抽取的非常非常小了,而即使是这么小,我们的这个镜像迁移到另外一个。
07:00
装了刀ER的机器上也是直接能用的,因为这个差异化就是差异的是我们机器跟机器之间的这个区别的部分啊,所以呢还是非常OK的,另外呢就是创建简单,我们这个镜像呢,想要创建出来可能docker build一个命令就完事了。另外呢,还有一个就是隔离性强,比如我们的这个软件,同样的呢,我们以前运行是运行在虚拟机内,我们do会呢,现在给它搞一个东西,我们把这个东西呢称为容器,一个小容器,就像一个小盒子,这个小容器呢,其实就是这个软件的一个最小的完整运行环境,这样的话呢,软件在它的这个运行环境里边,然后呢,即使炸了也不会影响别人,所以呢,这就类似于一个给你一个隔离的沙箱一样,对吧,这样呢,我们的整个运行起来也是非常的啊,安全隔离性也强,而且呢,启动速度是秒级的,这个容器的启动可要比呃这个虚拟机的启动要快太多了,另外呢,就是我们移植分享方便。
08:00
因为我们的这个应用呢,是根据镜像启动起来的,就是我们说的这些对吧,我们一开始说的这个docker呢,为了方便你所有的软件这个包呢,我们都成为一个镜像,所以呢,你把这个镜像给我们啊,移动分享就行了,所以呢非常简单啊,所以有了docker呢,这些问题都出现,都可以干嘛迎刃而解,这就是我们学习docker的整个必要性,当然docker其实我们用来最更大的性能就是它的这个格力性,它整个隔离性呢,其实很多的资源隔离级别非常高啊,举一个什么样的例子,比如我们这个应用A,应用B,应用C,它的整个隔离性强,不仅在CPU、内存上可以给我们进行隔离,对吧?我们也可以在很多的地方,比如我们访问设备,对吧?我们的这个容器可以,比如访问我们的这个磁盘,这个容器可以不可以等等等等,我们都可以来调整,然后呢,包括网络的隔离,哎,它两个之间可以通可以不通,我们都可以来进行设置,甚至于用户组的隔离,我们容器里边。
09:00
跑的这个应用,他用的整个用户,比如root用户跟Linux主机里边的root用户,他还可以不是同一个root用户,这样我们也不用担心我们这个root用户,对吧,权限问题直接啊,黑客入侵了我们这个应用,把我们整个服务器的入侵了,他可能顶多入侵一下我们这个容器,哎,就是这个沙箱环境,所以呢,我们整个的资源隔离级别也非常高,这给我们未来应用上云以后,带来的安全性还是有非常大的提升。而整个docker呢,我们要用起来,我们就可以理解一下docker的这个架构,其实架构呢就非常简单了,首先我们要用docker,每一台机器都应该先安装docker,所以我们把安装了docker的机器,我们叫docker主机,安装docker以后呢,Docker就会在我们这个主机启动,后台呢,启动一个docker的进程,这就是docker一直在后台整个这个进程,然后接下来怎么办呢?将来你就应该去软件商店,当然我们软件商店之前首先。
10:00
具体操作,Docker你可以使用命令行,这命令行呢,我们称为docker客户端,我使用命令行给docker主机发送命令,比如第一个命令,我先去软件市场给我下载一个软件,我们把这个软件称为啥,是不是叫镜像,对,就是这个镜像啊,我们存镜像的地方,我们把它称为软件的镜像仓库,哎,就是镜像仓库,镜像仓库的一个位置呢,典型的一个位置,我给大家看一下,就这个docker have点进来啊,Docker have点进来,比如我们现在想要给呃,我们的这个Linux主机上,我们要安装red啦,安装MYSQ啦,以前可能你感觉想起来都头疼,还要百度搜一大堆,按照操作,你现在呢,只需要搜一下red在这儿,对吧,就是这个red,找到这个镜像docker铺,把它下载来docker wrong你运行就行了,两个命令搞定啊,我们后来再说,所以呢,我们现在呢,只需要使用docker的命令,让docker呢,去我们这个镜像仓库把这个软件下载过来,哎,下载。
11:00
来以后呢,这个镜像这个软件包就存在我们主机的本地了,这很正常,就像我们这个手机一样,对吧?我们去应用市场里边下载的安卓应用的安装包,那肯定在我们手机本地存档,然后呢,镜像下载到本地以后呢,我们可以根据这个镜像启动一个容器,比真正运行中的程序,我们把它叫容器,如我们的这个,比如red red呢,这个镜像有了,我们可以甚至于我启动多个red,一个两个,而且每一个red呢,都是在隔离环境,这个炸了还不影响它,所以我们很容易的还可以使用docker把它的这个软件下载来模拟一个集群,对吧,Red历直接整上六个,所以这是我们的整个docker架构呢,就是这样子,其实docker呢,最终总结起来一句话,想要用docker,你在每一台机器先把docker装上,这是你的第一步,在机器装好docker,然后第二步你去docker的软件市场就在这儿,Docker HUB。
12:00
搜索你感兴趣的镜像,哎,就是这个啊,你找到镜像以后,第三步你把这些镜像下载过来,然后呢,最后一步,然后呢,你把这些镜像运行起来,你的程序就跑起来了,所以呢,消除了,你也甭管你的这个软件是Java写的,C加写的,Python写的,什么写的,对吧?反正就一个命令下载运行就完事了,好,那我们下一节课呢,就开通一个云服务器,我们来把它装上就行。
我来说两句