十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
這篇文章主要介紹了docker如何部署apollo,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
1、前言
apollo的詳細(xì)介紹我就不在這里多說了,官網(wǎng)上https://github.com/ctripcorp/apollo 已經(jīng)說的非常明白了,我就不在這班門弄斧了,還不了解的小伙伴可以去官網(wǎng)上去了解下。
注意: 我是直接部署開始的,有關(guān)數(shù)據(jù)庫的創(chuàng)建和初始化自己根據(jù)官網(wǎng)搞定。
2、源碼編譯
2.1 網(wǎng)絡(luò)策略
網(wǎng)絡(luò)策略直接使用官網(wǎng)描述的就可以,具體就是分別編輯apollo-configservice/src/main/resources/application.yml和apollo-adminservice/src/main/resources/application.yml,然后把需要忽略的網(wǎng)卡加進(jìn)去。
如下面這個例子就是對于apollo-configservice,把docker0和veth.*的網(wǎng)卡在注冊到Eureka時忽略掉。
spring: application: name: apollo-configservice profiles: active: ${apollo_profile} cloud: inetutils: ignoredInterfaces: - docker0 - veth.*
注意,對于application.yml修改時要小心,千萬不要把其它信息改錯了,如spring.application.name等。
2.2 動態(tài)指定注冊網(wǎng)絡(luò)
在使用docker搭建集群是, adminservice、configservice都需要向注冊中心注冊地址,如果不指定注冊IP,注冊的是docker內(nèi)部的網(wǎng)絡(luò),導(dǎo)致網(wǎng)絡(luò)不通。
在apollo-configservice/src/main/resources/bootstrap.yml和apollo-adminservice/src/main/resources/bootstrap.yml添加如下代碼。
eureka: instance: ip-address: ${eureka.instance.ip-address}
這個地方取值從環(huán)境變量中取,容器外部來配置這樣給部署帶來了更大的靈活性。
到這源碼的修改已經(jīng)完成,直接build打包就可以了,拿到對應(yīng)三個服務(wù)的zip包。
如果懶得修改,也可以直接從https://github.com/yuelicn/apollo.拉下我修改好的源碼直接打包即可。
3、dockerfile編寫
Apollo 的Dockerfile非常簡單, 直接使用官方提供的即可。下方是adminservice示例。
# Dockerfile for apollo-adminservice # Build with: # docker build -t apollo-adminservice . # Run with: # docker run -p 8090:8090 -d --name apollo-adminservice apollo-adminservice FROM java:8-jre MAINTAINER Louis ENV VERSION 1.5.0 RUN apt-get install unzip ADD apollo-adminservice-${VERSION}-github.zip /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip RUN unzip /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip -d /apollo-adminservice \ && rm -rf /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip \ && sed -i '$d' /apollo-adminservice/scripts/startup.sh \ && echo "tail -f /dev/null" >> /apollo-adminservice/scripts/startup.sh EXPOSE 8090 CMD ["/apollo-adminservice/scripts/startup.sh"]
需要注意的,
1: version 需要根據(jù)自己打包的版本來修改
2: ADD zip包時修改你路徑
三個服務(wù)的dockerfile文件基本相同,我就不在這多說了。需要的小伙伴直接從https://github.com/yuelicn/docker-apollo就可以了。
4 docker-compose 的編寫
4.1 apollo-configservice-compose.yml
version: "3" services: apollo-configservice: container_name: apollo-configservice build: apollo-configservice/ image: apollo-configservice ports: - 8080:8080 volumes: - "/docker/apollo/logs/100003171:/opt/logs/100003171" environment: - spring_datasource_url=jdbc:mysql://127.0.0.1:8306/ApolloConfigDB_TEST?characterEncoding=utf8 - spring_datasource_username=root - spring_datasource_password=mysql2019* - eureka.instance.ip-address=172.11.11.11 restart: always
注意事項,
1: build: 中指定你Dockerfile文件的位置
2: environment 環(huán)境變量中指定你數(shù)據(jù)庫的配置信息
3: eureka.instance.ip-address 指定注冊到eureka地址,這個最好使用你物理機(jī)的內(nèi)網(wǎng)地址。
特別注意: 啟動前最好先修改ApolloConfigDB數(shù)據(jù)庫中 ServerConfig中的eureka.service.url值,改為具體的IP
啟動:
docker-compose -f apollo-configservice-compose.yml up --build -d
4.2 apollo-adminservice-compose.yml
apollo-adminservice-compose.yml的內(nèi)容基本和apollo-configservice-compose.yml相同,在這我就不一一說明了。
4.3 apollo-portal-compose.yml
version: "3" services: apollo-portal: container_name: apollo-portal build: apollo-portal/ image: apollo-portal ports: - 8070:8070 volumes: - "/docker/apollo/logs/100003173:/opt/logs/100003173" - "/apollo-portal/config/apollo-env.properties:/apollo-portal/config/apollo-env.properties" environment: - spring_datasource_url=jdbc:mysql://127.0.0.1:8306/ApolloPortalDB?characterEncoding=utf8 - spring_datasource_username=root - spring_datasource_password=mysql2019* restart: always
注意事項:
1: 需要注意的和上述configservice基本相同
2: 特別需要注意的事項 重要!重要!重要!重要!重要!volumes: 中我將
apollo-env.properties文件映射到容器外面了,將自己的apollo-env.properties文件配置后將自己的掛載地址填上,冒號前的地址“/apollo-portal/config/apollo-env.properties”修改成自己的。必須在啟動前將此配置文件指定好。
啟動
docker-compose -f apollo-configservice-compose.yml up --build -d
4.3.1 apollo-env.properties
local.meta=http://localhost:8080 dev.meta=${dev_meta} fat.meta=${fat_meta} uat.meta=${uat_meta} lpt.meta=${lpt_meta} pro.meta=${pro_meta}
將自己的meta地址配置上, 沒有的可以直接刪除。有不明白的可以去官網(wǎng)上了解,環(huán)境配置完后修改對應(yīng)的數(shù)據(jù)庫中ApolloPortalDB.ServerConfig中apollo.portal.envs 值,填上你的配置的環(huán)境。否則我們在portal管理頁面只能看到默認(rèn)dev環(huán)境。
5 完整的docker-compose.yml
如果嫌棄一個個啟動麻煩也以使用一個完整的compose來啟動。
version: "3" services: apollo-configservice: container_name: apollo-configservice build: apollo-configservice/ image: apollo-configservice ports: - 8080:8080 volumes: - "/docker/apollo/logs/100003171:/opt/logs/100003171" environment: - spring_datasource_url=jdbc:mysql://47.xx.xx.209:8306/ApolloConfigDB?characterEncoding=utf8 - spring_datasource_username=root - spring_datasource_password=Tusdao@xx* - eureka.instance.ip-address=172.11.11.11 restart: always apollo-adminservice: container_name: apollo-adminservice build: apollo-adminservice/ image: apollo-adminservice ports: - 8090:8090 volumes: - "/docker/apollo/logs/100003172:/opt/logs/100003172" environment: - spring_datasource_url=jdbc:mysql://47.xx.xx.209:8306/ApolloConfigDB?characterEncoding=utf8 - spring_datasource_username=root - spring_datasource_password=Tusdao@xx* - eureka.instance.ip-address=172.11.11.11 depends_on: - apollo-configservice restart: always apollo-portal: container_name: apollo-portal build: apollo-portal/ image: apollo-portal ports: - 8070:8070 volumes: - "/docker/apollo/logs/100003173:/opt/logs/100003173" - "/Apollo/docker-image/apollo-portal/config/apollo-env.properties:/apollo-portal/config/apollo-env.properties" environment: - spring_datasource_url=jdbc:mysql://47.xx.xx.209:8306/ApolloPortalDB?characterEncoding=utf8 - spring_datasource_username=root - spring_datasource_password=Tusdao@xx* depends_on: - apollo-adminservice restart: always
注意: 需要修改的地方和單個基本相同,我在這就不嘮叨了。
到這docker部署Apoll基本搞定,如有小伙伴需要完整的docker部署文件請移步https://github.com/yuelicn/docker-apollo
6集群的搭建
Apollo集群的搭建非常簡單,只需要修改兩個地方就可以了,我們就以正式環(huán)境(pro)來說明,
在pro環(huán)境我們搭建了兩套adminservice、configservice,數(shù)據(jù)庫都是同一個ApolloConfigDB,
1:將ServerConfig中的eureka.service.url值eureka連接信息兩個都寫上用逗號分隔:http://IP-1:port/eureka,http://IP-2:port/eureka
2:修改apollo-env.properties中對應(yīng)環(huán)境的連接信息如: pro.meta=http://IP-1:port,http://IP-2:port 地址用逗號分隔就可以了。
之后重啟服務(wù)就搞定了。
最后強(qiáng)調(diào),adminservice、configservice 需要每個環(huán)境單獨部署,包括數(shù)據(jù)庫。portal只需要部署一套就可以了。
OK! 完成,上述是指個人搭建記錄,希望對你有幫助,如果不對的地方歡迎指正。
修改后的源碼地址:https://github.com/yuelicn/apollo
整理好的Docker-Apollo:https://github.com/yuelicn/docker-apollo
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“docker如何部署apollo”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司,關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計公司行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、網(wǎng)站設(shè)計器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。