Docker部署Apollo配置中心


1.Apollot簡述

      Apollo(阿波羅)是攜程框架部門研發的分布式配置中心,能夠集中化管理應用不同環境、不同集群的配置,配置修改后能夠實時推送到應用端,並且具備規范的權限、流程治理等特性,適用於微服務配置管理場景;服務端基於Spring Boot和Spring Cloud開發,打包后可以直接運行,不需要額外安裝Tomcat等應用容器;Java客戶端不依賴任何框架,能夠運行於所有Java運行時環境,同時對Spring/Spring Boot環境也有較好的支持。可以很好的替代Spring Cloud Config

 

2.部署說明

使用Docker可以快速方便的部署Apollo,部署時將Apollo-configservice、Apollo-adminservice、Apollo-portal分別Docker化,以便提高其擴展性,其中MySQL並沒有Docker化。

 

3.部署步驟

3.1.數據庫初始化工作參見官網

3.2. 修改portal端口

由於是在一台機器上進行(偽)分布式部署Apollo,所以需要在修改portal/script/startup.sh中的端口,如果是在不同的機器上部署則可忽略
SERVER_PORT=8080 =>  SERVER_PORT=8070

3.3. 修改Eureka地址

adminservice啟動時會將自己作為服務注冊到configservice注冊中心中,默認為http://localhost:/8080/eureka,所以需要將ApolloConfigDB.ServerConfig表中的
eureka.service.url字段修改為:http://apollo-configservice/8080/eureka,這樣adminservice啟動時就會在configservice容器中進行注冊

(apollo-configservice為容器編排時configservice容器的服務名,同一網絡中的容器可以使用容器服務名訪問其他容器)

3.4. 修改Meta Service地址

Portal和Apollo Client都需要從Meta Service(即apollo-configservice本身)獲取服務地址,然后通過服務地址直接訪問,Meta Service地址修改在build.sh,
由dev_meta=http://localhost:8080修改為dev_meta=http://apollo-configservice:8080

3.5. 執行編譯、打包

修改完以上配置后,在apollo/script/下執行命令:./build.sh
執行完后將configservice、adminservice、portal的target路徑下apollo-xxx-0.9.0-SNAPSHOT-github.zip分別復制到configservice、adminservice、portal的src/main/docker目錄,
和Dockerfile放在一起,因為在使用Dockerfile文件制作鏡像進需要用這些包

3.6. 編寫docker-compose.yml

使用Docker compose可以定義和運行多個Docke容器應用,所以使用Docker compose對configservice、adminservice、portal進行服務編排

version: "3"

services:
  apollo-configservice:                                         ##容器服務名
    container_name: apollo-configservice                        ##容器名
    build: apollo-configservice/src/main/docker/                ##Dockerfile路徑
    image: apollo-configservice:0.9.0                           ##鏡像名
    ports:
      - "8080:8080"    
    volumes:
      - "/Users/mobin/opt/logs/100003171:/opt/logs/100003171"    ##將/opt/logs/100003171目錄掛載到宿主機的/Users/mobin/opt/logs/100003171方便在宿主機上查看日志
    environment:
      - spring_datasource_url=jdbc:mysql://xxx:3306/ApolloConfigDB?characterEncoding=utf8
      - spring_datasource_username=xxx
      - spring_datasource_password=xxx

  apollo-adminservice:
    container_name: apollo-adminservice
    build: apollo-adminservice/src/main/docker/
    image: apollo-adminservice:0.9.0
    ports:
      - "8090:8090"
    depends_on:
      - apollo-configservice
    volumes:
      - "/Users/mobin/opt/logs/100003172:/opt/logs/100003172"
    environment:
      - spring_datasource_url=jdbc:mysql://xxx:3306/ApolloConfigDB?characterEncoding=utf8
      - spring_datasource_username=xxx
      - spring_datasource_password=xxx

  apollo-portal:
    container_name: apollo-portal
    build: apollo-portal/src/main/docker/
    image: apollo-portal:0.9.0
    ports:
      - "8070:8070"
    depends_on:
      - apollo-adminservice
    volumes:
      - "/Users/mobin/opt/logs/100003173:/opt/logs/100003173"
    environment:
      - spring_datasource_url=jdbc:mysql://xxx:3306/ApolloPortalDB?characterEncoding=utf8
      - spring_datasource_username=xxx
      - spring_datasource_password=xxx

執行命令:docker-compose up -d

然后訪問localhost:8080和localhost:8070即可

 

注意:

1. 如果是在mac環境下volumes的宿主機掛載路徑必須是/Users/用戶名/xxx,而不能是/xxx,如果將上述的volumes值改為如下將會報錯

volumes: - "/opt/logs/100003172:/opt/logs/100003172"

參考資料

Apollo分布式部署

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM