docker compose 一键部署分布式配置中心Apollo的过程详解

 更新时间:2021年09月19日 10:25:40   作者:高增智  
这篇文章主要介绍了docker compose 一键部署分布式配置中心Apollo,今天我们使用Docker来进行搭建,毕竟Docker对于开发者来说更友好一些,需要的朋友可以参考下

简介

说起分布式肯定要想到分布式配置中心、分布式日志、分布式链路追踪等

在分布式部署中业务往往有很多配置比如: 应用程序在启动和运行时需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等,都需要去维护和配置,但不可能一台台服务器登录上去配置
今天我要跟大家分享一下分布式配置中心Apollo:

Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

搭建

官方文档中有两种搭建方式一种是下载源代码进行搭建,一种是使用Docker或者K8S进行搭建,今天我们使用Docker来进行搭建,毕竟Docker对于开发者来说更友好一些。

如果已有Mysql服务,推荐已有Mysql服务或者云服务RDS来当数据库使用,毕竟数据无价。

version: "3"
services:
  apollo-configservice: #Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端
    image: apolloconfig/apollo-configservice:1.8.1
    restart: always
    #container_name: apollo-configservice
    volumes:
          - ./logs/apollo-configservice:/opt/logs
    ports:
      - "8080:8080"
    environment:
      - TZ='Asia/Shanghai'    
      - SERVER_PORT=8080
      - EUREKA_INSTANCE_IP_ADDRESS=xxx.xxx.xxx.xxx
      - EUREKA_INSTANCE_HOME_PAGE_URL=http://xxx.xxx.xxx.xxx:8080
      - SPRING_DATASOURCE_URL=jdbc:mysql://xxx.xxx.xxx.xxx:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=MysqkPassWord!
      
      
  apollo-adminservice: #Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
    image: apolloconfig/apollo-adminservice:1.8.1
    restart: always
    #container_name: apollo-adminservice
    volumes:
      - ./logs/apollo-adminservice:/opt/logs
    ports:
      - "8090:8090"
    depends_on:
      - apollo-configservice
    environment:
      - TZ='Asia/Shanghai'    
      - SERVER_PORT=8090
      - EUREKA_INSTANCE_IP_ADDRESS=xxx.xxx.xxx.xxx
      - SPRING_DATASOURCE_URL=jdbc:mysql://xxx.xxx.xxx.xxx:3306/ApolloConfigDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=MysqkPassWord!
      
      
  apollo-portal: #管理界面
    image: apolloconfig/apollo-portal:1.8.1
    restart: always
    container_name: apollo-portal
    volumes:
      - ./logs/apollo-portal:/opt/logs
    ports:
      - "8070:8070"
    depends_on:
      - apollo-adminservice
    environment:
      - TZ='Asia/Shanghai'    
      - SERVER_PORT=8070
      - EUREKA_INSTANCE_IP_ADDRESS=xxx.xxx.xxx.xxx
      - APOLLO_PORTAL_ENVS=dev
      - DEV_META=http://xxx.xxx.xxx.xxx:8080
      - SPRING_DATASOURCE_URL=jdbc:mysql://xxx.xxx.xxx.xxx:3306/ApolloPortalDB?characterEncoding=utf8&serverTimezone=Asia/Shanghai
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=MysqkPassWord!

从以上docker-compose.yaml中可以看出共包含3个服务,分别为:

  1. Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端
  2. Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
  3. Portal(管理界面)

如果想了解它们之间的运行方式推荐查看官方文档

日志挂载到外部./logs目录下

大家可以看到上方并没有给出Mysql的部署,如果需要使用容器部署Mysql可以参照下方docker-compose.yaml

version: '3'

services: 

  mysql: # myslq 数据库
    image: 'mysql/mysql-server'
    container_name: 'mysql'
    restart: always
    command: --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --lower-case-table-names=1
    environment: #环境变量
      MYSQL_ROOT_HOST: "%" 
      MYSQL_ROOT_PASSWORD: password
      MYSQL_USER: brook
      MYSQL_PASSWORD: password
    ports:
      - "3306:3306"

上述mysql的docker-compose.yaml 仅供测试使用

初始化数据库
初始化 apolloconfigdb.sqlapolloportaldb.sql

