• 【docker】apollo配置中心启动优化


    问题引出

    apollo官方提供的docker-compose.yml文件中可以发现,启动的同时也会生成一个数据库容器,但我们可能已经拥有一个数据库了,想直接使用已经拥有的数据库作为apollo-config的数据源应该怎么操作呢?https://www.apolloconfig.com/#/zh/deployment/quick-start

    准备

    我们以apollo-quickstart的方式在容器内部执行,那么先需要下载quickstart源文件。下载apollo quickstart源文件

    数据库配置

    这里不做过多赘述,按照官方操作即可。apollo数据库配置官方流程

    修改demo.sh文件

    在官方的流程里是写死定好的,为了方便我们的使用,我们采用可配置的方式实现镜像打包。
    找到demo.sh中配置代码块,修改成如下:

    # apollo config db info
    apollo_config_db_url="jdbc:mysql://${APOLLO_MYSQL_HOST}:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
    apollo_config_db_username=${APOLLO_MYSQL_USERNAME:-root}
    apollo_config_db_password=${APOLLO_MYSQL_PASSWORD:-}
    
    # apollo portal db info
    apollo_portal_db_url="jdbc:mysql://${APOLLO_MYSQL_HOST}:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai"
    apollo_portal_db_username=${APOLLO_MYSQL_USERNAME:-root}
    apollo_portal_db_password=${APOLLO_MYSQL_PASSWORD:-}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    变量解释:

    • APOLLO_MYSQL_HOST: 因为我们使用容器部署,所以这里不能使用localhost去使用宿主机公网IP代替。
    • APOLLO_MYSQL_USERNAME: apollo config,portal 数据库的用户名,在我这里都统一使用统一数据源,所以简化配置替换成了一个变量,如果有拆分数据源的需求可以再更改变量名。
    • APOLLO_MYSQL_PASSWORD: apollo config,portal 数据库的密码

    编写Dockerfile文件

    FROM openjdk:8-jre-alpine
    
    COPY apollo-all-in-one.jar /apollo-quick-start/apollo-all-in-one.jar
    COPY client /apollo-quick-start/client
    COPY demo.sh /apollo-quick-start/demo.sh
    COPY portal/apollo-portal.conf /apollo-quick-start/portal/apollo-portal.conf
    COPY service/apollo-service.conf /apollo-quick-start/service/apollo-service.conf
    
    EXPOSE 8070 8080
    
    RUN echo "http://mirrors.aliyun.com/alpine/v3.6/main" > /etc/apk/repositories \
        && echo "http://mirrors.aliyun.com/alpine/v3.6/community" >> /etc/apk/repositories \
        && apk update upgrade \
        && apk add --no-cache curl bash \
        && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
        && echo "Asia/Shanghai" > /etc/timezone \
        && sed -i'.bak' '/db_url/s/localhost/apollo-db/g' /apollo-quick-start/demo.sh \
        && sed -i "s/exit 0;/tail -f \/dev\/null/g" /apollo-quick-start/demo.sh
    
    CMD ["/apollo-quick-start/demo.sh", "start"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    构建镜像

    docker build -t birdyson/apollo-config:2.0.1 .
    
    • 1

    启动容器

    version: "2"
    services:
      apollo-config:
        image: birdyson/apollo-config:2.0.1 # 我已将镜像推送至docker仓库,大家可以省略上述步骤直接使用
        container_name: apollo-config
        environment:
        - APOLLO_MYSQL_HOST=你的公网IP
        - APOLLO_MYSQL_USERNAME=root
        - APOLLO_MYSQL_PASSWORD=你的数据库密码
        ports:
        - "7080:8080" # 这里我为了防止占用常用端口,将端口映射在宿主机的7080端口之上
        - "7090:8090"
        - "7070:8070"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
  • 相关阅读:
    【RCNN系列】RCNN论文总结
    公网ip和私网ip的区别
    阿里云容器镜像服务的运维总结
    STL算法
    2022数学建模国赛C题思路分析
    vim简单使用笔记
    【故障诊断分析】FFT轴承故障诊断(包络谱)【含Matlab源码 2002期】
    西山居测试开发工程师一面
    这几个好用的去图片水印免费软件,你们知道吗?
    Mysql有多少种常见的日志,分别解释日志的作用
  • 原文地址:https://blog.csdn.net/AlexanderRon/article/details/126003433