二. Spring Boot使用DockerFile maven插件自动化部署之容器通信
2018-01-10 10:57
1051 查看
一. Spring Boot使用DockerFile maven插件自动化部署之容器通信
在这里写了如何用Docker部署Eureka,如果我们部署的是zuul和业务模块,则需要考虑容器间的通信。因为,zuul和其它微服务需要向eureka注册,然后zuul还要能正确与其它微服务通信,这些问题在物理机上直接部署不需要考虑,但在Docker部署的时候需要多做一点额外操作。注册到eureka
由于各个微服务启动的时候要注册到eureka,所以需要改下各个微服务配置application.yml/application.properties中关于注册到eureka部分的内容eureka配置文件
主机名设置一个名称,如discovery0,而不用ip或者是localhost,然后defaultZone的url就用discovery0代替,如下所示:server: port: 8800 # 注册中心占用8800端口 eureka: instance: hostname: discovery0 client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #其实就是 http://localhost:8080/eureka/[/code]zuul和其它微服务配置文件
配置文件改一个地方即可,即eureka.client.serviceUrl.defaultZone=http://discovery0:8800/eureka/ ##端口是eureka侧定义好的。eureka: serviceUrl: defaultZone: http://discovery0:8800/eureka/ #注册中心地址 instance: preferIpAddress: true配置hosts文件
由于用了域名discovery0来表示eureka地址,hosts文件自然也要加上这一条,windows的hosts文件位置在:C:\Windows\System32\drivers\etc,linux是/etc/hosts这个文件。加上一条DNS映射即可:192.168.1.123 discovery0
客户机肯定要加上面的dns映射,否则本地项目都注册不上eureka,服务器建议也加下启动微服务容器
以zuul为例,现在去服务器上启动zuul镜像(打成镜像的步骤与这里完成相同 )sudo docker run --name zuul -d -p 9000:9000 --link discovery:discovery0 -it zuul镜像名
主要是–link discovery:discovery0这个参数,discovery是eureka启动的容器名,discovery0是映射的别名,这个参数的作用就是在zuul容器中,加一条dns映射,表示discovery0是指向discovery这个容器的。这样微服务才能注册到eureka
如果是启动业务模块,则还需要用–link这个参数绑定到zuul这个容器,如下:sudo docker run --name zuul -d -p 9011:9011 --link discovery:discovery0 --link zuul -it 业务xxx镜像名
–link zuul表示当前容器与容器名是zuul的连接,为了安全,-p 9011:9011可以省略,则表示该微服务只对zuul暴露位置。
到此,容器间就能正常通信了。
—————————————–分隔线————————————————
后来,我去看了下官网关于网络部分,发现官方已经不推荐使用–link参数来作容器间的通信了,转而推荐这种使用user-defined networks方式,其实就是自定义一个小网,你要启动的容器都加入到这个小网中,这样就不用–link作容器通信了,因为一个小网中的容器可以通过容器名互相通信。弄起来很简单,就下面几个步骤:
相关镜像已经全部打好。
创建小网(默认使用桥接方式)sudo docker network create --driver bridge isolated_nw #创建命令 sudo docker network inspect isolated_nw #检视创建的网络信息
加入小网(以eureka和zuul为例)sudo docker run --name discovery0 -d -p 8800:8800 --network bridge isolated_nw -it 镜像名 sudo docker run --name gateway -d --network bridge isolated_nw -it 镜像名
上面第一条是启动eureka,第二条是启动zuul,通过–network参数指明加入同一个小网。zuul的application.yml/application.properties文件中eureka注册地址的hostname部分要填写eureka的容器名,如下:http://discovery0:8800/eureka/
这样就OK了。
PS:实际用Docker部署多个微服务,要用到Docker compose统一管理,上面的参数都可以写在docker-compose.yml中,但Docker compose好像被墙了,一直下载失败。
相关文章推荐
- 二. Spring Boot使用DockerFile maven插件自动化部署
- Docker实践 - 使用maven插件自动部署web应用至Docker容器的tomcat
- Docker实践-使用maven插件自动部署web应用至Docker容器的tomcat
- 理解docker部署springboot-容器网络使用(三)
- spring boot 使用docker在阿里云容器服务部署
- 使用maven插件自动部署web应用至Docker容器的tomcat
- 从零开始通过idea插件将一个spring boot项目部署到docker容器里运行
- 自动化部署关于在ubuntu下的docker容器折腾小记
- 使用指南 (六)—— 使用 Docker 部署 Django 容器栈
- Ubuntu14.04中使用docker容器部署tomcat镜像+java web项目
- 使用jenkins、docker、consul、nginx搭建支持自动化构建部署以及弹性伸缩的集群系统详细教程
- spring-boot dubbo项目使用docker方式部署
- docker应用-5(使用overlay 网络进行容器间跨物理主机通信)
- 品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署
- 品尝阿里云容器服务:初步尝试ASP.NET Core Web API站点的Docker自动化部署
- Intellij IDEA使用Docker插件部署应用
- 使用Maven插件Cargo实现自动化部署
- mac和linux下使用Docker,部署SpringBoot项目到docker
- maven使用tomcat插件自动化部署——编码问题