`
crabdave
  • 浏览: 1280816 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于Docker的dubbo容器,实现简单弹性云扩展

 
阅读更多

基于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的容器云平台设计与实现 .pdf

    基于Docker的容器云平台设计与实现,方东旭,徐鹏,随着云计算技术的不断发展和云平台的火热商业化,越来越多的企业将复杂的IT应用迁移到云,然而传统的以虚拟机为最小资源调度单位�

    docker dubbo 消费容器提供的服务

    仅供自己参考学习 docker dubbo 消费容器提供的服务 居然要50个字

    Docker 容器与容器云(高清扫描版)

    第二部分归纳和比较了三类基于Docker的主流容器云项目,包括专注Docker容器编排与部署的容器云、专注应用支撑的容器云以及一切皆容器的Kubernetes,进而详细解读了Kubernetes核心源码的设计与实现,最后介绍了几种...

    Docker-容器与容器云(第2版).zip

    第二部分深入解读基于Docker的主流容器云技术,讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署的容器云(Compose、Machine、Swarm、Fleet)、...

    Docker 容器与容器云(第2版)

    第二部分深入解读基于Docker的主流容器云技术,讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署的容器云(Compose、Machine、Swarm、Fleet)、...

    Docker 容器与容器云(第2版) PDF带电子目录

    Docker 容器与容器云(第2版) PDF版本,带电子目录,结构清晰

    Docker+容器与容器云

    第二部分深入解读基于Docker的主流容器云技术,讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署的容器云(Compose、Machine、Swarm、Fleet)、...

    基于Docker容器DevOps发布系统

    gitlab环境搭建 harbor环境搭建 jenkins环境搭建、工具安装、插件安装 Docker、Docker Compose 环境搭建 gitlab、harbor、jenkins、Docker 集成

    Docker容器与容器云(第2版) PDF

    基于Docker 1.10和Kubernetes 1.2全面更新 一本书讲透Docker和Kubernetes 从源码层面深度解析Docker核心原理 Kubernetes源码完全解读 *实践 广泛涵盖Docker高级实践技巧 全面梳理主流容器云技术架构方法

    Docker容器与容器云(第二版)

    docker容器与容器云的文档,有助于理解docker的知识。

    《Docker+容器与容器云(第2版)》.pdf.zip

    第一部分深入解读Docker容器技术,包括Docker架构与设计、核心源码解读和高级实践技巧;第二部分归纳和比较主流容器云项目;仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!

    基于微服务和Docker容器技术的PaaS云平台架构设计.docx

    基于微服务架构和Docker容器技术的PaaS云平台建设目标是给我们的开发人员提供一套服务快速开发、部署、运维管理、持续开发持续集成的流程。平台提供基础设施、中间件、数据服务、云服务器等资源,开发人员只需要开发...

    基于Docker的在线交互式Python平台的设计与实现.docx

    本文所实现的基于Docker的在线交互式Python平台为用户提供了一个集编辑器和编译器于一身的在线平台,通过本文实现的Python平台,用户本地无需提供任何Python环境的支持即可编写并执行Python代码。 本系统利用了...

    Docker+容器与容器云(第2版)

    Docker+容器与容器云(第2版)Docker+容器与容器云(第2版)

    Docker容器与容器云

    第二部分深入解读基于Docker的主流容器云技术,讲解了构建自己的容器云的方法,深入分析了3类Docker容器云技术的实现方法的设计思路,包括专注Docker容器编排与部署的容器云(Compose、Machine、Swarm、Fleet)、...

    基于Docker容器的云计算平台搭建实战

    基于Docker容器的云计算平台搭建实战

    docker+容器与容器云(带标签)

    第二部分归纳和比较了三类基于Docker的主流容器云项目,包括专注Docker容器编排与部署的容器云、专注应用支撑的容器云以及一切皆容器的Kubernetes,进而详细解读了Kubernetes核心源码的设计与实现,最后介绍了几种...

Global site tag (gtag.js) - Google Analytics