相信有到现在为止还是有很多同学只是听说过docker,但还不了解docker。也很想学习,但是又不知道从何入手,工作中又接触不到,而自己又懒得去翻阅各种学习资料,那么,读完本文,我保证,docker的入门学习,你就完成了。
为什么要使用Docker?
Docker的好处有很多,学习和使用docker的理由也就很多了。小编在这里列举三个理由:
无论是安装应用、搭建环境,还是部署应用,都十分的方便灵活。节省资源开销。灵活的迁移你开发的应用程序。再补一个很伟光正的理由,会了docker你又多了一个谈资!
Docker是什么?
对于这个问题,小编建议同学不要去翻看官网的说明或者搜索来的各种学术解释,读完那些,你就会开始怀疑人生了,甚至开始怀疑自己的智商,对程序员来说,这种暴击的伤害值很高的。那么怎么办呢?不用着急,小编带着你一步一步去搭建一个基于docker的微服务集群,完成之后,你自己就会对docker有一个初步理解和认识。
安装Docker
这一步没啥要说的,无论是windows还是linux还是mac,下载安装,一路Next,结束安装。等待Docker服务启动。Windows的安装会比较麻烦些(目前只支持Window10专业版)。电脑还要支持虚拟化。当然了,我觉得这些都是小问题,如果这些小问题,都把你难倒了,让你退缩了,那么咱们还是养养花种种草吧。
部署SpringBoot应用到Docker
准备工作:在C盘根目录,创建一个文件夹,名字随便命名,小编这里命名为docker,这是本次演示的工作目录,所有的文件都放在这里,所有的命令使用的都是相对路径,我们暂时称这个目录为工作目录。
1、部署EurekaServer服务注册中心集群
把服务注册中心打包成可运行jar
配置application-server1.yml的端口9527
name:eureka-server,hostname:server1
配置application-server2.yml的端口9527
name:eureka-server,hostname:server2
把jar包拷贝到我们的工作目录里;
在工作目录里创建两个文件
server1,server2注意没有文件名后缀。
server1内容
server2文件内容和server1文件内容基本一致,只需要把激活文件处修改为”server2″即可。这里要注意的地方,假如集群配置文件,你修改成了别的名称,比如applicaiton-s1.yml,那么server1文件中的激活使用的资源配置文件处就要写”s1″。
打开shell终端(window里就是cmd,注意要用管理员身份)进入工作目录。输入命令:
-t 给构建的镜像取一个名称,-f 指定构建的配置文档,注意最后还有一个点,这个点代表构建的工作目录,点代表是当前目录(不理解什么是镜像,没关系,跟着往下走),server2容器的创建,只需要把命令里的两个server1改成server2就可以了
输入命令:docker images,查看所有的镜像
创建容器server1,并设置容器的环境参数。
各个参数的意义,就不列举了,一例举,文章一长,估计你就没耐心读下去了,有空的时候,回头参考这个命令,慢慢搜索学习。
创建容器server2参考server1,只要更换端口映射端口,IP,容器名称和使用的镜像名称
然后本地浏览器访问
就可以看到服务注册中心看板页面了
如果到这一步,没有成功,建议不要往下看了,好好梳理下,看看哪一步出错了,实在不行,就关注私信我,我们单独交流。
2、部署EurekaClient服务客户端集群
3、部署EurekaRibbon、EurekaFeign服务消费端集群
4、部署EurekaZuul网关集群
2、3、4这三步骤,参考第一步,因为都是SpringBoot工程,只不过,修改下项目名称,修改端口号,hostname名称,ip地址,镜像名称,容器名称等。
如果到这一步,实在做不来,那你一定要关注私信我,我们单独交流,再不行就把源码和脚本一块给你。
5、部署Nginx
这一步,要单独说明了,因为,它不再是SpringBoot工程,前面的参考性不强了。
nginx的镜像,不需要我们自己构建那么麻烦,直接从docker云端拉取就可以了。
输入命令:docker pull nginx
有了镜像之后,就可以创建nginx的容器了。这里有些特殊,因为nginx有需要修改的配置,要配置反向代理,负载均衡等。修改这些配置文件,我们要把容器内的配置文件挂载到我们主机本地。
否则,nginx容器启动之后,还是没法使用。
nginx的反向代理,要配到网关集群上,还要记得加上负载均衡。
最后给大家看下运行效果
结束
集群的docker部署,最好是写成shell脚本,然后用一行命令,一个回车搞定,看着密密麻麻的信息输出,瞬间会让自己感觉全世界都是小怪兽,就自己是奥特曼!