首页 > 其他分享 >使用Docker安装Apollo并使用SpringBoot连接配置中心

使用Docker安装Apollo并使用SpringBoot连接配置中心

时间:2023-07-27 17:13:54浏览次数:57  
标签:Apollo SpringBoot -- SPRING 配置 DATASOURCE Docker apollo docker

上篇文章我们学习了Apollo的本地安装,如果还不会本地安装的朋友可以查看之前的文章进行了解和学习链接地址(https://www.cnblogs.com/eternality/p/17583023.html),本篇我们学习怎么使用Docker安装Apollo及如何使用Java连接Apollo。阅读本篇文章需要了解docker安装容器相关的使用命令,还不懂docker的朋友请学习完docker后在来查看本篇文章。

1、使用docker搜索镜像

执行docker命令进行镜像搜索

docker search apolloconfig/apollo

执行成功后,可以查看到apollo的三个服务容器镜像。

2、拉取apollo镜像

执行docker pull命令进行镜像拉取,版本自行选择,默认拉取最新的镜像资源。

docker pull apolloconfig/apollo-configservice:latest

docker pull apolloconfig/apollo-adminservice:latest

docker pull apolloconfig/apollo-portal:latest

3、启动Apollo

拉取完docker镜像后,就可以直接通过镜像创建apollo相关容器了,不需要额外的配置apollo的信息。可以在创建容器的时候配置相关参数。

3.1、创建容器apollo-configservice并启动

docker run -d --name apollo-configservice -p 7800:8080 --privileged=true
-v 宿主机日志路径:/opt/logs 
-e SPRING_DATASOURCE_URL="jdbc:mysql://数据库地址:3306/ApolloConfigDB?characterEncoding=utf8" 
-e SPRING_DATASOURCE_USERNAME=数据库账号
-e SPRING_DATASOURCE_PASSWORD=数据库密码
--link mysql-server 
 apolloconfig/apollo-configservice

--link mysql-server  #由于mysql也是使用docker启动的,所以可以使用该参数进行容器互联,数据库地址改为:mysql-server。即完整命令如下:

docker run -d --name apollo-configservice -p 7800:8080 --privileged=true
-v /apollo/apollo-docker/config/logs:/opt/logs 
-e SPRING_DATASOURCE_URL="jdbc:mysql://mysql-server:3306/ApolloConfigDB?characterEncoding=utf8" 
-e SPRING_DATASOURCE_USERNAME=root
-e SPRING_DATASOURCE_PASSWORD=1234qwer
--link mysql-server 
 apolloconfig/apollo-configservice

执行命令之前需要我们改一下数据库的Eureka服务连接地址Url,需要连接上configservice的配置中心,不然启动会报错。在ApolloConfigDB数据库ServerConfig表的eureka.service.url的value的值进行修改。

3.2、创建容器apollo-adminservice并启动

docker run -d --name apollo-adminservice  --net=host  --privileged=true
-v 宿主机日志路径:/opt/logs  
-e SPRING_DATASOURCE_URL="jdbc:mysql://数据库地址:3306/ApolloConfigDB?characterEncoding=utf8" 
-e SPRING_DATASOURCE_USERNAME=数据库账号
-e SPRING_DATASOURCE_PASSWORD=数据库密码
apolloconfig/apollo-adminservice

--net=host不需要再做端口映射,直接占用宿主机的IP和端口号,adminservice使用默认端口8090。当然也可以和创建configservice一样,在创建的时候使用端口映射 -p 参数,这样在执行命令时把--net=host 去掉就可以了加上-p。之所以这样写的原因是因为我想试一下其他的创建方式。所以在我们创建容器的时候完全可以按照自己的方式进行创建适合自己使用的容器,我这里只做引导。有句话做叫:能用就行 ~哈哈 。粘贴下完整启动命令:

docker run -d --name apollo-adminservice  --net=host --privileged=true
-v /apollo/apollo-docker/admin/logs:/opt/logs  
-e SPRING_DATASOURCE_URL="jdbc:mysql://172.25.96.1:3306/ApolloConfigDB?characterEncoding=utf8" 
-e SPRING_DATASOURCE_USERNAME=root 
-e SPRING_DATASOURCE_PASSWORD=1234qwer  
apolloconfig/apollo-adminservice

顺便说一下:在不使用容器互联的情况下,数据库地址需要配置为安装MySQL数据库的地址,要保证容器可以连通MySQL数据库。下面我们就改启动最后一个服务了。

3.3 创建容器apollo-portal并启动

docker run -d --name apollo-portal  -p 8000:8070 --privileged=true
-v 宿主机日志路径:/opt/logs  
-e SPRING_DATASOURCE_URL="jdbc:mysql://数据库地址:3306/ApolloPortalDB?characterEncoding=utf8" 
-e SPRING_DATASOURCE_USERNAME=数据库账号  
-e SPRING_DATASOURCE_PASSWORD=数据库密码
-e APOLLO_PORTAL_ENVS=dev  
-e DEV_META=http://服务器ip地址:8070 \
apolloconfig/apollo-portal

APOLLO_PORTAL_ENVS:对应ApolloPortalDB中的apollo.portal.envs配置项,如果没有在数据库中配置,可以通过此环境参数配置
DEV_META:配置对应环境configservice的地址,以${ENV}_META命名,如果ApolloPortalDB中ServerConfig配置了apollo.portal.meta.servers,则以apollo.portal.meta.servers中的配置为准

完整命令

docker run -d --name apollo-portal  -p 8000:8070 --privileged=true
-v /apollo/apollo-docker/portal/logs:/opt/logs  
-e SPRING_DATASOURCE_URL="jdbc:mysql://172.25.96.1:3306/ApolloPortalDB?characterEncoding=utf8" 
-e SPRING_DATASOURCE_USERNAME=root 
-e SPRING_DATASOURCE_PASSWORD=1234qwer  
-e APOLLO_PORTAL_ENVS=dev  
-e DEV_META=http://172.25.96.1:7800  
apolloconfig/apollo-portal

配置Meta Servers地址,也就是configservice的连接地址,在ApolloPortalDB数据库的ServerConfig表的apollo.portal.meta.servers的value中进行配置。和上面的DEV_META一致。

4、服务配置中心

执行完上面命令后,我们的配置中心就启动了。可以查看容器启动命令

docker ps

输出上面内容说明我们的容器启动成功了,访问服务端口IP:8000可以进行访问,默认的用户名是apollo,密码是admin。

登录成功

 

5、创建应用

登录成功后,我们创建一个应用,在应用里面新增一个配置信息,并发布相关配置。下面会通过Spring boot连接配置中心,查看是否可以获取到相关配置信息。

6、使用Spring boot连接配置中心

首先需要添加Maven依赖

        <properties>
            <apollo.version>1.1.0</apollo.version>
        </properties>

        <!--携程开源框架 配置中心-->
        <dependency>
            <groupId>com.ctrip.framework.apollo</groupId>
            <artifactId>apollo-client</artifactId>
            <version>${apollo.version}</version>
        </dependency>

在Resources资源下面创建application.properties配置文件进行连接配置中心

#阿波罗配置
app.id=spring-cloud-config-dev  #应用ID
apollo.meta=http://172.25.96.1:7800 #Meta Servers连接地址 ,即configservice连接地址
apollo.bootstrap.enabled=true  #springboot在启动阶段就会加载
apollo.bootstrap.namespaces=spring-cloud-management # namespace名称
apollo.bootstrap.eagerLoad.enabled=true #将Apollo配置加载提到初始化日志系统之前。

创建一个controller进行测试

@RestController
public class ApolloController {

    @Value("${apollo.config.value}")
    private Boolean cache;

    @GetMapping("/apollo")
    public String quick(){
        return "服务配置获取的值:" + cache;
    }
}

在启动的时候,启动类需要加上@EnableApolloConfig注解开启配置中心

@SpringBootApplication
@EnableEurekaClient
//开启配置中心
@EnableApolloConfig
//@EnableDiscoveryClient
public class ApolloApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(ApolloApplication.class, args);
    }

}

