• Apollo之Docker部署


    版本与规划

    1. Apollo 1.9.2

    2. IP分配

      用途IP地址环境
      portal172.28.0.2:9000
      adminService、configServiceconfigService 172.28.0.5:8060
      adminService 172.28.0.3:8090
      DEV
      adminService、configServiceconfigService 172.28.0.6:8060
      adminService 172.28.0.4:8090
      QASA
      数据库172.16.130.31:3307ApolloConfigDB_DEV
      数据库172.16.130.31:3307ApolloConfigDB_QASA
      数据库172.16.130.31:3307ApolloPortalDB

    打包

    1. 修改apollo-adminservice和apollo-configservice的application.yml配置

      1. 配置路径apollo-adminservice/src/main/resources/application.yml
      2. 配置路径apollo-configservice/src/main/resources/application.yml
      spring:
        application:
          name: apollo-adminservice
        profiles:
          active: ${apollo_profile}
        cloud:
          consul:
            enabled: false
      #######新增配置start###########      
          inetutils:
            ignoredInterfaces:
            - docker0
            - veth.*  
      #######新增配置end###########          
      eureka:
        instance:
          hostname: ${hostname:localhost}
          ip-address: ${eureka.instance.ip-address} #新增     
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
    2. 修改复制scripts/build.shscripts/build_dev.sh,修改数据库地址和meta server地址

      # apollo config db info
      apollo_config_db_url='jdbc:mysql://172.16.117.33:3307/ApolloConfigDB_DEV?characterEncoding=utf8'
      apollo_config_db_username='root'
      apollo_config_db_password='root'
      
      # apollo portal db info
      apollo_portal_db_url='jdbc:mysql://172.16.117.33:3307/ApolloConfigDB_DEV?characterEncoding=utf8'
      apollo_portal_db_username='root'
      apollo_portal_db_password='root'
      
      dev_meta=http://172.28.0.5:8080
      fat_meta=http://172.28.0.6:8080
      META_SERVERS_OPTS="-Ddev_meta=$dev_meta -Dfat_meta=$fat_meta"
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
    3. 执行构建脚本

      $ sh scripts/build_dev.sh
      
      • 1
    4. 复制scripts/sql/apolloconfigdb.sql为两份,apolloconfigdb_dev.sql和apolloconfigdb_qasa.sql。修改完之后执行脚本

      1. DEV数据库(修改数据库名和metaserver地址)
      CREATE DATABASE IF NOT EXISTS ApolloConfigDB_DEV DEFAULT CHARACTER SET = utf8mb4;
      Use ApolloConfigDB_DEV;
      
      eureka.service.url 修改为http://172.28.0.5:8060/eureka/
      
      2. FAT数据库(修改数据库名和metaserver地址)
      CREATE DATABASE IF NOT EXISTS ApolloConfigDB_QASA DEFAULT CHARACTER SET = utf8mb4;
      Use ApolloConfigDB_QASA;
      
      eureka.service.url 修改为 http://172.28.0.6:8060/eureka/
      
      3. 修改scripts/sql/apolloportaldb.sql中的meta.server地址
      apollo.portal.meta.servers为{"DEV":"http://172.28.0.5:8060","FAT":"http://172.28.0.6:8060"}
      
      apollo.portal.envs 修改为dev,fat
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16

    Docker构建

    1. adminService的Dockerfile

      FROM registry.cn-beijing.aliyuncs.com/jannal/centos7.9-jdk8:1.0.0
      USER root
      
      ENV PACKAGE_FILE=apollo-adminservice-1.9.2-github.zip
      
      COPY ${PACKAGE_FILE} /root/install/
      
      WORKDIR /root/install
      
      ENV APOLLO_RUN_MODE "Docker"
      
      RUN yum makecache \
          && yum -y install unzip nc \
      	  && yum clean all  \
      	  && unzip  ${PACKAGE_FILE} -d /usr/local/apollo-adminservice  \
          && chmod 755  -R /usr/local/apollo-adminservice \
      	  && rm -rf /root/install/* 
      
      WORKDIR /usr/local/apollo-adminservice
      
      CMD sh /usr/local/apollo-adminservice/scripts/startup.sh 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
    2. configservice的Dockerfile

      FROM registry.cn-beijing.aliyuncs.com/jannal/centos7.9-jdk8:1.0.0
      
      USER root
      
      ENV PACKAGE_FILE=apollo-configservice-1.9.2-github.zip
      
      COPY ${PACKAGE_FILE} /root/install/
      
      WORKDIR /root/install
      
      ENV APOLLO_RUN_MODE "Docker"
      
      RUN yum makecache \
          && yum -y install unzip  \
      	&& yum clean all  \
      	&& unzip ${PACKAGE_FILE} -d /usr/local/apollo-configservice  \
          && chmod 755  -R /usr/local/apollo-configservice  \
      	&& rm -rf /root/install/* 
      
      WORKDIR /usr/local/apollo-configservice
      
      CMD sh /usr/local/apollo-configservice/scripts/startup.sh 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
    3. portal的Dockerfile

      FROM registry.cn-beijing.aliyuncs.com/jannal/centos7.9-jdk8:1.0.0
      
      USER root
      
      ENV PACKAGE_FILE=apollo-portal-1.9.2-github.zip
      
      COPY ${PACKAGE_FILE} /root/install/
      
      WORKDIR /root/install
      
      ENV APOLLO_RUN_MODE "Docker"
      
      RUN yum makecache \
          && yum -y install unzip  \
      	&& yum clean all  \
      	&& unzip ${PACKAGE_FILE} -d /usr/local/apollo-portal  \
          && chmod 755  -R /usr/local/apollo-portal  \
      	&& rm -rf /root/install/* 
      
      WORKDIR /usr/local/apollo-portal
      
      CMD sh /usr/local/apollo-portal/scripts/startup.sh 
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
    4. 构建脚本

      #!/usr/bin/env bash
      IMAGE_NAME=apollo-adminservice
      VERSION=1.9.2
      docker build . -t registry.cn-beijing.aliyuncs.com/jannal/${IMAGE_NAME}:${VERSION}
      
      IMAGE_NAME=apollo-configservice
      VERSION=1.9.2
      docker build . -t registry.cn-beijing.aliyuncs.com/jannal/${IMAGE_NAME}:${VERSION}
      
      IMAGE_NAME=apollo-portal
      VERSION=1.9.2
      docker build . -t registry.cn-beijing.aliyuncs.com/jannal/${IMAGE_NAME}:${VERSION}
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
    5. 创建一系列文件夹和文件,最终的目录结构

      $ tree
      ├── README.MD
      ├── apollo-adminservice
      │   ├── Dockerfile
      │   ├── build.sh
      │   └── scripts
      │       └── startup.sh
      ├── apollo-configservice
      │   ├── Dockerfile
      │   ├── build.sh
      │   └── scripts
      │       └── startup.sh
      ├── apollo-portal
      │   ├── Dockerfile
      │   ├── build.sh
      │   ├── config
      │   │   └── apollo-env.properties
      │   └── scripts
      │       └── startup.sh
      ├── docker-compose.yaml
      ├── docker-start.sh
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21

    Docker部署

    1. 基于上面的目录结构,修改apollo-adminservice/scripts/startup.sh。也可以添加一些JVM参数

      SERVER_PORT=${SERVER_PORT:=8090}
      
      • 1
    2. 基于上面的目录结构,修改apollo-configservice/scripts/startup.sh

      SERVER_PORT=${SERVER_PORT:=8060}
      export JAVA_OPTS="-Deureka.client.fetch-registry=false"
      
      • 1
      • 2
    3. 基于上面的目录结构,修改apollo-portal/scripts/startup.sh

      SERVER_PORT=${SERVER_PORT:=9000}
      
      • 1
    4. 基于上面的目录结构,修改apollo-portal/config/apollo-env.properties

      local.meta=http://localhost:8060
      dev.meta=http://172.28.0.5:8060
      fat.meta=http://172.28.0.6:8060
      
      • 1
      • 2
      • 3
    5. docker-compose.yaml文件.这里一定要注意加上APOLLO_RUN_MODE=Docker,否则启动脚本不是前台执行,也可以直接在startup.sh里添加

      # APOLLO_RUN_MODE需要开启才能前台运行
      version: "3"
      services:
      
        apollo-adminservice-dev:
          image : registry.cn-beijing.aliyuncs.com/jannal/apollo-adminservice:1.9.2
          container_name: apollo-adminservice-dev
          volumes:
            - "./apollo-adminservice/scripts/startup.sh:/usr/local/apollo-adminservice/scripts/startup.sh:rw"
            - "./logs/apollo-adminservice-dev/:/opt/logs/100003172/:rw"
          depends_on:
            - apollo-configservice-dev
          ports:
            - "8090:8090"
          command: >
            /bin/bash -c '
            sleep 60;
            echo "sleep over";
            /usr/local/apollo-adminservice/scripts/startup.sh 
            '  
          hostname: apollo-adminservice-dev 
          environment: 
            - SPRING_DATASOURCE_URL=jdbc:mysql://172.16.117.33:3307/ApolloConfigDB_DEV?characterEncoding=utf8
            - SPRING_DATASOURCE_USERNAME=root
            - SPRING_DATASOURCE_PASSWORD=root
            - eureka.instance.ip-address=172.28.0.3  
            - APOLLO_RUN_MODE=Docker
          extra_hosts:
            - "apollo-adminservice-dev:172.28.0.3"  
            - "apollo-adminservice-qasa:172.28.0.4"
            - "apollo-configservice-dev:172.28.0.5"  
            - "apollo-configservice-qasa:172.28.0.6"
          networks:
            apollo-net:
              ipv4_address: 172.28.0.3
          restart: always
      
        apollo-adminservice-qasa:
          image : registry.cn-beijing.aliyuncs.com/jannal/apollo-adminservice:1.9.2
          container_name: apollo-adminservice-qasa
          volumes:
            - "./apollo-adminservice/scripts/startup.sh:/usr/local/apollo-adminservice/scripts/startup.sh:rw"
            - "./logs/apollo-adminservice-qasa/:/opt/logs/100003172/:rw"
          depends_on:
            - apollo-configservice-qasa
          ports:
            - "8091:8090"
          command: >
            /bin/bash -c '
            sleep 60;
            echo "sleep over";
            /usr/local/apollo-adminservice/scripts/startup.sh 
            ' 
          hostname: apollo-adminservice-qasa   
          environment: 
            - SPRING_DATASOURCE_URL=jdbc:mysql://172.16.117.33:3307/ApolloConfigDB_QASA?characterEncoding=utf8
            - SPRING_DATASOURCE_USERNAME=root
            - SPRING_DATASOURCE_PASSWORD=root
            - eureka.instance.ip-address=172.28.0.4
            - APOLLO_RUN_MODE=Docker
          extra_hosts:
            - "apollo-adminservice-dev:172.28.0.3"  
            - "apollo-adminservice-qasa:172.28.0.4"
            - "apollo-configservice-dev:172.28.0.5"  
            - "apollo-configservice-qasa:172.28.0.6"
          networks:
            apollo-net:
              ipv4_address: 172.28.0.4
          restart: always  
      
        apollo-configservice-dev:
          image : registry.cn-beijing.aliyuncs.com/jannal/apollo-configservice:1.9.2
          container_name: apollo-configservice-dev
          volumes:
            - "./apollo-configservice/scripts/startup.sh:/usr/local/apollo-configservice/scripts/startup.sh:rw"
            - "./logs/apollo-configservice-dev/:/opt/logs/100003171/:rw"
          ports:
            - "8060:8060"   
          hostname: apollo-configservice-dev  
          environment: 
            - SPRING_DATASOURCE_URL=jdbc:mysql://172.16.117.33:3307/ApolloConfigDB_DEV?characterEncoding=utf8
            - SPRING_DATASOURCE_USERNAME=root
            - SPRING_DATASOURCE_PASSWORD=root
            - eureka.instance.ip-address=172.28.0.5
            - APOLLO_RUN_MODE=Docker
          extra_hosts:
            - "apollo-adminservice-dev:172.28.0.3"  
            - "apollo-adminservice-qasa:172.28.0.4"
            - "apollo-configservice-dev:172.28.0.5"  
            - "apollo-configservice-qasa:172.28.0.6"
          networks:
            apollo-net:
              ipv4_address: 172.28.0.5
          restart: always  
      
        apollo-configservice-qasa:
          image : registry.cn-beijing.aliyuncs.com/jannal/apollo-configservice:1.9.2
          container_name: apollo-configservice-qasa
          volumes:
            - "./apollo-configservice/scripts/startup.sh:/usr/local/apollo-configservice/scripts/startup.sh:rw"
            - "./logs/apollo-configservice-qasa/:/opt/logs/100003171/:rw"
          ports:
            - "8061:8060"   
          hostname: apollo-configservice-qasa 
          environment: 
            - SPRING_DATASOURCE_URL=jdbc:mysql://172.16.117.33:3307/ApolloConfigDB_QASA?characterEncoding=utf8
            - SPRING_DATASOURCE_USERNAME=root
            - SPRING_DATASOURCE_PASSWORD=root 
            - eureka.instance.ip-address=172.28.0.6
            - APOLLO_RUN_MODE=Docker
          extra_hosts:
            - "apollo-adminservice-dev:172.28.0.3"  
            - "apollo-adminservice-qasa:172.28.0.4"
            - "apollo-configservice-dev:172.28.0.5"  
            - "apollo-configservice-qasa:172.28.0.6"
          networks:
            apollo-net:
              ipv4_address: 172.28.0.6
          restart: always  
      
        apollo-portal:
          image : registry.cn-beijing.aliyuncs.com/jannal/apollo-portal:1.9.2
          container_name: apollo-portal
          volumes:
            - "./apollo-portal/config/apollo-env.properties:/usr/local/apollo-portal/config/apollo-env.properties:rw" 
            - "./apollo-portal/scripts/startup.sh:/usr/local/apollo-portal/scripts/startup.sh:rw"
            - "./logs/apollo-portal:/opt/logs/100003173/:rw"
          depends_on:
            - apollo-adminservice-dev
            - apollo-adminservice-qasa
            - apollo-configservice-dev
            - apollo-configservice-qasa
          ports:
            - "9000:9000"
          command: >
            /bin/bash -c '
            sleep 120;
            echo "sleep over";
            /usr/local/apollo-portal/scripts/startup.sh 
            '
          hostname: apollo-portal 
          environment: 
            - SPRING_DATASOURCE_URL=jdbc:mysql://172.16.117.33:3307/ApolloPortalDB?characterEncoding=utf8
            - SPRING_DATASOURCE_USERNAME=root
            - SPRING_DATASOURCE_PASSWORD=root
            - APOLLO_RUN_MODE=Docker
          extra_hosts:
            - "apollo-adminservice-dev:172.28.0.3"  
            - "apollo-adminservice-qasa:172.28.0.4"
            - "apollo-configservice-dev:172.28.0.5"  
            - "apollo-configservice-qasa:172.28.0.6"
          networks:
            apollo-net:
              ipv4_address: 172.28.0.2
          restart: always
      # docker network create --subnet=172.28.0.0/16 apollo-net
      networks:
        apollo-net:
          external:
            name: apollo-net
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      • 71
      • 72
      • 73
      • 74
      • 75
      • 76
      • 77
      • 78
      • 79
      • 80
      • 81
      • 82
      • 83
      • 84
      • 85
      • 86
      • 87
      • 88
      • 89
      • 90
      • 91
      • 92
      • 93
      • 94
      • 95
      • 96
      • 97
      • 98
      • 99
      • 100
      • 101
      • 102
      • 103
      • 104
      • 105
      • 106
      • 107
      • 108
      • 109
      • 110
      • 111
      • 112
      • 113
      • 114
      • 115
      • 116
      • 117
      • 118
      • 119
      • 120
      • 121
      • 122
      • 123
      • 124
      • 125
      • 126
      • 127
      • 128
      • 129
      • 130
      • 131
      • 132
      • 133
      • 134
      • 135
      • 136
      • 137
      • 138
      • 139
      • 140
      • 141
      • 142
      • 143
      • 144
      • 145
      • 146
      • 147
      • 148
      • 149
      • 150
      • 151
      • 152
      • 153
      • 154
      • 155
      • 156
      • 157
      • 158
      • 159
      • 160
    6. 运行

      $ docker network create --subnet=172.28.0.0/16 apollo-net
      $ docker-compose up -d
      
      • 1
      • 2
    7. 访问http://172.28.0.2:9000/system_info.html查看环境是否正常

    在这里插入图片描述

    1. 访问http://172.28.0.5:8060和http://172.28.0.6:8060/查看Eureka注册情况
      在这里插入图片描述
      在这里插入图片描述
  • 相关阅读:
    被迫开始学习Typescript —— vue3的 props 与 interface
    windows系统下mysql的主从复制
    业务架构、应用架构、技术架构、数据架构
    【kaggle】AI Report 2023概览
    Python+selenium+unittest+HTMLTestReportCN单元测试框架分享
    工作薄代码之将活动工作表复制到新工作簿等
    React 如何导出excel
    Linux操作系统 - 进程控制
    hive零基础入门
    【微服务】- SpringCloud整合OpenFeign及OpenFeign简单使用
  • 原文地址:https://blog.csdn.net/usagoole/article/details/126163585