Docker部署apollo的教程以及我踩的坑

3 篇文章 0 订阅
1 篇文章 0 订阅

                                 apollo的Docker化以及我踩的坑

首先阅读本文需要掌握的知识点:mysql、docker、apollo、linux的常用命令。

  • 环境准备

1.1 Linux

我使用的时cenos7操作系统,这个安装就不说了,要么用服务器要么用虚拟机。

1.2 Docker

我使用的版本是version19.03.5,安装和配置的详情请看我前面的文章Docker的入门理解Docker安装与配置Docker常用命令

1.3 MySql

MySql数据库,可docker化,我使用docker化的mysql,这里有个小坑,坑了我一天时间。下面介绍Docker化mysql的安装。

 

获取镜像命令:

 

(原Docker镜像官方仓库,有可能网络会卡住)

docker pull mysql

 

或者

 

(网易云的Docker镜像仓库)

docker pull hub.c.163.com/library/mysql:latest

 

启动mysql镜像命令:

docker pull hub.c.163.com/library/mysql:latest

 pull后面跟的是镜像名或者id

1.4 Apollo(携程阿波罗)

首先从github上下载apollo项目

开源地址:https://github.com/ctripcorp/apollo

1.4.1 初始化数据库

下载后得到一个这样的项目结构

                                              图1

        连接刚刚docker化的mysql数据库。

        把项目中路径为scripts/db/docker-quick-start/sql/apolloconfigdb.sql和scripts/db/docker-quick-start/sql/apolloportaldb.sql(图1中红色框)的两个sql文件里的代码复制或者导入到你的数据库管理软件中执行,执行后得到ApolloConfigDB和ApolloPortalDB两个数据库。

可修改图中红框地址为你的eureka注册中心地址

        这里可修改环境的名字和个数,用逗号分隔,例如:dev,fat,uat,pro

       

 网络策略(来自官网)

        分布式部署的时候,apollo-configservice和apollo-adminservice需要把自己的IP和端口注册到Meta Server(apollo-configservice本身)。

        Apollo客户端和Portal会从Meta Server获取服务的地址(IP+端口),然后通过服务地址直接访问。

        所以如果实际部署的机器有多块网卡(如docker),或者存在某些网卡的IP是Apollo客户端和Portal无法访问的(如网络安全限制),那么我们就需要在apollo-configservice和apollo-adminservice中做相关限制以避免Eureka将这些网卡的IP注册到Meta Server。

        如下面这个例子就是对于apollo-configservice,把docker0和veth.* 的网卡在注册到Eureka时忽略掉。

spring:
  application:
      name: apollo-configservice
  profiles:
    active: ${apollo_profile}
  cloud:
    inetutils:
      ignoredInterfaces:
        - docker0
        - veth.*

        在apollo-configservice\src\main\resources\application.yml和apollo-adminservice\src\main\resources\application.yml里加入这个忽略规则。

        随后双击编辑build.sh执行文件(图1中黄色框)。

                                                                                                    图2

        修改图2中红框的数据,第一个为ApolloConfigDB数据的连接信息,第二个为ApolloPortalDB数据的连接信息。第三个为各个环境下对应的configservice服务地址。我这里测试只设了一个dev测试地址,所以只改了一个dev的。

        使用windows下使用cmd命令或者直接在idea的Terminal下进入到项目中的scripts目录下执行可执行文件build.sh(或者打开文件夹双击执行也行)。

        等待执行完后把项目中apollo-adminservice、apollo-configservice、apollo-portal三个文件夹通过文件传输工具传入虚拟机的cenos7操作系统中

        随后把三个文件夹各自对应的路径/apollo-adminservice/target、/apollo-configservice/target、/apollo-portal/target中的zip包拷贝到对应目录分别为/apollo-adminservice/src/main/docker、/apollo-configservice/src/main/docker、/apollo-portal/src/main/docker中。

然而这里还有一个要注意的点,毕竟8080端口太常用,所以我希望把三个服务的端口都改一改,所以这里需要把每个服务对应的Dockerfile文件里对应的端口都改一下。

像这样,把8070改为9070,另外的两个Dockerfile也改一下。

随后到刚刚的apollo-adminservice、apollo-configservice、apollo-portal三个文件夹的同级目录下创建一个docker-compose.yml文件:

文件内容是:

version: "3"