下面就需要启动项目进行测试了,注意在启动的时候会报一个错误,配置中心连接超时:

WARN 12344 --- [ngPollService-1] c.c.f.a.i.RemoteConfigLongPollService    : Long polling failed, will retry in 1 seconds. appId: spring-cloud-config-dev, cluster: default, namespaces: spring-cloud-management, 
long polling url: http://172.17.0.3:8080/notifications/v2?cluster=default&appId=spring-cloud-config-dev&ip=192.168.1.108&notifications=%5B%7B%22namespaceName%22%3A%22spring-cloud-management%22%2C%22notificationId%22%3A-1%7D%5D,
reason: Could not complete get operation [Cause: connect timed out]

原因是我们使用docker安装,docker容器内部会分配一个ip地址,此时我们只需要在idea上启动类添加 -Dapollo.configService=http://172.25.96.1:7800 指定config service地址。

配置完成后,再次启动发现启动成功了。我们使用postman调用刚刚写的接口:

发现配置信息已经获取到了,在配置中心修改一下参数的值,改为false再次发布:

再次调用postman:

发现值也已经更新成功了。到此我们的Apollo配置中心也就部署完毕了,感谢阅读。

 

标签:Apollo,SpringBoot,--,SPRING,配置,DATASOURCE,Docker,apollo,docker
From: https://www.cnblogs.com/eternality/p/17585460.html

