dubboOps&Apollo in Docker

314 阅读1分钟

此文意在记录自己利用 docker 站在巨人的肩膀上构建 zookeeper + dubbo-admin + apollo 环境时的一些重要点, 供以后查阅回顾

Architecture

对应的资源仓库 Docker-Zookeeper-DubboOps-Apollo

前提条件

为保证构建效果, 建立使用全新的 Linux 环境做测试, 本文的系统环境是最新的 CentOS 7

Docker

安装 参考文档

使用 sudoroot 权限登录 CentOS

确保 yum 包更新到最新。

$ sudo yum update

执行 Docker 安装脚本。

$ curl -fsSL https://get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh

执行这个脚本会添加 docker.repo 源并安装 Docker

启动 Docker 进程。

sudo systemctl start docker

验证 docker 是否安装成功并在容器中执行一个测试的镜像。

$ sudo docker run hello-world
docker ps

到此,DockerCentOS 系统的安装完成。

Docker Compose

安装 参考文档

执行此命令获取最新版本的 Docker Compose

注意此命令中获取的 docker-compose 版本为1.22.0, 执行之前请获取最新的版本号 Compose repository release page on GitHub

sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

docker-compose 命令 赋可执行权限

sudo chmod +x /usr/local/bin/docker-compose

测试 docker-compose 是否安装成功

$ docker-compose --version
docker-compose version 1.22.0, build 1719ceb

Bin

为方便后续终端操作, 制作了一些bash脚本

root 用户 目录下建立 bin 目录, 存放bash脚本

mkdir -p /root/bin
mv bashmarks.sh  dkclean  dkin  dkps  dkrm  fport  net /root/bin
ls -ll /root/bin
-rwxr-xr-x. 1 root root 5056 Sep 11 03:18 bashmarks.sh 
-rwxr-xr-x. 1 root root   61 Sep 11 03:15 dkclean
-rwxr-xr-x. 1 root root   43 Sep 11 03:15 dkin
-rwxr-xr-x. 1 root root   27 Sep 11 03:15 dkps
-rwxr-xr-x. 1 root root   44 Sep 11 03:15 dkrm
-rwxr-xr-x. 1 root root  141 Sep 11 03:15 fport
-rwxr-xr-x. 1 root root 1269 Sep 11 03:15 net

bashmarks.sh 一个终端书签脚本, 提供快速切换目录的功能, 具体使用请查看其 Github Repo

dkclean 清理 docker 未打标签的一些镜像

dkin $container_name 进入容器内部终端, $container_name 是需要进入的镜像名称

dkps 查看所有的容器

dkrm $container_name 停止容器,并删除此容器

fport $port 查看某个端口是否被占用, 以及列出一些必要信息

net 查看网络的配置情况

修改 .bashrc

vi /root/.bashrc
# 添加一下脚本,并保存
alias vi='vim'
source /root/bin/bashmarks.sh

保存并使其生效

source /root/.bashrc

Portainer

安装

复制此内容, 并命文件名称为 docker-compose.yml

stack 会绑定主机的 19000(Portainer web) 端口, 此自行修改

version: '2'

services:
  portainer:
    image: portainer/portainer
    ports:
      - "19000:9000"
    command: -H unix:///var/run/docker.sock
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data

volumes:
  portainer_data:

在此文件存放的目录下, 执行此命令, 以后台进程的形式启动 Portainer

如果要测试, 可以不加参数 -d, 以前台进程启动 Portainer,

docker-compose up -d

访问 SERVER_IP:19000, 查看 Portainer 管理界面

Zookeeper + Dubbo Admin

利用 Docker 构建 Zookeeper 集群 参考文档

利用 Docker 构建 Dubbo-Admin 参考文档

复制此内容, 并命文件名称为 docker-compose.yml

stack 会绑定主机的 2181(Zookeeper),2182(Zookeeper),2183(Zookeeper),18080(Dubbo admin) 端口, 若需要修改, 请确保了解的端口之间的关系并对后续 Dubbo 服务注册非常了解, 确保修改无误
Dubbo Admin 放在此 stack 中, 原因是方便 Dubbo Admin 访问 Zookeeper 集群, 若生产部署, 建议分离部署

