首页 > 其他分享 >M2 Pro 本地docker部署apollo

M2 Pro 本地docker部署apollo

时间:2024-08-02 21:55:25浏览次数:23  
标签:容器 部署 Pro host M2 docker apollo configservice

M2 Pro 本地docker部署apollo


本文记录了利用 Docker 部署 Apollo 配置中心的操作步骤。

1. 环境说明

硬件: MacBook Pro 14 M2 pro
Apollo版本:2.1.0
建议在阅读本文前,先了解下Apollo 配置中心官方文档

2. 部署前准备

安装docker,并配置好镜像源:否则拉取可能会失败
能够科学上网:最好能够正常访问docker hub官网,便于搜索并确定拉取镜像版本

3. 部署整体步骤说明

  • Apollo依赖于MySQL数据库,因此首先会部署MySQL
  • 执行Apollo的SQL初始化脚本apolloconfigdb.sql和apolloportaldb.sql
  • 部署apollo-configservice
  • 部署apollo-adminservice
  • 部署apollo-portal

4. 部署流程

4.1 部署MySQL(如果本地已部署,直接跳到4.2步骤)

拉取mysql镜像,指定版本号:8.0.31,官网要求版本号大于等于 MySQL 5.6.5即可
注意我这里是M2 Pro芯片,因此要拉取指定arm架构的版本

docker pull arm64v8/mysql:8.0.31

启动容器

docker run --name apollo-mysql \
  -p 3308:3306 \   #映射端口 3306 到宿主机 3308 端,注意这里根据自己的情况设置,我的3306端口已被之前部署的mysql占用
  -e MYSQL_ROOT_PASSWORD=root \   #数据库密码
  -d arm64v8/mysql:8.0.31

4.2 执行Apollo的SQL初始化脚本

前面提到本次部署采用的Apollo版本是2.1.0,这里最好去官方仓库搜对应的版本下载SQL初始化脚本。
需要下载(官方 Apollo-2.1.0 gitee仓库链接)并执行两个脚本,分别是ApolloPortalDB.sql和ApolloConfigDB.sql。两个脚本缺一不可。
在这里插入图片描述
两个SQL脚本执行后,对应的数据库库名:

ApolloPortalDB.sql对应数据库 schema:ApolloPortalDB
ApolloConfigDB.sql对应数据库 schema:ApolloConfigDB

在这里插入图片描述

4.3 部署apollo-configservice

拉取apollo-configservice镜像

注意:
一定要拉取Apollo2.1.0版本的镜像,避免出现意想不到的问题,且最好科学上网,否则即使docker配置了国内镜像源也大概率会出现拉取超时失败的问题。
docker hub 搜索Apollo,前三个即我们要部署的三个子服务
在这里插入图片描述

  • 先进入第三个apollo-configservice,点击Tags

在这里插入图片描述

  • 找到对应的2.1.0版本,复制docker命令

在这里插入图片描述

docker pull apolloconfig/apollo-configservice:2.1.0 #M系列芯片不要使用这个

重点:
如果是M系列芯片这里一定要指定arm架构的版本,否则拉取的可能是linux/amd64版本,虽然docker能够启动,但是没有显示日志,并且无法正常访问。

docker pull --platform linux/arm64 apolloconfig/apollo-portal:2.1.0 #M系列芯片
#在Docker中,--platform 参数用于指定构建或运行容器时的目标平台。
#Docker 容器可以跨多个平台构建和运行,包括不同的操作系统和架构。
#例如,您可以为Linux的x86_64架构构建一个容器,并在ARM64架构的设备上运行它,只要Docker镜像支持该平台。
#使用 --platform 参数可以确保Docker镜像是为特定平台构建的,
#这有助于避免在不支持的平台上运行容器时出现问题。

启动容器

  • 启动前请确保前面部署的mysql是运行状态且本地客户端能够测试通过正常连接,这里使用idea自带的数据库连接测试
    在这里插入图片描述

创建deploy_apollo_configservice.sh脚本,复制下面的脚本指令,执行
注意:

  • 因为我都是本机docker部署,为了防止IP抖动,可以使用host.docker.internal代替具体的ip。
在Docker中,host.docker.internal 是一个特殊的DNS名称,它用于容器之间或容器与宿主机之间的网络通信。当你在Docker容器内需要引用宿主机的IP地址时,可以使用这个名称。
以下是 host.docker.internal 的几个关键点:
1.容器到宿主机的连接:容器可以通过 host.docker.internal 访问宿主机的内部网络接口,实现容器与宿主机之间的网络通信。
2.容器之间的连接:如果容器需要互相通信,并且它们都在同一个宿主机上运行,它们可以使用 host.docker.internal 来互相引用。
3.网络隔离:host.docker.internal 只在Docker的默认网络中有效,这意味着它不适用于自定义网络或跨宿主机的容器。
  • 比如下面脚本设定JDBC URL 时使用的该指令代替主机IP(使用127.0.0.1或者localhost docker容器之间无法正常通信)。
  • 当然你也可以直接使用ifconfig查询到的宿主机的内网 IP
  • 建议使用host.docker.internal,否则切换网络时,IP地址出现抖动需要重新配置

