Skip to content
idoop edited this page Oct 19, 2018 · 11 revisions

Welcome to the docker-apollo wiki!

Usage

[TOC]

0. Kubernetes中部署

点这儿查看

1. All in One 方式

即开启包括Potal面板,和Dev/Fat/Uat/Pro环境中的一个或多个.这种方法适合开发者临时调试/测试环境的构建.

因为所有服务都是在同一个Docker容器中,相应的服务地址就是本地,而构建该镜像时默认所有环境的服务地址已经配置成localhost,所以可以省略给Portal配置对应环境服务地址。

version: '2'
services:
  apollo-all-in-one:
    container_name: apollo-all-in-one
    image: idoop/docker-apollo:latest
    restart: always
    #  如果portal出现504错误,则使用"host"模式
    network_mode: "host"
    environment:
      # 开启Potal,默认端口:8070
      # 配置数据库ServerConfig表apollo.portal.envs字段值为要开启的环境,这里是:dev,fat,uat
      PORTAL_DB: jdbc:mysql://10.0.0.8:3306/ApolloPortalDB?characterEncoding=utf8
      PORTAL_DB_USER: root
      PORTAL_DB_PWD: password

      # 开启Dev环境,默认端口Admin:8090,Config:8080
      # 配置数据库ServerConfig表eureka.service.url字段值为http://localhost:8080/eureka/
      DEV_DB: jdbc:mysql://10.0.0.8:3306/ApolloConfigDBDev?characterEncoding=utf8
      DEV_DB_USER: root
      DEV_DB_PWD: password

      # 开启Fat环境,默认端口Admin:8091,Config:8081
      # 配置数据库ServerConfig表eureka.service.url字段值为http://localhost:8081/eureka/
      FAT_DB: jdbc:mysql://10.0.0.8:3306/ApolloConfigDBFat?characterEncoding=utf8
      FAT_DB_USER: root
      FAT_DB_PWD: password
     
      # 开启Uat环境,如果网络模式为host则可以自定义一下Uat环境的端口
      # 下方配置config端口为1000,则配置数据库ServerConfig表eureka.service.url字段值为http://localhost:1000/eureka/
      UAT_DB: jdbc:mysql://10.0.0.8:3306/ApolloConfigDBUat?characterEncoding=utf8
      UAT_DB_USER: root
      UAT_DB_PWD: password
      UAT_ADMIN_PORT: 2000
      UAT_CONFIG_PORT: 1000
      # 如果需要,还可以配置Pro环境

2.分布部署

部署1个Portal,多个Dev环境服务和多个Fat环境服务,并假设IP10.0.1.99开Nginx的80和90端口给dev环境做负载均衡,开8081和8091端口给fat环境做负载均衡.

Dev的docker-compose配置,放在多个服务器上启动. 配置对应数据库中ServerConfigeureka.service.url有两种配置方式:

  1. 配置字段值为http://10.0.1.99:80/eureka/,容器中会启动admin服务和config服务.这种配置的优点是portal端直接连上来可以看到连接数,并且portal端的容器中可以不用启动config和admin服务,直接配置远程地址.缺点则是每个容器中都会多一个admin服务,一个admin大概占用240-260MB的内存.
  2. 配置字段值为http://localhost:8080/eureka/,并且需要设置ONLY_CONFIG环境变量为TRUE,则容器中只会启动config服务.这种配置的优点是节省了内存和cpu的消耗.但是缺点也很明显,portal的容器需要配置admin和config服务启动,这样一来则portal也需要连接对应环境的数据库地址.若是portal和config都在同一个网络中,则并无大碍,可如果两者是在不同网络,则需要暴露数据库的地址给portal,若不想暴露mysql可以参考下方云上config 线下portal的例子.

dev我们使用2的方法配置.

version: '2'
services: 
  apollo-dev:
    image: idoop/docker-apollo:latest
    restart: always
    # 也可在nginx上设置转发端口,而这里则直接用host模式使用默认端口
    ports:
      - "80:8080"
      - "80:8090"
    environment:
      # 只用开config服务
      ONLY_CONFIG: "TRUE"
      DEV_DB: jdbc:mysql://10.0.0.8:3306/ApolloConfigDBDev?characterEncoding=utf8
      DEV_DB_USER: root
      DEV_DB_PWD: password
      # 这里用域名也可以,但要保证能被正常解析出IP.
      # 如果设置了ONLY_CONFIG,也可以不设置LB地址,但推荐设置LB值,方便在Eureka页面查看.
      #DEV_LB: 10.0.1.99

