docker部署apollo详细教程

1、前言

apollo的详细介绍我就不在这里多说了,官网上https://github.com/ctripcorp/apollo 已经说的非常明白了,我就不在这班门弄斧了,还不了解的小伙伴可以去官网上去了解下。

本篇文章只是记录我在使用docker部署的Apollo以及其集群的方式,给大家分享出来也自我做一个记录。

注意: 我是直接部署开始的,有关数据库的创建和初始化自己根据官网搞定。

2、源码编译

2.1 网络策略

网络策略直接使用官网描述的就可以,具体就是分别编辑apollo-configservice/src/main/resources/application.yml和apollo-adminservice/src/main/resources/application.yml,然后把需要忽略的网卡加进去。

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

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

注意,对于application.yml修改时要小心,千万不要把其它信息改错了,如spring.application.name等。

2.2 动态指定注册网络

在使用docker搭建集群是, adminservice、configservice都需要向注册中心注册地址,如果不指定注册IP,注册的是docker内部的网络,导致网络不通。

在apollo-configservice/src/main/resources/bootstrap.yml和apollo-adminservice/src/main/resources/bootstrap.yml添加如下代码。

eureka:
 instance:
    ip-address: ${eureka.instance.ip-address}

这个地方取值从环境变量中取,容器外部来配置这样给部署带来了更大的灵活性。

到这源码的修改已经完成,直接build打包就可以了,拿到对应三个服务的zip包。

如果懒得修改,也可以直接从https://github.com/yuelicn/apollo.拉下我修改好的源码直接打包即可。

3、dockerfile编写

Apollo 的Dockerfile非常简单, 直接使用官方提供的即可。下方是adminservice示例。

# Dockerfile for apollo-adminservice
# Build with:
# docker build -t apollo-adminservice .
# Run with:
# docker run -p 8090:8090 -d --name apollo-adminservice apollo-adminservice

FROM java:8-jre
MAINTAINER Louis

ENV VERSION 1.5.0

RUN apt-get install unzip

ADD apollo-adminservice-${VERSION}-github.zip /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip

RUN unzip /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip -d /apollo-adminservice \
  && rm -rf /apollo-adminservice/apollo-adminservice-${VERSION}-github.zip \
  && sed -i '$d' /apollo-adminservice/scripts/startup.sh \
  && echo "tail -f /dev/null" >> /apollo-adminservice/scripts/startup.sh

EXPOSE 8090

CMD ["/apollo-adminservice/scripts/startup.sh"]

需要注意的,

1: version 需要根据自己打包的版本来修改
2: ADD zip包时修改你路径

三个服务的dockerfile文件基本相同,我就不在这多说了。需要的小伙伴直接从https://github.com/yuelicn/docker-apollo就可以了。

4 docker-compose 的编写

4.1 apollo-configservice-compose.yml

version: "3"
services:
 apollo-configservice:
  container_name: apollo-configservice
  build: apollo-configservice/
  image: apollo-configservice
  ports:
   - 8080:8080
  volumes:
   - "/docker/apollo/logs/100003171:/opt/logs/100003171"
  environment:
   - spring_datasource_url=jdbc:mysql://127.0.0.1:8306/ApolloConfigDB_TEST?characterEncoding=utf8
   - spring_datasource_username=root
   - spring_datasource_password=mysql2019*
   - eureka.instance.ip-address=172.11.11.11

  restart: always

注意事项,

1: build: 中指定你Dockerfile文件的位置
2: environment 环境变量中指定你数据库的配置信息
3: eureka.instance.ip-address 指定注册到eureka地址,这个最好使用你物理机的内网地址。

特别注意: 启动前最好先修改ApolloConfigDB数据库中 ServerConfig中的eureka.service.url值,改为具体的IP
启动:

docker-compose -f apollo-configservice-compose.yml up --build -d

4.2 apollo-adminservice-compose.yml

apollo-adminservice-compose.yml的内容基本和apollo-configservice-compose.yml相同,在这我就不一一说明了。

4.3 apollo-portal-compose.yml

version: "3"
services:
 apollo-portal:
  container_name: apollo-portal
  build: apollo-portal/
  image: apollo-portal
  ports:
   - 8070:8070
  volumes:
   - "/docker/apollo/logs/100003173:/opt/logs/100003173"
   - "/apollo-portal/config/apollo-env.properties:/apollo-portal/config/apollo-env.properties"
  environment:
   - spring_datasource_url=jdbc:mysql://127.0.0.1:8306/ApolloPortalDB?characterEncoding=utf8
   - spring_datasource_username=root
   - spring_datasource_password=mysql2019*

  restart: always

