UDN-企业互联网技术人气社区

板块导航

浏览  : 1214
回复  : 0

[Docker资讯] 如何利用Docker host网络模式搭建一套简易分布式服务系统

[复制链接]
哥屋恩的头像 楼主
发表于 2016-5-23 20:10:11 | 显示全部楼层 |阅读模式
  我们在利用Docker部署一套系统的时候,很大一部分原因是为了尽可能的利用系统资源,所以我们会把多个容器部署在一台机器上。为了保证高可用性,我们可以在两个机器部署多个相同应用,并且前面挂一个slb(负载均衡)。另外,我们通常会使用到一些中间件来治理我们的服务调用,比如java中常用的dubbo。有时候我们的各个应用是相同语言类型的,比如说是java,那么我们就需要java web容器,比如tomcat来部署。这样整个系统的部署结构就如下所示:

0bd6ed1c75bab682a56dc644271167d8e78b84af.png


  1. provider上报服务地址到dubbo,此时的服务地址的ip:port是容器的ip:port

  2. consumer从dubbo获取到服务地址,然后调用该服务

  这时候我们就会发现,我们的服务调用是存在跨主机访问的情况的,那么我们应该怎么办?首先Docker已经提供了跨主机访问的解决方案,前提是会牺牲性能以及需要搭建额外的key-value存储系统。但是我们不想用这种略显复杂的方式,我们的部署机器数很小,只是通过切换Docker_HOSTS就可以进行运维管理了。那么我们可以采用host模式来部署。host模式会直接占用宿主机的端口。

  如果采用host模式部署系统的话,就会有第二个问题了,那就是相同的java web容器,默认启动的端口都是一样的,比如tomcat,都是8080。所以这里我们就可以通过修改tomcat默认镜像,将tomcat的配置文件中的默认端口置为变量,然后在容器启动的时候以环境变量的方式修改启动端口即可。

  自定义tomcat镜像,支持环境变量修改port

  
  1. FROM tomcat:8

  2.   MAINTAINER heizi

  3.   COPY server.xml /usr/local/tomcat/conf/server.xml

  4.   ENV HTTP_PORT 8080

  5.   ENV AJP_PORT 8081

  6.   ENV SHUTDOWN_PORT 8082

  7.   COPY start.sh /usr/local/tomcat/bin/start.sh

  8.   ENTRYPOINT start.sh
复制代码


  其中server.xml中做的改动主要是将默认的port改为易识别的可修改的变量,而start.sh则修改了tomcat默认启动脚本,如

  
  1. #!/bin/bash -e

  2.   set -x

  3.   rm -rf /usr/local/tomcat/webapps/ROOT

  4.   sed -i "s/{shutdown_port}/$SHUTDOWN_PORT/g" /usr/local/tomcat/conf/server.xml

  5.   sed -i "s/{ajp_port}/$AJP_PORT/g" /usr/local/tomcat/conf/server.xml

  6.   sed -i "s/{http_port}/$HTTP_PORT/g" /usr/local/tomcat/conf/server.xml

  7.   catalina.sh run
复制代码


  准备compose文件部署应用

  
  1. provider:

  2.   image: provider

  3.   environment:

  4.   - HTTP_PORT=9000

  5.   - AJP_PORT=9001

  6.   - SHUTDOWN_PORT=9002

  7.   mem_limit: 1g

  8.   restart: always

  9.   net: "host"

  10.   consumer1:

  11.   image: consumer1

  12.   environment:

  13.   - HTTP_PORT=9010

  14.   - AJP_PORT=9011

  15.   - SHUTDOWN_PORT=9012

  16.   mem_limit: 1g

  17.   restart: always

  18.   net: "host"

  19.   consumer2:

  20.   image: consumer2

  21.   environment:

  22.   - HTTP_PORT=9020

  23.   - AJP_PORT=9021

  24.   - SHUTDOWN_PORT=9022

  25.   mem_limit: 1g

  26.   restart: always

  27.   net: "host"
复制代码


  这样我们就可以简易的将一个分布式的系统部署起来了

原文作者: heizi 来源:开发者头条

相关帖子

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部