本文共 2213 字,大约阅读时间需要 7 分钟。
tomcat作为web容器被广泛应用,但作者所在的公司restful接口特别多,每个接口都需要一个tomcat来启动,为了配置隔离,一般都会把tomcat安装文件复制多遍,分别把war包部署在对应的webapp目录下,但这样造成的问题就是tomcat安装文件占用了大量的磁盘空间,且不便于统一管理。比如要修改tomcat的某个配置,那么对应的所有的tomcat目录都要修改一遍。
基于上述情况,作者设计了一种基于docker的tomcat服务化方案。
docker不再介绍,tomcat不再介绍,下面仅仅介绍服务化方案。先上架构图
通过上图可以发现,该方案有几个特点
1、Nginx做转发。接口对外IP、端口统一
2、tomcat配置统一。因为都是基于相同的image,当然也可以每个container不一样。
当然有几点需要注意:
1、tomcat的logs/webapp需要通过volume映射挂在到container中去
2、每个tomcat服务的数据库链接配置成域名形式。这样测试、生产不需要该jdbc链接
3、保持tomcat的logs和webapp对当前用户可读写
4、对dockerHub上面的tomcat的Dockerfile进行扩展
扩展的dockerfile如下:
1 FROM tomcat:8.5.29 2 3 MAINTAINER wushaojie 4 5 COPY ./userconfig/* $CATALINA_HOME/conf/ 6 7 ENV USER=tomcat USER_ID=1000 USER_GID=1000 8 9 RUN groupadd --gid "${USER_GID}" "${USER}" && \10 useradd \11 --uid ${USER_ID} \12 --gid ${USER_GID} \13 --create-home \14 --shell /bin/bash \15 ${USER}16 17 # RUN chown -R $USER:$USER ${CATALINA_HOME}18 19 RUN set -ex; \20 rm -rf $CATALINA_HOME/webapps/* \21 rm -f $CATALINA_HOME/conf/tomcat-users.* \22 if [ -f $CATALINA_HOME/conf/hosts ] then \23 cat $CATALINA_HOME/conf/hosts >> /etc/hosts \24 fi; \25 mv $CATALINA_HOME/conf/*.sh $CATALINA_HOME/bin26 27 RUN chmod u+x $CATALINA_HOME/bin/user-mapping.sh28 29 #ENTRYPOINT ["user-mapping.sh"]30 CMD ["user-mapping.sh"]
其中user-mapping.sh代码如下 :
#!/bin/bashif [ -z "${USER}" ]; then echo "We need USER to be set!"; exit 100fi# if both not set we do not need to do anythingif [ -z "${HOST_USER_ID}" -a -z "${HOST_USER_GID}" ]; then echo "Nothing to do here." ; exit 0fi# reset user_?id to either new id or if empty old (still one of above# might not be set)USER_ID=${HOST_USER_ID:=$USER_ID}USER_GID=${HOST_USER_GID:=$USER_GID}LINE=$(grep -F "${USER}" /etc/passwd)# replace all ':' with a space and create arrayarray=( ${LINE//:/ } )# home is 5th elementUSER_HOME=${array[4]}sed -i -e "s/^${USER}:\([^:]*\):[0-9]*:[0-9]*/${USER}:\1:${USER_ID}:${USER_GID}/" /etc/passwdsed -i -e "s/^${USER}:\([^:]*\):[0-9]*/${USER}:\1:${USER_GID}/" /etc/groupchown -R ${USER_ID}:${USER_GID} ${USER_HOME}chown -R ${USER_ID}:${USER_GID} $CATALINA_HOME#exec su - "${USER}"exec su "${USER}" -c "$CATALINA_HOME/bin/catalina.sh run"
转载地址:http://yszdx.baihongyu.com/