注意事项:
1: 需要注意的和上述configservice基本相同
2: 特别需要注意的事项 重要!重要!重要!重要!重要!volumes: 中我将
apollo-env.properties文件映射到容器外面了,将自己的apollo-env.properties文件配置后将自己的挂载地址填上,冒号前的地址“/apollo-portal/config/apollo-env.properties”修改成自己的。必须在启动前将此配置文件指定好。
启动

docker-compose -f apollo-configservice-compose.yml up --build -d

4.3.1 apollo-env.properties

local.meta=http://localhost:8080
dev.meta=${dev_meta}
fat.meta=${fat_meta}
uat.meta=${uat_meta}
lpt.meta=${lpt_meta}
pro.meta=${pro_meta}

将自己的meta地址配置上, 没有的可以直接删除。有不明白的可以去官网上了解,环境配置完后修改对应的数据库中ApolloPortalDB.ServerConfig中apollo.portal.envs 值,填上你的配置的环境。否则我们在portal管理页面只能看到默认dev环境。

5 完整的docker-compose.yml

如果嫌弃一个个启动麻烦也以使用一个完整的compose来启动。

version: "3"
services:
 apollo-configservice:
  container_name: apollo-configservice
  build: apollo-configservice/
  image: apollo-configservice
  ports:
   - 8080:8080
  volumes:
   - "/docker/apollo/logs/100003171:/opt/logs/100003171"
  environment:
   - spring_datasource_url=jdbc:mysql://47.xx.xx.209:8306/ApolloConfigDB?characterEncoding=utf8
   - spring_datasource_username=root
   - spring_datasource_password=Tusdao@xx*
   - eureka.instance.ip-address=172.11.11.11
  restart: always

 apollo-adminservice:
  container_name: apollo-adminservice
  build: apollo-adminservice/
  image: apollo-adminservice
  ports:
   - 8090:8090
  volumes:
   - "/docker/apollo/logs/100003172:/opt/logs/100003172"
  environment:
   - spring_datasource_url=jdbc:mysql://47.xx.xx.209:8306/ApolloConfigDB?characterEncoding=utf8
   - spring_datasource_username=root
   - spring_datasource_password=Tusdao@xx*
   - eureka.instance.ip-address=172.11.11.11
  depends_on:
   - apollo-configservice

  restart: always

 apollo-portal:
  container_name: apollo-portal
  build: apollo-portal/
  image: apollo-portal
  ports:
   - 8070:8070
  volumes:
   - "/docker/apollo/logs/100003173:/opt/logs/100003173"
   - "/Apollo/docker-image/apollo-portal/config/apollo-env.properties:/apollo-portal/config/apollo-env.properties"
  environment:
   - spring_datasource_url=jdbc:mysql://47.xx.xx.209:8306/ApolloPortalDB?characterEncoding=utf8
   - spring_datasource_username=root
   - spring_datasource_password=Tusdao@xx*
  depends_on:
   - apollo-adminservice
  restart: always

注意: 需要修改的地方和单个基本相同,我在这就不唠叨了。

到这docker部署Apoll基本搞定,如有小伙伴需要完整的docker部署文件请移步https://github.com/yuelicn/docker-apollo

6集群的搭建

Apollo集群的搭建非常简单,只需要修改两个地方就可以了,我们就以正式环境(pro)来说明,
在pro环境我们搭建了两套adminservice、configservice,数据库都是同一个ApolloConfigDB,

1:将ServerConfig中的eureka.service.url值eureka连接信息两个都写上用逗号分隔:http://IP-1:port/eureka,http://IP-2:port/eureka

2:修改apollo-env.properties中对应环境的连接信息如: pro.meta=http://IP-1:port,http://IP-2:port 地址用逗号分隔就可以了。

之后重启服务就搞定了。

最后强调,adminservice、configservice 需要每个环境单独部署,包括数据库。portal只需要部署一套就可以了。

OK! 完成,上述是指个人搭建记录,希望对你有帮助,如果不对的地方欢迎指正。

修改后的源码地址:https://github.com/yuelicn/apollo