相关文章

  • Centos7安装docker并配置阿里云镜像加速
    前言提示:要安装DockerEngine,您需要一个CentOS7或8的维护版本。不支持或未测试存档版本。该centos-extras库必须启用。默认情况下,此存储库是启用的,但是如果已禁用它,则需要重新启用它。overlay2建议使用存储驱动程序。一、卸载旧版本我们目前现在安装的docker,大多是dockerCE版......
  • docker swarm 工作节点获取不到overlay
    DockerSwarm工作节点获取不到overlay网络在使用DockerSwarm构建分布式应用程序时,我们可能会遇到一些网络相关的问题。其中之一就是工作节点无法获取到overlay网络。本文将介绍DockerSwarmoverlay网络,并解决工作节点无法获取到overlay网络的问题。什么是DockerSw......
  • docker ssh 配置允许ip
    使用DockerSSH配置允许IPDocker是一种流行的容器化平台,能够帮助开发人员更轻松地构建、部署和管理应用程序。在使用Docker时,我们可能需要为容器配置SSH,以便能够通过SSH协议远程访问容器。本文将为您介绍如何使用DockerSSH配置允许特定IP地址访问容器,并提供相应的代码示例。1.......
  • docker search 显示 版本
    Docker搜索镜像并显示版本Docker是一种流行的容器化平台,可以帮助开发人员和运维团队更轻松地构建、发布和管理应用程序。其中一个重要的功能是能够搜索并获取镜像的版本信息。本文将介绍如何使用dockersearch命令来搜索并显示Docker镜像的版本信息。Docker搜索命令dockersearc......
  • docker run 修改运行的脚本
    DockerRun:修改运行的脚本在使用Docker部署应用程序时,我们经常需要在容器启动时执行一些特定的脚本。Docker提供了dockerrun命令,允许我们修改容器运行时要执行的脚本。本文将介绍如何使用dockerrun命令来修改容器的启动脚本,并提供相应的代码示例。DockerRun命令简介......
  • docker run 日志
    Docker运行日志详解Docker是一个开源的容器化平台,它允许开发者将应用程序及其依赖项打包成一个独立的、可移植的容器,以实现快速部署和跨平台运行。在使用Docker时,了解和分析容器的运行日志是非常重要的。本文将介绍如何使用dockerrun命令来查看容器的日志,并提供一些常用的技巧和......
  • Docker Installing spug 运维平台
    DockerInstallingRequirementEnvironment​DockerModernbrowserInstallSteps​Theflowofinstallationisbasedon Centos7.x.1.Installdocker​WARNINGifyouhaveinstalleddocker,youcanskipthisstep.Thefollowingstepsarefor Centos,pl......
  • grafana监控每个docker容器状态
    Grafana监控每个Docker容器状态Docker是一种流行的容器化平台,用于轻松部署和管理应用程序。在一个复杂的Docker环境中,监控每个容器的状态是非常重要的。Grafana是一个功能强大的监控和数据可视化工具,可以帮助我们实现这个目标。本文将介绍如何使用Grafana监控每个Docker容器的状态......
  • [Docker] Docker Images with Docker
    Soit'smucheasiertodowhatwedidwithDocker.Runthiscommand:dockerrun--interactive--ttyalpine:3.10#or,tobeshorter:dockerrun-italpine:3.10Abiteasiertoremember,right?ThiswilldropyouintoaAlpineashshellinsideofa......
  • 使用 QEMU 代替 STM32 开发版本 docker 一键启动
    dockerfile#Compileandinstallqemu_stm32fromfedora:28RUNdnfinstall-y\arm-none-eabi-gcc\arm-none-eabi-newlib\findutils\gcc\git\glib2-devel\libfdt-devel\......