version: '2'
services:
  zoo1:
    image: zookeeper
    restart: always
    hostname: zoo1
    container_name: zookeeper_1
    #domainname: 
    ports:
      - 2181:2181
    volumes:
      - /usr/local/docker_app/zookeeper/zoo1/data:/data
      - /usr/local/docker_app/zookeeper/zoo1/datalog:/datalog
    environment:
      ZOO_MY_ID: 1
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
    networks:
      - zookeeper_net

  zoo2:
    image: zookeeper
    restart: always
    hostname: zoo2
    container_name: zookeeper_2
    ports:
      - 2182:2181
    volumes:
      - /usr/local/docker_app/zookeeper/zoo2/data:/data
      - /usr/local/docker_app/zookeeper/zoo2/datalog:/datalog
    environment:
      ZOO_MY_ID: 2
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
    networks:
      - zookeeper_net

  zoo3:
    image: zookeeper
    restart: always
    hostname: zoo3
    container_name: zookeeper_3
    ports:
      - 2183:2181
    volumes:
      - /usr/local/docker_app/zookeeper/zoo3/data:/data
      - /usr/local/docker_app/zookeeper/zoo3/datalog:/datalog
    environment:
      ZOO_MY_ID: 3
      ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
    networks:
      - zookeeper_net
  admin:
    image: chenchuxin/dubbo-admin
    ports:
      - 18080:8080
    links:
      - zookeeper_1
      - zookeeper_2
      - zookeeper_3
    networks:
      - zookeeper_net
    environment:
      - dubbo.registry.address=zookeeper://zookeeper_1:2181|zookeeper://zookeeper_2:2181|zookeeper://zookeeper_3:2181
    depends_on:
      - zoo1
      - zoo2
      - zoo3
networks:
   zookeeper_net:
    driver: bridge

在此文件存放的目录下, 执行此命令, 以后台进程的形式启动 Zookeeper 集群 和 Dubbo Admin

如果要测试, 可以不加参数 -d, 以前台进程启动,

docker-compose up -d

访问 SERVER_IP:18080, 查看 Dubbo Admin 管理界面

  • 管理员: root 密码: root
  • 游客: guest 密码 guest

Apollo

利用 Docker 构建 Apollo 配置中心 参考文档

准备数据库文件 参考文档

本文利用官方提供的数据库初始化文件, 进行改造, 达到几个目的

  • 官方的文件会删除原有的数据库数据, 修改所有建表语句, 确保只新增, 不删除
  • 官方提供的两个文件, 是两个数据库 PortalConfig, 本文提供的容器文档配置需两个 Config 数据库, 因此在原有的基础上, 复制一份, 并修改原有数据库名称, 最终会生成三个数据库文件 Portal(Apollo Portal管理数据库) Dev Config(Dev环境数据库) Fat Config(Fat环境数据库)

    • apolloportaldb.sql

    • apolloconfigdbdev.sql

    • apolloconfigdbfat.sql

将上述文件制作的几个文件放在一个名为 sql 的文件夹,之后复制此内容, 并命文件名称为 docker-compose.yml, 放在与 sql 文件夹同级的目录

此 stack 会绑定主机 28070 (Apollo Portal), 28080 (FAT Config),28081 (FAT Config), 28090 (Dev Admin), 28091 (FAT Admin), 23306(MYSQL) 以及会在当前文件夹的创建 log 目录(容器运行时的日志), data 目录(数据库运行时的数据)

此文件会开启两个运行环境: DEV,FAT, 大家可根据自己的需要, 对应配置相应的参数

version: '2'
services:
  apollo:
    image: idoop/docker-apollo:latest
    container_name: apollo
    restart: always
    volumes:
      - ./logs:/opt
