一、Tomcat容器化部署项目存在的问题
1.Tomcat容器启动时挂载本地目录,不能自动拷贝容器内文件到宿主机目录。
2.Tomcat基础镜像中的配置文件,在实际部署时需要自定义修改,并且希望修改后可以长久保留,docker镜像升级后可以继续使用原有配置。
3.Tomcat容器挂载目录希望只映射配置文件,程序文件不挂载到宿主机。
二、镜像修改过程(以平台项目为例)
1.修改dockerfile文件,增加挂载卷并拷贝自定义shell脚本
vi dockerfile
文件内容:
#使用docker aqsc:tomcat8-jre8-alpine镜像
FROM tomcat:8-jre8-alpine
#作者信息
MAINTAINER cuishanwei <kavin>
LABEL Description="This image is used to serve aqsc-tpridmp project" Version="0.1"
SHELL ["/bin/sh", "-c"],
#添加环境变量
ENV JAVA_OPTS "$JAVA_OPTS -server -Xms1024M -Xmx4096M -Xss1024K -Xmn1024M -XX:PermSize=512M -XX:MaxPermSize=2048M -XX:+UseBiasedLocking -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128M -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=65"
#将WEB程序加入镜像中
#dockerfile增加命令
RUN \
#新建web根目录
mkdir -p /data \
&& mkdir -p /data/configs \
&& mkdir -p /data/configs/tpridmp-service
#将程序加入新建的目录
ADD configs /data/configs/tpridmp-service/configs
ADD file /data/configs/tpridmp-service/file
ADD TPRI-DMP /usr/local/tomcat/webapps/TPRI-DMP
ADD server.xml /usr/local/tomcat/conf/
ADD catalina.sh /usr/local/tomcat/bin/
#Define data volumes
VOLUME ["/webapp/conf"]
#copy files
COPY assets/ /assets/
RUN chmod 777 /assets/*
RUN chmod 777 /usr/local/tomcat/bin/catalina.sh
#工作区域
WORKDIR /usr/local/tomcat/webapps
#暴露端口
EXPOSE 8080
#启动时运行tomcat
CMD ["catalina.sh", "run"]
2.在dockerfile同目录创建assets目录,目录下新建wrapper.sh文件
mkdir -p assets
cd assets
vi wrapper.sh
文件内容:
#!/bin/bash
# Generate copy host mount files for the first time
if [[ ! -e /webapp/conf/web.xml ]]; then
echo "Copy config file (web.xml)..."
# cp -r /assets/conf/* /webapp/conf/
cp -f /usr/local/tomcat/webapps/TPRI-DMP/WEB-INF/web.xml /webapp/conf/web.xml
chmod 0600 /webapp/conf/web.xml
fi
if [[ ! -e /webapp/conf/datasource.xml ]]; then
echo "Copy config file (datasource.xml)..."
cp -f /data/configs/tpridmp-service/configs/datasource.xml /webapp/conf/datasource.xml
chmod 0600 /webapp/conf/datasource.xml
fi
if [[ ! -e /webapp/conf/system-config.properties ]]; then
echo "Copy config file (system-config.properties)..."
cp -f /usr/local/tomcat/webapps/TPRI-DMP/WEB-INF/classes/system-config.properties /webapp/conf/system-config.properties
chmod 0600 /webapp/conf/system-config.properties
fi
if [[ ! -e /webapp/conf/jbpm.hibernate.cfg.xml ]]; then
echo "Copy config file (jbpm.hibernate.cfg.xml)..."
cp -f /usr/local/tomcat/webapps/TPRI-DMP/WEB-INF/classes/jbpm.hibernate.cfg.xml /webapp/conf/jbpm.hibernate.cfg.xml
chmod 0600 /webapp/conf/jbpm.hibernate.cfg.xml
fi
if [[ ! -e /webapp/conf/log4j.properties ]]; then
echo "Copy config file (log4j.properties)..."
cp -f /usr/local/tomcat/webapps/TPRI-DMP/WEB-INF/classes/log4j.properties /webapp/conf/log4j.properties
chmod 0600 /webapp/conf/log4j.properties
fi
# Copy project config files
cp -f /webapp/conf/datasource.xml /data/configs/tpridmp-service/configs/datasource.xml
cp -f /webapp/conf/web.xml /usr/local/tomcat/webapps/TPRI-DMP/WEB-INF/web.xml
cp -f /webapp/conf/system-config.properties /usr/local/tomcat/webapps/TPRI-DMP/WEB-INF/classes/system-config.properties
cp -f /webapp/conf/log4j.properties /usr/local/tomcat/webapps/TPRI-DMP/WEB-INF/classes/log4j.properties
cp -f /webapp/conf/jbpm.hibernate.cfg.xml /usr/local/tomcat/webapps/TPRI-DMP/WEB-INF/classes/jbpm.hibernate.cfg.xml
3.修改catalina.sh 文件,插入对自定义脚本的引用
vi catalina.sh
文件内容:
#Add customize shell
source wrapper.sh
4.修改server.xml文件,增加端口、进程自定义配置
vi server.xml
文件内容:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
URIEncoding="UTF-8" enableLookups="false" disableUploadTimeout="true"
minSpareThreads="15" maxSpareThreads="50" maxThreads="200" acceptCount="200"
minProcessors="5" maxProcessors="100" useURIValidationHack="false"
compression="on" compressionMinSize="2048" useBodyEncodingForURI="true"
compressableMimeType="text/html,text/xml,text/JavaScript,text/css,text/plain" />
三、构建镜像,运行容器测试
1.构建镜像
docker build -t tpri-dmp:1.0 . -f dockerfile
2.运行容器,挂载配置到宿主目录
docker run -d --name tpri-dmp -v /data/tpri-dmp/conf:/webapp/conf -p 8080:8080 tpri-dmp:1.0
3.进入/data/tpri-dmp/conf目录查看配置文件是否挂载出来,修改配置文件,重启容器看配置是否生效。
网友评论