基于docker的tomcat服务化

简介: tomcat作为web容器被广泛应用,但作者所在的公司restful接口特别多,每个接口都需要一个tomcat来启动,为了配置隔离,一般都会把tomcat安装文件复制多遍,分别把war包部署在对应的webapp目录下,但这样造成的问题就是tomcat安装文件占用了大量的磁盘空间,且不便于统一管理。

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/bin
26 
27 RUN chmod u+x $CATALINA_HOME/bin/user-mapping.sh
28 
29 #ENTRYPOINT ["user-mapping.sh"]
30 CMD ["user-mapping.sh"]

其中user-mapping.sh代码如下 :

#!/bin/bash

if [ -z "${USER}" ]; then
  echo "We need USER to be set!"; exit 100
fi

# if both not set we do not need to do anything
if [ -z "${HOST_USER_ID}" -a -z "${HOST_USER_GID}" ]; then
    echo "Nothing to do here." ; exit 0
fi

# 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 array
array=( ${LINE//:/ } )

# home is 5th element
USER_HOME=${array[4]}

sed -i -e "s/^${USER}:\([^:]*\):[0-9]*:[0-9]*/${USER}:\1:${USER_ID}:${USER_GID}/"  /etc/passwd
sed -i -e "s/^${USER}:\([^:]*\):[0-9]*/${USER}:\1:${USER_GID}/"  /etc/group

chown -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"

 

目录
相关文章
|
5月前
|
应用服务中间件 Docker 容器
Docker 安装 Tomcat
一、查看 tomcat 版本 访问 tomcat 镜像库地址:https://hub.docker.com/_/tomcat,可以通过 Tags 查看其他版本的 tomcat; 二、拉取 Tomcat Docker 镜像 打开终端或命令提示符,运行以下命令从 Docker Hub 拉取 Tomcat Docker 镜像: docker pull tomcat 三、创建 Tomcat 容器 一旦 Tomcat 镜像下载完成,可以基于该镜像创建一个容器。运行以下命令创建 Tomcat 容器: docker run -d -p 8080:8080 --name tomcat-container t
110 0
|
8月前
|
应用服务中间件 Linux 网络安全
docker安装使用以及tomcat部署超级详解
docker安装使用以及tomcat部署超级详解
246 0
|
4月前
|
负载均衡 应用服务中间件 nginx
Docker配置1台Nginx+3台Tomcat做负载均衡
Docker配置1台Nginx+3台Tomcat做负载均衡
211 0
|
4月前
|
Java 应用服务中间件 Apache
|
4月前
|
Java 应用服务中间件 Apache
|
5月前
|
应用服务中间件 Docker 容器
Docker基于一个tomcat镜像部署多个tomcat容器并运行
Docker基于一个tomcat镜像部署多个tomcat容器并运行
|
8月前
|
Java 应用服务中间件 网络安全
docker--部署JAVA环境和tomcat
docker--部署JAVA环境和tomcat
|
9月前
|
Java 应用服务中间件 Docker
【docker】DockerFile制作tomcat镜像并发布镜像到DockerHub
【docker】DockerFile制作tomcat镜像并发布镜像到DockerHub
|
9月前
|
Java 应用服务中间件 Docker
Docker从入门到精通——实战Dockerfile构建Tomcat镜像
Docker从入门到精通——实战Dockerfile构建Tomcat镜像
120 0
|
9月前
|
应用服务中间件 Linux Docker
Docker安装Tomcat 外网访问Tomact 阿里云镜像仓库
Docker安装Tomcat 外网访问Tomact 阿里云镜像仓库
304 0