docker部署apollo詳細教程

一、前言

apollo的詳細介紹我就不在這裏多說了,官網上https://github.com/ctripcorp/...已經說的很是明白了,我就不在這班門弄斧了,還不瞭解的小夥伴能夠去官網上去了解下。java

本篇文章只是記錄我在使用docker部署的Apollo以及其集羣的方式,給你們分享出來也自我作一個記錄。mysql

注意: 我是直接部署開始的,有關數據庫的建立和初始化本身根據官網搞定。git

二、源碼編譯

2.1 網絡策略

網絡策略直接使用官網描述的就能夠,具體就是分別編輯apollo-configservice/src/main/resources/application.yml和apollo-adminservice/src/main/resources/application.yml,而後把須要忽略的網卡加進去。github

以下面這個例子就是對於apollo-configservice,把docker0和veth.*的網卡在註冊到Eureka時忽略掉。spring

spring:
      application:
          name: apollo-configservice
      profiles:
        active: ${apollo_profile}
      cloud:
        inetutils:
          ignoredInterfaces:
            - docker0
            - veth.*
注意,對於application.yml修改時要當心,千萬不要把其它信息改錯了,如spring.application.name等。

2.2 動態指定註冊網絡

在使用docker搭建集羣是, adminservice、configservice都須要向註冊中心註冊地址,若是不指定註冊IP,註冊的是docker內部的網絡,致使網絡不通。
在apollo-configservice/src/main/resources/bootstrap.yml和apollo-adminservice/src/main/resources/bootstrap.yml添加以下代碼。sql

eureka:
  instance:
        ip-address: ${eureka.instance.ip-address}

這個地方取值從環境變量中取,容器外部來配置這樣給部署帶來了更大的靈活性。docker

到這源碼的修改已經完成,直接build打包就能夠了,拿到對應三個服務的zip包。數據庫

若是懶得修改,也能夠直接從 https://github.com/yuelicn/ap...拉下我修改好的源碼直接打包便可。

三、dockerfile編寫

Apollo 的Dockerfile很是簡單, 直接使用官方提供的便可。下方是adminservice示例。bootstrap

# 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 須要根據本身打包的版原本修改
2: ADD zip包時修改你路徑

三個服務的dockerfile文件基本相同,我就不在這多說了。須要的小夥伴直接從https://github.com/yuelicn/do...clone就能夠了。網絡

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 環境變量中指定你數據庫的配置信息
3: eureka.instance.ip-address 指定註冊到eureka地址,這個最好使用你物理機的內網地址。
特別注意: 啓動前最好先修改ApolloConfigDB數據庫中 ServerConfig中的eureka.service.url值,改成具體的IP

啓動:

docker-compose -f apollo-configservice-compose.yml up --build -d

3.2 apollo-adminservice-compose.yml

apollo-adminservice-compose.yml的內容基本和apollo-configservice-compose.yml相同,在這我就不一一說明了。

3.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

3.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地址配置上, 沒有的能夠直接刪除。有不明白的能夠去官網上了解,環境配置完後修改對應的數據庫中ApolloPortalDB.ServerConfig
中apollo.portal.envs 值,填上你的配置的環境。不然咱們在portal管理頁面只能看到默認dev環境。

4 完整的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/do...

5集羣的搭建

Apollo集羣的搭建很是簡單,只須要修改兩個地方就能夠了,咱們就以正式環境(pro)來講明,
在pro環境咱們搭建了兩套adminservice、configservice,數據庫都是同一個ApolloConfigDB,

1:將ServerConfig中的eureka.service.url值eureka鏈接信息兩個都寫上用逗號分隔:http://IP-1:port/eureka,http://IP-2:port/eureka

2:修改apollo-env.properties中對應環境的鏈接信息如: pro.meta=http://IP-1:port,http://IP-2:port 地址用逗號分隔就能夠了。

以後重啓服務就搞定了。

最後強調,adminservice、configservice 須要每一個環境單獨部署,包括數據庫。portal只須要部署一套就能夠了。

OK! 完成,上述是指我的搭建記錄,但願對你有幫助,若是不對的地方歡迎指正。

修改後的源碼地址:https://github.com/yuelicn/ap...

整理好的Docker-Apollo:https://github.com/yuelicn/do...

相關文章
相關標籤/搜索