基于Docker的dubbo容器,实现简单弹性云扩展
本文章基于该样例进行修改:
git clone https://github.com/binblee/dubbo-docker.git
cd dubbo-docker
ls -l
drwxr-xr-x 4 root root 43 3月 16 16:16 service-api
drwxr-xr-x 4 root root 60 3月 16 16:16 service-consumer
drwxr-xr-x 4 root root 60 3月 16 16:16 service-producer
我们使用zookeeper集群,使用三个节点
修改
service-consumer/src/main/resources/services.xml
service-producer/src/main/resources/services.xml
修改zookeeper配置,一共配置三个节点,使用系统环境变量([12 factor](https://12factor.net/)应用的一个推荐实践之一)
<dubbo:registry protocol="zookeeper" address="${ZOOKEEPER_NODE_01}:2181,${ZOOKEEPER_NODE_02}:2181,${ZOOKEEPER_NODE_03}:2181" />
在maven的顶级目录中编译打包,并安装到本地maven仓库(主要安装api包)
mvn clean compile package install -Dmaven.test.skip=true
第一个Docker镜像
build producer 镜像(使用openjdk基础镜像)
cd service-producer
vi Dockerfile
FROM openjdk:8-jre
VOLUME /tmp
COPY target/*.jar /app.jar
RUN sh -c 'touch /app.jar'
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
docker build -t dubbo-producer .
第二个Docker镜像
build consumer 镜像(使用openjdk基础镜像)
cd service-consumer
vi Dockerfile
FROM openjdk:8-jre
VOLUME /tmp
COPY target/*.jar /app.jar
RUN sh -c 'touch /app.jar'
CMD ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
docker build -t dubbo-consumer .
第三个Docker镜像
build dubbo-admin 镜像(使用openjdk基础镜像)
本文使用dubbo源码自己打dubbo-admin的war包
git clone https://github.com/alibaba/dubbo.git
配置dubbo-admin管理控制台的zookeeper集群地址
cd dubbo/dubbo-admin/src/main/webapp/WEB-INF
vi dubbo.properties
dubbo.registry.address=zookeeper://${ZOOKEEPER_NODE_01}:2181?backup=${ZOOKEEPER_NODE_02}:2181,${ZOOKEEPER_NODE_03}:2181
打包,跳过测试
mvn clean compile package install -Dmaven.test.skip=true
cd dubbo/dubbo-admin
vi Dockerfile
FROM openjdk:8-jre
ADD apache-tomcat-8.0.33.tar.gz /opt
RUN rm -rf /opt/apache-tomcat-8.0.33/webapps/ROOT
COPY target/dubbo-admin-2.5.4-SNAPSHOT.war /opt/apache-tomcat-8.0.33/webapps/ROOT.war
CMD ["/opt/apache-tomcat-8.0.33/bin/catalina.sh", "run"]
本例使用了apache-tomcat-8.0.33请自行下载
docker build -t dubbo-admin .
编辑docker-compose准备自动编排
vi docker-compose.yml
version: '2'
services:
zookeeper-node-01:
image: zookeeper
restart: always
container_name: dubbo-zookeeper-node-01
ports:
- "2181:2181"
environment:
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=zookeeper-node-01:2888:3888 server.2=zookeeper-node-02:2888:3888 server.3=zookeeper-node-03:2888:3888
zookeeper-node-02:
image: zookeeper
restart: always
container_name: dubbo-zookeeper-node-02
ports:
- "2182:2181"
environment:
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=zookeeper-node-01:2888:3888 server.2=zookeeper-node-02:2888:3888 server.3=zookeeper-node-03:2888:3888
zookeeper-node-03:
image: zookeeper
restart: always
container_name: dubbo-zookeeper-node-03
ports:
- "2183:2181"
environment:
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=zookeeper-node-01:2888:3888 server.2=zookeeper-node-02:2888:3888 server.3=zookeeper-node-03:2888:3888
producer:
image: 'producer:latest'
container_name: dubbo-producer
environment:
- ZOOKEEPER_NODE_01=zookeeper-node-01
- ZOOKEEPER_NODE_02=zookeeper-node-02
- ZOOKEEPER_NODE_03=zookeeper-node-03
consumer:
image: 'consumer:latest'
container_name: dubbo-consumer
environment:
- ZOOKEEPER_NODE_01=zookeeper-node-01
- ZOOKEEPER_NODE_02=zookeeper-node-02
- ZOOKEEPER_NODE_03=zookeeper-node-03
- SERVER_PORT=8899
ports:
- 8899
dubbo-admin:
image: 'dubbo-admin:latest'
container_name: dubbo-admin
environment:
- ZOOKEEPER_NODE_01=zookeeper-node-01
- ZOOKEEPER_NODE_02=zookeeper-node-02
- ZOOKEEPER_NODE_03=zookeeper-node-03
ports:
- 8003:8080
后台启动
docker-compose up -d
停止
docker-compose stop
强制删除(动态扩展的容器也可以一并删除)
docker-compose rm -f
先配置zookeeper集群,一共三个节点
导出consumer的8899端口,在宿主机上会随机映射端口,可以通过docker ps查看
dubbo-admin控制台使用8003端口
http://yourip:对应用随机端口
你可以看到Greetings from Dubbo Docker
http://yourip:8003
进入dubbo-admin管理控制台
账号密码可以在dubbo.properties中修改,我们使用root/root
如果已安装shipyard等管理工具(可参考:http://crabdave.iteye.com/blog/2362149),可以对其中的producer 和 consumer进行动态scale 横向扩展指定个数的容器,实现简单的弹性扩展
在扩展后可以观察当前 consumer 调用的是哪个producer
可以修改consumer和producer中的java文件记录ip地址,然后再调用时进行观察
consumer 调用的是哪个producer
修改consumer中的Application.java
修改producer中的GreetingsImpl.java
修改文件见附件
页面调用显示:
Greetings from (Producer IP: ip:172.21.0.2 ip:127.0.0.1 )Dubbo Docker (Consumer IP: ip:172.21.0.5 ip:127.0.0.1 )
其中调用的Producer地址一直在变化(scale两个Producer和两个consumer)
/** * 获取本地IP地址 * @return * @throws SocketException */ private static String getLocalIP() throws SocketException { Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces(); InetAddress ip = null; StringBuffer str=new StringBuffer(); while (allNetInterfaces.hasMoreElements()) { NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement(); System.out.println(netInterface.getName()); Enumeration addresses = netInterface.getInetAddresses(); while (addresses.hasMoreElements()) { ip = (InetAddress) addresses.nextElement(); if (ip != null && ip instanceof Inet4Address) { System.out.println("本机的IP = " + ip.getHostAddress()); str.append(" ip:").append(ip.getHostAddress()).append(" "); } } } return str.toString(); }
相关推荐
基于Docker的容器云平台设计与实现,方东旭,徐鹏,随着云计算技术的不断发展和云平台的火热商业化,越来越多的企业将复杂的IT应用迁移到云,然而传统的以虚拟机为最小资源调度单位�
仅供自己参考学习 docker dubbo 消费容器提供的服务 居然要50个字
第二部分归纳和比较了三类基于Docker的主流容器云项目,包括专注Docker容器编排与部署的容器云、专注应用支撑的容器云以及一切皆容器的Kubernetes,进而详细解读了Kubernetes核心源码的设计与实现,最后介绍了几种...
第二部分深入解读基于Docker的主流容器云技术,讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署的容器云(Compose、Machine、Swarm、Fleet)、...
第二部分深入解读基于Docker的主流容器云技术,讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署的容器云(Compose、Machine、Swarm、Fleet)、...
Docker 容器与容器云(第2版) PDF版本,带电子目录,结构清晰
第二部分深入解读基于Docker的主流容器云技术,讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署的容器云(Compose、Machine、Swarm、Fleet)、...
gitlab环境搭建 harbor环境搭建 jenkins环境搭建、工具安装、插件安装 Docker、Docker Compose 环境搭建 gitlab、harbor、jenkins、Docker 集成
基于Docker 1.10和Kubernetes 1.2全面更新 一本书讲透Docker和Kubernetes 从源码层面深度解析Docker核心原理 Kubernetes源码完全解读 *实践 广泛涵盖Docker高级实践技巧 全面梳理主流容器云技术架构方法
docker容器与容器云的文档,有助于理解docker的知识。
第一部分深入解读Docker容器技术,包括Docker架构与设计、核心源码解读和高级实践技巧;第二部分归纳和比较主流容器云项目;仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发、部署、运维管理、持续开发持续集成的流程。平台提供基础设施、中间件、数据服务、云服务器等资源,开发人员只需要开发...
本文所实现的基于Docker的在线交互式Python平台为用户提供了一个集编辑器和编译器于一身的在线平台,通过本文实现的Python平台,用户本地无需提供任何Python环境的支持即可编写并执行Python代码。 本系统利用了...
Docker+容器与容器云(第2版)Docker+容器与容器云(第2版)
第二部分深入解读基于Docker的主流容器云技术,讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署的容器云(Compose、Machine、Swarm、Fleet)、...
基于Docker容器的云计算平台搭建实战
第二部分归纳和比较了三类基于Docker的主流容器云项目,包括专注Docker容器编排与部署的容器云、专注应用支撑的容器云以及一切皆容器的Kubernetes,进而详细解读了Kubernetes核心源码的设计与实现,最后介绍了几种...