www.icesr.com
IT运维工程师的摇篮

二. Spring Boot使用DockerFile maven插件自动化部署之容器通信

一. 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代替,如下所示:

<code><span class="hljs-label">server:</span>
  port: <span class="hljs-number">8800</span> <span class="hljs-preprocessor"># 注册中心占用8800端口</span>
<span class="hljs-label">eureka:</span>
  instance:
    hostname: discovery0
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka<span class="hljs-preprocessor">.instance</span><span class="hljs-preprocessor">.hostname</span>}:${server<span class="hljs-preprocessor">.port</span>}/eureka/  <span class="hljs-preprocessor">#其实就是 http://localhost:8080/eureka/</span></code>

zuul和其它微服务配置文件

配置文件改一个地方即可,即eureka.client.serviceUrl.defaultZone=http://discovery0:8800/eureka/ ##端口是eureka侧定义好的。

<code>eureka:
    serviceUrl:
      defaultZone: <span class="hljs-keyword">http</span>://discovery0:<span class="hljs-number">8800</span>/eureka/  <span class="hljs-comment">#注册中心地址</span>
    instance:
      preferIpAddress: <span class="hljs-constant">true</span></code>

配置hosts文件

由于用了域名discovery0来表示eureka地址,hosts文件自然也要加上这一条,windows的hosts文件位置在:C:/Windows/System32/drivers/etc,linux是/etc/hosts这个文件。加上一条DNS映射即可:

<code>192.168.1.123   discovery0</code>

客户机肯定要加上面的dns映射,否则本地项目都注册不上eureka,服务器建议也加下

启动微服务容器

以zuul为例,现在去服务器上启动zuul镜像(打成镜像的步骤与这里完成相同 )

<code>sudo docker run <span class="hljs-subst">--</span>name zuul <span class="hljs-attribute">-d</span> <span class="hljs-attribute">-p</span> <span class="hljs-number">9000</span>:<span class="hljs-number">9000</span> <span class="hljs-subst">--</span><span class="hljs-keyword">link</span> discovery:discovery0 <span class="hljs-attribute">-it</span> zuul镜像名</code>

主要是–link discovery:discovery0这个参数,discovery是eureka启动的容器名,discovery0是映射的别名,这个参数的作用就是在zuul容器中,加一条dns映射,表示discovery0是指向discovery这个容器的。这样微服务才能注册到eureka

如果是启动业务模块,则还需要用–link这个参数绑定到zuul这个容器,如下:

<code>sudo docker run <span class="hljs-subst">--</span>name zuul <span class="hljs-attribute">-d</span> <span class="hljs-attribute">-p</span> <span class="hljs-number">9011</span>:<span class="hljs-number">9011</span> <span class="hljs-subst">--</span><span class="hljs-keyword">link</span> discovery:discovery0 <span class="hljs-subst">--</span><span class="hljs-keyword">link</span> zuul <span class="hljs-attribute">-it</span> 业务xxx镜像名</code>

–link zuul表示当前容器与容器名是zuul的连接,为了安全,-p 9011:9011可以省略,则表示该微服务只对zuul暴露位置。

到此,容器间就能正常通信了。

PS:实际用Docker部署多个微服务,要用到Docker compose统一管理,上面的参数都可以写在docker-compose.yml中,但Docker compose好像被墙了,一直下载失败。

未经允许不得转载:冰点网络 » 二. Spring Boot使用DockerFile maven插件自动化部署之容器通信

分享到:更多 ()

评论 抢沙发

评论前必须登录!