下载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 <xxx@163.com>
# 更新源和时区并安装依赖包
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 <varname>=<value>
如果需要在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 来传递参数。