deploy_apollo_configservice.sh脚本如下

version=2.1.0  #apollo版本
db_user=root  #MySQL 用户名
db_pass=root # 这个数据库密码应该是你部署 MySQL 的时候设置的 root 用户的密码
app_name=apollo-configservice

docker run --name ${app_name} \
  -p 7080:8080 \   # 映射端口 8080 到宿主机 7080 端口
  -e SERVER_PORT=8080  \
  -e SPRING_DATASOURCE_URL="jdbc:mysql://host.docker.internal:3308/ApolloConfigDB?characterEncoding=utf8" \  #设定 JDBC URL 使用的 host 为 host.docker.internal,注意端口号修改为自己前面配置的,我这里使用的是3308
  -e SPRING_DATASOURCE_USERNAME=${db_user} \
  -e SPRING_DATASOURCE_PASSWORD=${db_pass} \
  -d apolloconfig/${app_name}:${version}

访问http://localhost:7080/
显示如下eureka页面表示部署成功!
在这里插入图片描述

端口映射更改带来的配置变动

  • apollo-configservice 服务同时承担 meta server 职责,如果要修改端口,注意要同时同步到ApolloConfigDB.ServerConfig 表中的eureka.service.url配置项以及 apollo-portal 和 apollo-client 中的使用到的 meta server 信息
  • 你可以理解为,apollo-adminservice和apollo-portal要向apollo-configservice注册自己的信息,因此需要知道apollo-configservice的地址,而apollo-adminservice和apollo-portal是可以通过读取对应数据库中apollo-configservice的url的信息的,我们可以在数据库中直接更改即可,这一点在官方文档2.2.1.1.2.4 配置 apollo-portal 的 meta service 信息中有指出
    在这里插入图片描述

因此在部署另外两个服务前需要做以下两个表信息变动。

1. ApolloConfigDB.ServerConfig 表变动——apollo-adminservice读取这个表获取apollo-configservice URL
修改ApolloConfigDB数据库中ServerConfig表中eureka.service.url的值为

http://host.docker.internal:7080/eureka/  #注意端口跟你前面映射的宿主机端口保持一致

在这里插入图片描述

2. ApolloPortalDB.ServerConfig 表变动——apollo-portal读取这个表获取apollo-configservice URL

修改ApolloPortalDB数据库中ServerConfig表中apollo.portal.meta.servers的值为

{
    "DEV":"http://host.docker.internal:7080"
}

在这里插入图片描述

4.4 部署apollo-adminservice

前提:保证apollo-configservice部署运行成功

拉取镜像

docker pull --platform linux/arm64 apolloconfig/adminservice:2.1.0 #M系列芯片,指定平台为 arm架构类型

启动容器

创建deploy_apollo_adminservice.sh脚本,复制下面的指令,执行

version=2.1.0
db_user=root
db_pass=root # 这个数据库密码应该是你部署 MySQL 的时候设置的 root 用户的密码
app_name=apollo-adminservice
docker run --name ${app_name} \
  -p 7090:8090 \  # 映射端口 8090 到宿主机 8090 端
  -e SERVER_PORT=8090 \
  -e SPRING_DATASOURCE_URL="jdbc:mysql://host.docker.internal:3308/ApolloConfigDB?characterEncoding=utf8" \ # 注意对应本机部署的MySQL
  -e SPRING_DATASOURCE_USERNAME=${db_user} \
  -e SPRING_DATASOURCE_PASSWORD=${db_pass} \
  -d apolloconfig/${app_name}:${version}
  • 访问 http://localhost:7090/出现下面页面部署成功!
    在这里插入图片描述

  • 查看运行日志,没有报错
    在这里插入图片描述

4.5 部署apollo-portal

前提:保证apollo-configservice部署运行成功

拉取镜像

docker pull --platform linux/arm64 apolloconfig/portal:2.1.0 #M系列芯片,指定平台为 arm架构类型

启动容器

创建deploy_apollo_portal.sh脚本,复制下面的指令,执行