Fat的docker-compose配置,放在多个服务器上启动. 配置对应数据库中ServerConfigeureka.service.url字段值同上一样,也有两种方式:

  1. 配置字段值为http://10.0.1.99:8081/eureka/,优缺点同上.
  2. 配置字段值为http://localhost:8081/eureka/并设置ONLY_CONFIG值,优缺点同上.

fat用1的方法配置.

version: '2'
services:
  apollo-fat:
    image: idoop/docker-apollo:latest
    restart: always
    network_mode: host
    environment:
      FAT_DB: jdbc:mysql://10.0.0.8:3306/ApolloConfigDBFat?characterEncoding=utf8
      FAT_DB_USER: root
      FAT_DB_PWD: password
      # 这里用域名也可以,但要保证能被正常解析出IP.
      FAT_LB: 10.0.1.99

部署Portal

version: '2'
services:
  portal:
    container_name: apollo-portal
    image: idoop/docker-apollo:latest
    restart: always
    #  portal容易出现504错误,可以直接"host"模式
    network_mode: host
    environment:
      # 配置数据库ServerConfig表apollo.portal.envs字段值为要开启的环境,这里是:dev,fat
      PORTAL_DB: jdbc:mysql://10.0.0.8:3306/ApolloPortalDB?characterEncoding=utf8
      PORTAL_DB_USER: root
      PORTAL_DB_PWD: password
      # 因为dev环境设置了ServerConfig表eureka.service.url字段值为localhost,所以需要在本地启动config和admin.
      DEV_DB: jdbc:mysql://10.0.0.8:3306/ApolloConfigDBDev?characterEncoding=utf8
      DEV_DB_USER: root
      DEV_DB_PWD: password
      # 配置fat的地址即可.
      FAT_URL: http://10.0.1.99:8081

3.云上部署Config 线下部署Portal

云上部署的情况和分布式部署大同小异,只是因为线下部署Portal需要做些微改变。

类似阿里云这样的可能是通过弹性IP访问云上的Apollo服务,那么需要配置数据库中的ServerConfigeureka.service.url字段值为弹性IP地址与端口,并在映射弹性IP的ECS上的docker实例启动时传入环境地址,即如果你要启动Pro环境服务,就将PRO_LB设置为弹性IP的地址,且只用修改弹性IP端口映射的那台ECS的docker容器即可,其他已经运行中的服务可以不用改.

弹性IP地址也可以用域名替换

内部只供client连接的config可以如下配置

version: '2'
services:
  apollo-pro-config:
    image: idoop/docker-apollo:latest
    restart: always
    network_mode: host
    environment:
      ONLY_CONFIG: "TRUE"
      PRO_DB: jdbc:mysql://xxx.xxx.com:3306/ApolloConfigDBPro?characterEncoding=utf8
      PRO_DB_USER: root
      PRO_DB_PWD: password
      # 如果有负载均衡器,则可以配置LB参数
      # PRO_LB: 10.10.10.10

假设弹性IP为1.1.1.1,需要对portal提供连接的那个docker实例可以如下配置:

version: '2'
services:
  apollo-pro
    image: idoop/docker-apollo:latest
    restart: always
    ports:
      - "8083:8083"
      - "8093:8093"
    environment:
      PRO_DB: jdbc:mysql://xxx.xxx.com:3306/ApolloConfigDB?characterEncoding=utf8
      PRO_DB_USER: root
      PRO_DB_PWD: password
      # 此处LB设置必须为弹性IP,且同数据库中的eureka.service.url地址一样.
      PRO_LB: 1.1.1.1

线下Portal

version: '2'
services:
  apollo-portal
    image: idoop/docker-apollo:latest
    restart: always
    network_mode: host
    environment:
      PORTAL_DB: jdbc:mysql://xxx.xxx.com:3306/ApolloPortalDB?characterEncoding=utf8
      PORTAL_DB_USER: root
      PORTAL_DB_PWD: password
      PRO_URL: http://1.1.1.1:8083
Clone this wiki locally