services:
  apollo-configservice:                                         ##容器服务名
    container_name: apollo-configservice                        ##容器名
    build: apollo-configservice/src/main/docker/                ##Dockerfile路径
    image: apollo-configservice:1.6.0                           ##镜像名
    ports:
      - "9080:9080"    
    volumes:
      - "/opt/logs/100003171:/opt/logs/100003171"    ##将/opt/logs/100003171目录挂载到宿主机的/opt/logs/100003171方便在宿主机上查看日志
    environment:
      - spring_datasource_url=jdbc:mysql://192.168.241.10:3306/ApolloConfigDB?characterEncoding=utf8
      - spring_datasource_username=root
      - spring_datasource_password=123456
      - eureka.instance.ip-address=192.168.241.10
      
    restart: always

  apollo-adminservice:
    container_name: apollo-adminservice
    build: apollo-adminservice/src/main/docker/
    image: apollo-adminservice:1.6.0
    ports:
      - "9090:9090"
    depends_on:
      - apollo-configservice
    volumes:
      - "/opt/logs/100003172:/opt/logs/100003172"
    environment:
      - spring_datasource_url=jdbc:mysql://192.168.241.10:3306/ApolloConfigDB?characterEncoding=utf8
      - spring_datasource_username=root
      - spring_datasource_password=123456
      - eureka.instance.ip-address=192.168.241.10
      
    restart: always

  apollo-portal:
    container_name: apollo-portal
    build: apollo-portal/src/main/docker/
    image: apollo-portal:1.6.0
    ports:
      - "9070:9070"
    depends_on:
      - apollo-adminservice
    volumes:
      - "/opt/logs/100003173:/opt/logs/100003173"
    environment:
      - spring_datasource_url=jdbc:mysql://192.168.241.10:3306/ApolloPortalDB?characterEncoding=utf8
      - spring_datasource_username=root
      - spring_datasource_password=123456
      
    restart: always

在此目录下执行命令:

docker-compose up -d

利用docker compose命令直接一步做到构建三个镜像,docker运行三个镜像(也可以一个个来自己构建和运行,通过他自带的那个Dockerfile一个命令就能构建镜像)。

docker compose需要安装,安装方法就不说了,忘了,请移步自行百度。

构建和启动成功!!

随后在我高兴了不到一分钟,发现这三个apollo的docker容器都停了!

        查看日志发现报错just quit unexpectedly, please check logs under /opt/logs/100003171 and /tmp for more information!

        然后再进入对应目录查看运行日志发现原因是连不上数据库?我数据库明明都开了,在我windows上都能通过数据库管理软件连上去进行建表操作,所以排除了数据库没运行起来的可能。

        辗转反侧,到处查资料,发现原因是需要关闭linux防火墙。。。

命令:

systemctl stop firewalld.service

然后再重新启动镜像,运行成功,值得一提的是,一个个运行镜像的话按照configservice、adminservice、portal顺序启动。

运行成功!

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Docker部署Apollo,可以按照以下步骤进行操作: 1. 首先,确保你对Docker很熟悉,因为Docker部署Apollo只适用于快速入门和了解Apollo,并不适用于生产环境。 2. 在Apollo项目中,将相关的jar包文件拷贝到Docker目录中。这些jar包文件包括apollo-portal、apollo-configservice和apollo-adminservice。将它们分别拷贝到对应的Docker目录中,同确保每个目录中有一个Dockerfile。 3. 使用Docker命令构建镜像。针对每个Docker目录,使用如下命令构建镜像: docker build -t 镜像名 Docker目录路径 例如,使用以下命令构建apollo-portal镜像: docker build -t www19930327/apollo-portal ./apollo-portal/src/main/docker/ 同样的,对于apollo-configservice和apollo-adminservice,也分别构建相应的镜像。 4. 将镜像推送到镜像仓库。使用docker push命令,将每个镜像推送到相应的镜像仓库。例如,使用以下命令推送apollo-portal镜像: docker push www19930327/apollo-portal 同样的,对于apollo-configservice和apollo-adminservice,也分别推送相应的镜像。 5. 使用docker-compose进行部署。在当前文件夹下,确保有一个docker-compose.yaml文件。执行docker-compose up命令,启动Apollo服务。在执行过程中,你会看到一些输出信息,最终会显示服务器启动完成。 请注意,这里提供的是使用Docker部署Apollo的一般步骤,具体操作需要根据你的实际环境和需求进行相应调整。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [详解Docker快速部署Apollo配置中心](https://blog.csdn.net/weixin_46785144/article/details/124247851)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [docker安装apollo](https://blog.csdn.net/qq_38983728/article/details/90108387)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值