整理好的Docker-Apollo:https://github.com/yuelicn/docker-apollo

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 在Docker快速部署Node.js应用的详细步骤

    一.前言 可能还有一些同学不了解docker这个项目,docker是由go语言编写的,一个快速部署的轻量级虚拟技术项目,他允许开发人员将自己的程序和运行环境一起打包,制作成一个docker的image(镜像),这样部署到服务器上,也只需要下载这个image就可以将程序跑起来,免去每次都安装各种依赖和环境的麻烦,还能够做到应用程序之间的隔离 二.实现准备 我会先创建一个简单的Node.js web app,来构建一个镜像.然后基于这个Image运行一个container.从而实现快速部署. 由于网

  • Docker 自动部署tomcat详解

    Docker 自动部署tomcat 1. 下载镜像 # Docker pull centos:latest  #获取最新的centos镜像 2. 启动容器 #docker run -i -t -v /home/user/software/:/home/software/ imageId /bin/bash 其实包含以下三个部分: docker run <相关参数> <镜像ID> <初始命令> 其中,相关参数包括: -i:表示以"交互模式"运行容器 -

  • 详解如何在 Docker 中设置 Go 并部署应用

    嗨,在本教程中,我们将学习如何使用 docker 部署 golang web 应用程序. 你可能已经知道,由于 golang 的高性能和可靠性,docker 是完全是用 golang 写的.在我们详细介绍之前,请确保你已经安装了 docker 以及 golang 并对它们有基本了解. 关于 docker Docker 是一个开源程序,它可以将应用及其完整的依赖包捆绑到一起,并打包为容器,与宿主机共享相同的 Linux 内核.另一方面,像 VMware 这样的基于 hypervisor 的虚拟化操

  • 在docker中部署tomcat并且部署java应用程序的步骤详解

    先给大家简单说下Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有任何接口. 1.先说如何在docker中部署tomcat 第一步:root用户登录在系统根目录下创建文件夹tomcat7,命令如:mkdir tomcat7,并且切换到该目录下:cd tomcat7: 第二步:创建Dockerfile,命令如:touch Docker

  • 在Docker中自动化部署Ruby on Rails的教程

    基本的Rails应用程序 现在让我们启动一个基本的Rails应用.为了更好的展示,我使用Ruby 2.2.0和Rails 4.1.1 在终端运行: $ rvm use 2.2.0 $ rails new && cd docker-test 创建一个基本的控制器: $ rails g controller welcome index --,然后编辑 routes.rb ,以便让该项目的根指向我们新创建的welcome#index方法: root 'welcome#index' 在终端运行 r

  • 在Docker上开始部署Python应用的教程

    几周前, Elastic Beanstalk声明在AWS云中配置和管理Docker容器.在本文中,我们通过一个简单的注册表单页面应用去理解Docker部署过程,该表单使用Elastic Beanstalk Python环境. 关于注册表单应用 几个月之前,我们就已经开发完这个应用并且发表在博客上.有4部分视频和一篇文章"Using DynamoDB and SNS with Elastic Beanstalk in any Supported AWS Region".今天,我们将在这部

  • 在Docker上部署Python的Flask框架的教程

    本文中,我将尝试展示用Docker开发python应用(主要是Web应用)的可行方法.虽然我本人专注于Python的Flask微框架,但本文目的是演示如何通过Docker更好地开发和共享应用程序,(由任何语言和框架开发的应用程序).Docker通过封装依赖项,大大减少了开发环境和正式产品的差距. 大多数Python开发人员在开发中使用virtualenv.它提供了一种易用的机制让应用程序使用自己专用的依赖项,这些依赖项可能与在其它应用程序或操作系统存在冲突(尤其是不同的Pyhton版本,还有不同

  • Docker中部署mysql服务的方法及遇到的坑

    最近一直在学习搬运工,感觉这么厉害的东西怎么以前不知道呢,把自己捣鼓的过程整理记录下来,供同学们参考 第零步:从Docker Hub拉取官方mysql镜像 docker pull mysql 然后就是进入漫长的等待,当然如果你配置了镜像加速器,速度会快那么一丢丢 第一步:使用docker images命令查看镜像 你会看到我们这里已经有了MySQL的的镜像 第二步:启动我们的mysql的镜像,创建一个MySQL的容器 使用命令:docker run -d --name mysql -p 3307

  • Dockerfile 部署java web的环境详解

    Dockerfile 构建java web 环境 Dockfile 介绍: Dockfile是一种被Docker程序解释的脚本,Dockerfile由一条一条的指令组成,每条指令对应Linux下面的一条命令.Docker程序将这些Dockerfile指令翻译真正的Linux命令.Dockerfile有自己书写格式和支持的命令,Docker程序解决这些命令间的依赖关系,类似于Makefile.Docker程序将读取Dockerfile,根据指令生成定制的image.相比image这种黑盒子,Doc

  • docker部署apollo详细教程

    1.前言 apollo的详细介绍我就不在这里多说了,官网上https://github.com/ctripcorp/apollo 已经说的非常明白了,我就不在这班门弄斧了,还不了解的小伙伴可以去官网上去了解下. 本篇文章只是记录我在使用docker部署的Apollo以及其集群的方式,给大家分享出来也自我做一个记录. 注意: 我是直接部署开始的,有关数据库的创建和初始化自己根据官网搞定. 2.源码编译 2.1 网络策略 网络策略直接使用官网描述的就可以,具体就是分别编辑apollo-configs

  • 部署维护docker环境的详细教程

    1,安装环境说明 系统环境:centos6.6 服务应用了:  haproxy  confd   etcd   docker 主机名               ip   服务角色 dockerha-152    192.168.36.152    haproxy confd dockerEtcd-153     192.168.36.153      etcd dockermain-154    192.168.36.154    docker 2,安装依懒包,关闭冲突的服务 官方文档要求Li

  • Idea配置热部署的详细教程

    一.概念 热部署就是正在运行状态的应用,修改了他的源码之后,在不重新启动的情况下能够自动把增量内容编译并部署到服务器上,使得修改立即生效.热部署为了解决的问题有两个, 一是在开发的时候,修改代码后不需要重启应用就能看到效果,大大提升开发效率:二是生产上运行的程序,可以在不停止运行的情况下进行升级,不影响用户使用. 二.Idea开启热部署 本篇文章主要是介绍Idea这款开发工具的热部署,而用Idea的人大多数都是用来开发java程序,当前流行的java程序主要有两种,第一种是传统的Web应用,依赖

  • IDEA热部署配置详细教程

    一.解释 热部署,即应用正属于运行状态时,我们对应用源码进行了修改更新,在不重新启动应用的情况下,可以能够自动的把更新的内容重新进行编译并部署到服务器上,使修改立即生效. 二.好处 在开发过程中,修改代码后不需要重启项目,就能看到效果,大大提高了开发效率. 在生产环境上运行的程序,可以在不停止运行的情况下进行升级,不影响用户的使用,提升了用户体验感. Tomcat运行多个项目时,不会因Tomcat的停止,而停止了其他的项目. 三.IDEA热部署配置 当前流行的JAVA程序主要有: ①传统的Web

  • CentOS7使用docker部署Apollo配置中心的实现

    Apollo开源地址: https://github.com/ctripcorp/apollo 第一步 将项目clone到本地,然后在github的releases页面中下载三个zip文件 本文中重点讲解截止2019年1月最新的1.2.0版本的部署方法 第二步 打开clone到本地的项目,目录结构如下 第三步 在此目录下创建docker-compose.yml文件,写入内容: version: "3" services: apollo-configservice: ##容器服务名 co

  • mysql-canal-rabbitmq 安装部署超详细教程

    原文 1.1. 开启 MySQL 的 binlog 日志 1.修改 my.cnf 或 my.ini(windows), 添加配置项: # binlog 日志存放路径 log-bin=D:\env\mysql-5.7.28-winx64\binlog # 日志中记录每一行数据被修改的形式 binlog-format=ROW # 当前机器的服务 ID, 如果为集群时不能重复 server_id=1 2.重启 mysql 服务后, 查看配置变量是否生效: mysql> show variables l

  • Oracle手动建库安装部署超详细教程

    手动创建PROD数据库 步骤1 指定SID Oracle_SID是用于区别数据库实例的环境变量. ORACLE_SID=prod export ORACLE_SID 步骤2 确定Oracle环境的环境变量 在操作系统平台下,Oracle_SID和ORACLE_HOME必须指定,建议指定PATH包含ORACLE_HOME/bin目录.环境变量的实际操作如下: 创建数据目录和审计目录: [oracle@db1 oradata]$ mkdir -p /u01/app/oradata/prod [ora

  • 新手必看docker安装jenkins详细教程

    Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. jenkins基本工作原理 以上为基本工作原理,只是为了开发人员更好的理解画的(个人理解),详情可查看官方文档:https://www.jenkins.io/zh/ 一.jenkins安装 1.查找,下载jenkins镜像文件 启动docker,查找Jenkins镜像文件 docker search jenkins 下载Jenkins镜像文件

  • docker 部署mysql详细过程(docker部署常见应用)

    之前给大家介绍过:docker(部署常见应用):docker部署nginx docker部署mysql:5.7.26 # 下载镜像 docker pull mysql:5.7.26 # 查看镜像 docker images|grep mysql # 启动容器镜像,建议在/usr/local/workspace/mysql 下执行以下docker run 命令   docker run -p 13306:3306 --name my-mysql -v $PWD/conf:/etc/mysql -v

  • nacos 2.1.0集群多节点部署最新详细教程

    目录 基本信息 源码编译环境 编译准备 命令 编译打包 解压部署的jar包 应用配置文件application.properties 配置调整 修改服务端口 启动文件startup.sh 编码问题 日志 启动日志 服务日志 集群Tips 部署集群 集群配置文件cluster.conf 复制多节点 服务端口 启动集群 节点1:nacos1 启动日志 节点2:nacos2 启动日志 节点3:nacos3 启动日志 Public Key Retrieval is not allowednacos.lo

随机推荐