一、环境描述
1. 宿主机
- CPU:双核
- 内存:4 GB
- 硬盘:120 GB
- IP地址:192.168.190.128
- 操作系统:CentOS 7.4 x86_64 Minimal
2. Docker
- 版本:1.12.6
- 安装方式:参考《如何通过yum安装Docker和Docker-Compose》
3. 基础镜像
- 操作系统:CentOS 6.9 x86_64
- 制作方式:参考《如何创建CentOS系统的Docker基础镜像》
二、构建镜像
1. 安装Git和Wget
在shell中运行以下命令:
yum install -y git wget
2. 克隆Disconf的打包文件
从GitHub克隆编译得到的Disconf打包文件,可参考《编译和打包Disconf详解》。在shell中运行以下命令:
cd /root/Downloads
git clone https://github.com/ghoulich/docker.git
cd docker/disconf
3. 创建Dockerfile文件
在shell中运行以下命令:
cat > Dockerfile << "EOF"
# 使用自建的CentOS 6.9基础镜像
FROM registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/centos:6.9
# 镜像维护者
MAINTAINER ghoulich@aliyun.com
# 安装依赖包
RUN rpm --rebuilddb && yum install -y epel-release
RUN rpm --rebuilddb && yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel gcc autoconf wget supervisor tar
# 下载安装Tomcat
RUN wget http://mirrors.advancedhosters.com/apache/tomcat/tomcat-9/v9.0.6/bin/apache-tomcat-9.0.6.tar.gz
RUN tar xvzf apache-tomcat-9.0.6.tar.gz
RUN rm -rf apache-tomcat-9.0.6.tar.gz
RUN mv apache-tomcat-9.0.6 /usr/local/tomcat
# 配置环境变量
ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-3.b14.el6_9.x86_64
ENV CATALINA_HOME /usr/local/tomcat
# 编译安装jsvc
RUN cd /usr/local/tomcat/bin && tar xvfz commons-daemon-native.tar.gz
RUN cd /usr/local/tomcat/bin/commons-daemon-1.1.0-native-src/unix/ && ./configure && make
RUN cp /usr/local/tomcat/bin/commons-daemon-1.1.0-native-src/unix/jsvc /usr/local/tomcat/bin/
COPY supervisord.conf /etc/supervisord.conf
## 安装disconf后端
COPY disconf-web.tar.gz* /
RUN cat disconf-web.tar.gz* | tar -xzf - && mv disconf-web.war /usr/local/tomcat/webapps && rm -rf disconf-web.tar.gz*
# 清理系统
RUN yum clean all
# 开放端口
EXPOSE 8080
# 挂载配置和日志目录
VOLUME ["/usr/local/tomcat/conf", "/usr/local/tomcat/logs"]
# 自动启动Tomcat
CMD ["/usr/bin/supervisord"]
EOF
有以下几点需要注意:
- 基于自建的CentOS 6.9基础镜像。
- 开放8080端口,这是Tomcat的默认服务端口。
- 将Tomcat的配置目录和日志目录设置为挂载点。
4. 创建supervisor配置文件
supervisor是一种Linux的进程管理工具,Disconf后端容器会用其管理自身的后台服务。在shell中运行以下命令,创建supervisord.conf
文件:
cat > supervisord.conf << "EOF"
[supervisord]
nodaemon=true
[program:tomcat]
command=/usr/local/tomcat/bin/jsvc -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -outfile /usr/local/tomcat/logs/catalina.out -errfile /usr/local/tomcat/logs/catalina.err -Dcatalina.home=/usr/local/tomcat -Dcatalina.base=/usr/local/tomcat -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties org.apache.catalina.startup.Bootstrap
EOF
5. 制作镜像
在shell中运行以下命令:
docker build -t disconf-backend:latest .
6. 上传镜像
在shell中运行以下命令,登录阿里云的镜像库,然后为新建镜像创建标签,最后推送至镜像库:
# 登录阿里云镜像库
docker login --username=ghoulich@aliyun.com registry.cn-hangzhou.aliyuncs.com
# 创建镜像标签
docker tag disconf-backend:latest registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/centos-6.9-disconf-backend:latest
# 推送镜像
docker push registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/centos-6.9-disconf-backend:latest
三、使用方法
1. 配置Tomcat服务
在shell中运行以下命令,为Tomcat服务新建配置目录和日志目录,并且修改服务器的应用目录:
mkdir -p /usr/local/disconf-backend
cd /root/Downloads
wget http://mirrors.advancedhosters.com/apache/tomcat/tomcat-9/v9.0.6/bin/apache-tomcat-9.0.6.tar.gz
tar xvzf apache-tomcat-9.0.6.tar.gz
cp -r /root/Downloads/apache-tomcat-9.0.6/{conf,logs} /usr/local/disconf-backend/
sed -i '150a\ <Context path="" docBase="/usr/local/tomcat/webapps/disconf-web"></Context>' /usr/local/disconf-backend/conf/server.xml
2. 配置Disconf后端
在shell中运行以下命令,修改Disconf的配置文件:
cd /root/Downloads/docker/disconf/
tar xvzf resources.tar.gz
rm -rf resources.tar.gz
cd resources
2.1 修改jdbc-mysql.properties文件
假设MySQL和Disconf在相同的宿主机中运行:
sed -i '3s\127.0.0.1:3306\192.168.190.128:3306\g' jdbc-mysql.properties
sed -i '5s\123456\123.Org$%^\g' jdbc-mysql.properties
2.2 修改redis-config.properties文件
假设Redis和Disconf在相同的宿主机中运行:
sed -i '4s\redis.group1.client1.host=127.0.0.1\redis.group1.client1.host=192.168.190.128\g' redis-config.properties
sed -i '10s\redis.group1.client2.host=127.0.0.1\redis.group1.client2.host=192.168.190.128\g' redis-config.properties
sed -i '7s\password=foobared\password=\g' redis-config.properties
sed -i '13s\password=foobared\password=\g' redis-config.properties
sed -i '11s\port=6380\port=6379\g' redis-config.properties
2.3 修改zoo.properties文件
假设Zookeeper和Disconf在相同的宿主机中运行:
sed -i '2s\hosts=127.0.0.1:8581,127.0.0.1:8582,127.0.0.1:8583\hosts=192.168.190.128:2181\g' zoo.properties
2.4 修改application.properties文件
使用宿主机的IP地址作为Disconf的域名:
sed -i '6s\domain=disconf.com\domain=192.168.190.128\g' application.properties
3. 启动容器
在shell中运行以下命令,启动Disconf后端容器:
docker run --detach \
--name disconf-backend \
--hostname disconf-backend \
--volume /usr/local/disconf-backend/conf:/usr/local/tomcat/conf \
--volume /usr/local/disconf-backend/logs:/usr/local/tomcat/logs \
--expose 8080 \
registry.cn-hangzhou.aliyuncs.com/ghoulich-centos/centos-6.9-disconf-backend:latest
需要注意以下几点:
- 开放容器的8080端口,但不映射至宿主机;
- 将容器的配置目录和日志目录映射至宿主机的相应目录。
4. 替换配置文件
由于Disconf要根据实际部署情况连接MySQL、Redis和Zookeeper等外围组件,所以应用配置必须可配置。在shell中运行以下命令,替换应用配置文件:
# 替换应用配置
docker cp application.properties disconf-backend:/usr/local/tomcat/webapps/disconf-web/WEB-INF/classes/application.properties
# 替换jdbc配置
docker cp jdbc-mysql.properties disconf-backend:/usr/local/tomcat/webapps/disconf-web/WEB-INF/classes/jdbc-mysql.properties
# 替换redis配置
docker cp redis-config.properties disconf-backend:/usr/local/tomcat/webapps/disconf-web/WEB-INF/classes/redis-config.properties
# 替换zookeeper配置
docker cp zoo.properties disconf-backend:/usr/local/tomcat/webapps/disconf-web/WEB-INF/classes/zoo.properties
5. 重启容器
重新启动Disconf后端容器,使得各项配置生效:
docker restart disconf-backend