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

高手在线求帮请分析下,如何利用Docker host网络模式搭建一套简易分布式服务系统
最新回答
断言断梦断思念

2024-05-11 15:51:07

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
FROM tomcat:8
MAINTAINER heizi
COPY server.xml /usr/local/tomcat/conf/server.xml
ENV HTTP_PORT 8080
ENV AJP_PORT 8081
ENV SHUTDOWN_PORT 8082
COPY start.sh /usr/local/tomcat/bin/start.sh
ENTRYPOINT start.sh
其中server.xml中做的改动主要是将默认的port改为易识别的可修改的变量,而start.sh则修改了tomcat默认启动脚本,如
#!/bin/bash -e
set -x
rm -rf /usr/local/tomcat/webapps/ROOT
sed -i "s/{shutdown_port}/$SHUTDOWN_PORT/g" /usr/local/tomcat/conf/server.xml
sed -i "s/{ajp_port}/$AJP_PORT/g" /usr/local/tomcat/conf/server.xml
sed -i "s/{http_port}/$HTTP_PORT/g" /usr/local/tomcat/conf/server.xml
catalina.sh run
准备compose文件部署应用
provider:
image: provider
environment:
- HTTP_PORT=9000
- AJP_PORT=9001
- SHUTDOWN_PORT=9002
mem_limit: 1g
restart: always
net: "host"
consumer1:
image: consumer1
environment:
- HTTP_PORT=9010
- AJP_PORT=9011
- SHUTDOWN_PORT=9012
mem_limit: 1g
restart: always
net: "host"
consumer2:
image: consumer2
environment:
- HTTP_PORT=9020
- AJP_PORT=9021
- SHUTDOWN_PORT=9022
mem_limit: 1g
restart: always
net: "host"
这样我们就可以简易的将一个分布式的系统部署起来了