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

相关文章
相关标签/搜索