version=2.1.0
db_user=root
db_pass=root # 这个数据库密码应该是你部署 MySQL 的时候设置的 root 用户的密码
app_name=apollo-portal
docker run --name ${app_name} \
  -p 7070:8070 \
  -e SERVER_PORT=8070 \
  -e SPRING_DATASOURCE_URL="jdbc:mysql://host.docker.internal:3308/ApolloPortalDB?characterEncoding=utf8" \  # 注意对应本机部署的MySQL
  -e SPRING_DATASOURCE_USERNAME=${db_user} \
  -e SPRING_DATASOURCE_PASSWORD=${db_pass} \
  -e APOLLO_PORTAL_ENVS=dev \
  -d apolloconfig/${app_name}:${version}
  • 访问http://localhost:7070/signin,
    在这里插入图片描述

  • 默认账号apollo,密码:admin 成功!!
    在这里插入图片描述

  • 查看运行日志
    在这里插入图片描述

标签:容器,部署,Pro,host,M2,docker,apollo,configservice
From: https://blog.csdn.net/qq_44804073/article/details/140862883

相关文章

  • COSC2391 Further Programming
    COSC2391 FurtherProgramming/COSC1295AdvancedProgrammingAssignment 1–Semester2 2024IntroductionYouarerequiredtoimplementabasicJavaprogram usingJava.This assignment is designed to:•   TestyourknowledgeofbasicJava concepts......
  • WPF C# implement scaletransform and translatetransfrom programmatically
    privatevoidInitRenderTransfrom(){TransformGrouptg=newTransformGroup();ScaleTransformst=newScaleTransform();if(!tg.Children.Contains(st)){tg.Children.Add(st);scaler=st;}TranslateTransformtt=n......
  • Dockerfile 构建java程序的docker镜像
    Dockerfile示例#设置jdk版本FROMopenjdk:8#设置容器内部工作目录为/java,后续命令将在该目录下执行操作WORKDIR/java#置容器的时区为亚洲/上海,以确保正确的时间设置。ENVTZ=Asia/Shanghai#在容器中设置正确的时区信息。RUNln-snf/usr/share/zoneinfo/$TZ/etc/local......
  • 【Docker】搭建 Docker 私有化仓库
    搭建Docker私有化仓库是一个非常重要的实践,它能够帮助你安全地存储和管理Docker镜像,而无需将其发布到公共DockerHub。通过使用私有化仓库,你可以:提高安全性:镜像存储在受控的环境中。提升效率:在公司网络内传输镜像,速度更快。实现自动化:配合CI/CD系统实现自动镜像管理......
  • 【Docker项目实战】使用Docker部署轻量级Markdown文本编辑器
    【【Docker项目实战】使用Docker部署轻量级Markdown文本编辑器一、项目介绍1.1项目简介1.2使用方法二、本次实践介绍2.1本地环境规划2.2本次实践介绍三、本地环境检查3.1安装Docker环境3.2检查Docker服务状态3.3检查Docker版本3.4检查docke......
  • 深入解析与实战:解决 npm ERR! network ‘proxy‘ 配置问题
    在日常的前端开发工作中,使用npm(NodePackageManager)进行依赖管理已经成为了常态。然而,在某些情况下,我们可能会遇到网络配置问题导致的错误信息,比如npmERR!network'proxy'configissetproperly。本文将详细介绍如何解决这一问题,并通过实际案例演示正确的配置方法。......
  • 【Nginx】 proxy_set_header参数设置
    Nginx proxy_set_header参数设置 一、不设置proxy_set_headerHost不设置proxy_set_headerHost时,浏览器直接访问nginx,获取到的Host是proxy_pass后面的值,即$proxy_host的值,参考http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header......
  • mac os 安装item2并配置zsh
    ​安装iterm2macOS自带的终端不好用,iterm2比较漂亮,所以先装个iterm2替换它。安装:brewinstalliterm2或者下载地址  安装zsh设置zsh为默认shellmacOS预装了zsh,输入"chsh-s/bin/zsh"即可将默认shell设置为zsh;如果发现系统没有预装,您也可以用brew安装......
  • docker安装Jenkins
    1、拉取jenkinsdockerpulljenkins/jenkins2、配置jenkins路径mkdir-p/data/jenkins_home3、启动jenkinsdockerrun-d-uroot-p8081:8080-p50000:50000--namejenkins--restart=always-v/data/jenkins_home:/var/jenkins_home-v/etc/localtime:/etc/local......
  • 如何更改 python-prompt-toolkit 中聚焦按钮的颜色
    我正在使用python-prompt-toolkit在Python中构建一个音乐播放器。我想改变聚焦按钮的颜色,但我不太明白。为了实现这一点,我尝试查看buttons.py.在其GitHub上给出的示例中,给出的颜色是红色,但是当我将其更改为绿色时,它不会改变,即保持红色。任何帮助,将不胜感激。......