dubbo-monitor部署之Docker

前面我们已配置了zk集群+dubbo-admin,在dubbo环境下,我们还需要一样工具,那就是dubbo-monitor监控。
脚本参考https://github.com/ameizi/docker-hub/tree/master/dubbo-monitor-simple/2.5.4

下载dubbo-monitor
首先,网上下载dubbo-monitor-simple-2.5.3-assembly.tar.gz,解压可以看到有3个目录,bin,conf和lib,各目录作用如下

  • bin:程序执行脚本
  • conf:配置文件,如zookeeper
  • lib:程序依赖包
    接着,将该文件复制到centos安装目录中,如/home/docker。

Dockerfile
编写Dockerfile去创建镜像,方便以后部署,内容如下:

FROM openjdk:8-jre-alpine

MAINTAINER yxx 
# 更新源和时区并安装依赖包
RUN echo "http://mirrors.aliyun.com/alpine/v3.6/main" > /etc/apk/repositories \
    && echo "http://mirrors.aliyun.com/alpine/v3.6/community" >> /etc/apk/repositories \
    && apk update && apk upgrade && apk add bash tzdata --no-cache \
    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo "Asia/Shanghai" > /etc/timezone
#复制文件tar.gz并解压
ADD dubbo-monitor-simple-2.5.3-assembly.tar.gz /
ADD entrypoint.sh /
#创建用户下目录monitor, charts, statistics
RUN mkdir `whoami`/monitor \
    && mkdir `whoami`/monitor/charts \
    && mkdir `whoami`/monitor/statistics \
    && chmod +x /entrypoint.sh
#开放8080
EXPOSE 8080
#执行脚本
ENTRYPOINT ["/entrypoint.sh"]

entrypoint.sh
脚本文件中主要是替换配置文件内容multicast://224.5.6.7:1234$ZOOKEEPER,在创建镜像实例时,通过环境变量传入即可。

#!/bin/sh
# 替换默认配置为环境变量
sed -Ei "s|multicast://224.5.6.7:1234|$ZOOKEEPER|" /dubbo-monitor-simple-2.5.3/conf/dubbo.properties

/dubbo-monitor-simple-2.5.3/bin/start.sh

bash

创建镜像

docker build --rm -t dubbo-monitor-simple:2.5.3 .

注意,后面的点。
创建完成后,可以通过docker images查看。

创建实例

docker run \
  -d \
  -it \
  --rm \
  --name dubbo-monitor-simple \
  -e ZOOKEEPER=zookeeper://xx.xx.xx.xx:2181 \
  -p 9090:8080 \
  dubbo-monitor-simple:2.5.3

注意,zookeeper地址为前面配置的zk集群机器地址。
相关参数如下:

  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • -p: 端口映射,格式为:主机(宿主)端口:容器端口
  • -e username="ritchie": 设置环境变量;
    启动容器后,可以打开监控http://172.19.165.222:9090/

设置环境变量
对于docker的images,是由一层层的layer组成的,然后通过联合挂载的方式挂载成一个文件系统。

如以下的dockerfile:

FROM ubuntu
ENV http_proxy 196.168.xx.xx:8080
ENTRYPOINT ["/usr/bin/bash"]

首先选择了基础镜像ubuntu,这个镜像有很多层。可以从/val/lib/docker下面找到该镜像的信息和每一层的信息。

然后ENV是设置了一个环境变量,这句命令同样会产生一个layer,再然后就是需要执行的命令,同样会产生一个layer。如果你更改了某一层的信息,那么从这层之后所有的层都需要重新build。

ARG和ENV
ARG主要是在build时定义一个变量,在使用docker build的时候可以通过参数来设定。

docker build --build-arg =

如果需要在build期间使用某些变量,那ARG是最好的选择。
如果想在运行期间使用,那ENV是唯一的选择。

ENV主要是定义环境变量,在docker run的时候ENV的配置会加载到容器内部,但ARG的参数在内部是没法看到的。同时也可以通过下面命令更改ENV的默认值:

docker run -e var=8888

若要在build时改变环境变量,而不是在run的时候
这个时候就就可以两者结合使用。

ARG var
ENV var=${var}

在dockerfile内部可以这样控制命令的参数。

ARG protocal
ARG address
ARG port

ENV protocal=${protocal} \
    address=${address} \
    port=${port}

CMD /usr/bin/test --listen=${PROTOCAL:-ipv4}:${ADDRESS:-0.0.0.0}:${port:-49188}
//如果读取环境变量失败再采用后面的默认值。

这样既可以在build的时候通过docker build --build-arg var=xxx 来传递参数,也可以通过在运行的时候通过docker run -e var=xxx 来传递参数。

你可能感兴趣的:(dubbo-monitor部署之Docker)