# 启动前,确认对应环境的数据库已经建立,否则apollo无法启动.
# 默认端口:portal:8070; dev:8080,8090; fat:8081,8091; uat:8082,8092; pro:8083,8093
    environment:
      PORTAL_DB: jdbc:mysql://apollo-db:3306/ApolloPortalDB?characterEncoding=utf8
      PORTAL_DB_USER: root
      PORTAL_DB_PWD: password
      PORTAL_PORT: 28070

      DEV_DB: jdbc:mysql://apollo-db:3306/ApolloConfigDBDev?characterEncoding=utf8
      DEV_DB_USER: root
      DEV_DB_PWD: password
      # DEV_IP: 10.1.11.217
      DEV_ADMIN_PORT: 28090
      DEV_CONFIG_PORT: 28080

      FAT_DB: jdbc:mysql://apollo-db:3306/ApolloConfigDBFat?characterEncoding=utf8
      FAT_DB_USER: root
      FAT_DB_PWD: password
      # FAT_IP: 10.1.11.217
      FAT_ADMIN_PORT: 28091
      FAT_CONFIG_PORT: 28081

      #UAT_DB: jdbc:mysql://apollo-db:3306/ApolloConfigDBUat?characterEncoding=utf8
      UAT_DB_USER: root
      UAT_DB_PWD: password
      UAT_IP: localhost

      #PRO_DB: jdbc:mysql://apollo-db:3306/ApolloConfigDBPro?characterEncoding=utf8
      PRO_DB_USER: root
      PRO_DB_PWD: password
      PRO_IP: localhost
    depends_on:
      - apollo-db
    links:
      - apollo-db
    ports:
      - "28070:28070"
      - "28090:28090"
      - "28080:28080"
      - "28081:28081"
      - "28091:28091"

  apollo-db:
    image: mysql:5.7
    container_name: apollo-db
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: password
    depends_on:
      - apollo-dbdata
    ports:
      - "23306:3306"
    volumes:
      - ./sql:/docker-entrypoint-initdb.d
    volumes_from:
      - apollo-dbdata

  apollo-dbdata:
    image: alpine:latest
    container_name: apollo-dbdata
    volumes:
      - ./data:/var/lib/mysq

在此文件存放的目录下, 执行此命令, 以后台进程的形式启动 Apollo

如果要测试, 可以不加参数 -d, 以前台进程启动,

docker-compose up -d

待启动后, 利用 Navicat 访问 Apollo 数据库, 修改相关配置

修改后, 重启 Apollo

docker-compose down && docker-compose up -d

待启动以后, 访问 SERVER_IP:28070, 查看 Apollo Portal 管理界面

  • 管理员: apollo 密码: admin

至此服务器端, 必备的环境已经搭建完毕.

Pinpoint (可选)

介绍一个 Dubbo 平台推荐的一个APM工具 Pinpoint, 用于后续线上环境性能分析 介绍文档

利用 Docker 构建 Pinpoint, 官方文档提供了很详细的说明介绍, 在此就不在赘述, 只说明几个关键的几个地方

  • 因 stack 会绑定多个主机端口, 例如启用的 zookeeper 会占用 2181 端口, 在不完全了解的情况下, 不建议修改其默认配置, 请在一个全新的服务器环境下进行安装
  • 默认提供的配置, 会启动 pinpoint-quickstartpinpoint-agent, 这两个只是官方提供的例子, 实际使用过程中, 请注释掉这两个容器, 可直接使用我修改后的 docker-compose.yml
  • 容器启动以后, 需要手动上传 Flink Job, 可按照官方文档进行操作
  • 容器主要对外提供的端口有
    • Flink: 8081
    • 采集: 9994,9995,9996
    • WEB UI: 8079

pinpoint-agent 本身只需要配置 pinpoint-colletorIP 即可, 参考官方文档

pinpoint.config 是默认的 pinpoint-agent 配置文件, pinpoint-colletorIP127.0.0.1, 请按照上述配置的 pinpoint 主机 IP, 修改以下文件

profiler.collector.ip=$your-pinpoint-pinpoint-host-ip

tomcat-startup-with-pinpoint.sh 是利用 Tomcatstartup.sh 制作的启动脚本(不属于 pinpoint-agent)

AGENT_PATH 是需要配置代理的服务器上 pinpoint-agent 的根目录

AGENT_ID 是针对当前需要配置的 Tomcat 定义的 pinpoint 全局唯一 ID(不建议重复)

APPLICATION_NAME 是针对当前需要配置的 Tomcat 定义的 pinpoint 全局唯一名称(不建议重复)

AGENT_PATH="/home/root/pinpoint-agent"
VERSION="1.7.3"
AGENT_ID="oss_pd"
APPLICATION_NAME="oss_pd"
JAVA_OPTS="$JAVA_OPTS  -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar"
JAVA_OPTS="$JAVA_OPTS -Dpinpoint.agentId=$AGENT_ID"
JAVA_OPTS="$JAVA_OPTS -Dpinpoint.applicationName=$APPLICATION_NAME"
export JAVA_OPTS