数据库初始化后,记得修改apolloconfigdb库中serverconfig表的 eureka.service.url 否则 apollo-adminservice无法注册到eureka

修改后切换到Apollo docker-compose.yaml目录 然后使用

docker-compose up -d #启动文件中的三个服务并且后台运行

查看启动情况

docker-compose ps

访问 http://10.0.0.53:8070/ #Apollo管理端

默认用户名:apollo
默认密码:admin

创建一个测试项目


测试

创建一个.NetCore项目 添加Apollo.net client

添加Apollo

配置Apollo

配置如上

添加测试内容
代码中获取Apollo

启动程序 请求/weatherforecast/apollotest

发现并未获取到apollo中设置的配置

检查Apollo发现配置的值并没有发布

所以大家配置或者修改了Apollo一定记得发布,我们发布后再次刷新浏览器

发现数据已经是新的数据了,我们再次修改一下Apollo的Value

刷新

致此 Apollo已经搭建完毕并且可以正常使用了

代码

示例中的代码在
https://github.com/yuefengkai/Brook.Apollo
欢迎大家Start

注意如果程序启动后无法拉取配置,可以打开Apollo的日志,在控制台中可以看到详细的配置 放到Program.cs Main函数第一行即可!

LogManager.UseConsoleLogging(Com.Ctrip.Framework.Apollo.Logging.LogLevel.Trace);

参考

1.https://github.com/apolloconfig/apollo.net
2.https://github.com/apolloconfig/apollo
3.https://github.com/apolloconfig/apollo/tree/master/scripts/docker-quick-start

到此这篇关于docker compose 一键部署分布式配置中心Apollo的文章就介绍到这了,更多相关docker compose部署分布式配置中心Apollo内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 开放Docker端口的实现示例

    开放Docker端口的实现示例

    本篇文章主要介绍了开放Docker端口的实现示例, 需要的朋友可以过来参考下,希望对大家有所帮助
    2014-01-01
  • docker迁移数据目录的方法步骤

    docker迁移数据目录的方法步骤

    本文主要介绍了docker迁移数据目录的方法步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • 一文详解如何修改Docker的默认存储路径

    一文详解如何修改Docker的默认存储路径

    这篇文章主要介绍了关于如何修改Docker的默认存储路径的相关资料,默认安装的情况下,会使用 /var/lib/docker/ 目录作为存储目录,用以存放拉取的镜像和创建的容器等,这个路径是系统存储目录,一般空间会比较小,需要的朋友可以参考下
    2023-08-08
  • 详解docker进行数据挂载的三种模式

    详解docker进行数据挂载的三种模式

    Docker 提供了三种方式将数据从宿主机挂载到 Docker容器中: volumes、bind mounts、tmpfs ,这篇文章主要介绍了docker进行数据挂载的三种模式,需要的朋友可以参考下
    2022-05-05
  • 详解如何在 docker 容器中捕获信号

    详解如何在 docker 容器中捕获信号

    本篇文章主要介绍了如何在 docker 容器中捕获信号,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Docker教程:使用容器(简单示例)

    Docker教程:使用容器(简单示例)

    今天小编就为大家分享一篇关于Docker教程:使用容器(简单示例),小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • AnythingLLM的Docker使用方式

    AnythingLLM的Docker使用方式

    文章介绍了如何使用AnythingLLM的Docker镜像,并提供了一些生成和自定义Docker镜像的详细步骤,包括下载代码、构建镜像和启动容器
    2025-02-02
  • 关于Docker容器Dead状态的分析

    关于Docker容器Dead状态的分析

    这篇文章主要介绍了关于Docker容器Dead状态的分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • 如何解决安装docker的yum工具时报错问题

    如何解决安装docker的yum工具时报错问题

    在安装Docker时遇到yum工具错误可通过更新yum源解决,先卸载旧Docker,备份原yum源,下载新的CentOS-Base.repo文件到指定目录,安装yum工具后,配置Docker的yum源,国内用户建议使用aliyun源以避免访问异常,安装并启动Docker,校验是否成功
    2024-09-09
  • 使用Docker将容器目录挂载到主机上的实现方法

    使用Docker将容器目录挂载到主机上的实现方法

    本文主要介绍了使用Docker将容器目录挂载到主机上的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05

最新评论