docker构建jdk+tomcat镜像
使用说明
一、 要解决的问题
团队有很多演示项目以war包方式部署在服务器上,主要通过打包工具
http://172.16.9.2:8088/作为运行环境部署程序,但是随着程序的增多,过多的程序导致很难管理,端口冲突、占用资源大、服务器卡顿等问题频现,所以我构建了以docker运行的方案
主要思路是把打包工具的环境做成镜像,直接启动容器挂载程序运行即可
二、 使用步骤
- 需要windows或linux环境,windows上安装docker desktop,linux上安装docker,下面主要以linux环境演示
- 创建一个目录,用于存放相关环境,如
/home/eplugger/rdsyseduv91-8095 - 进入该目录,创建挂载点目录
cd /home/eplugger/rdsyseduv91-8095; mkdir -p ./webapps ./logs ./volumewebapps目录用于存放war包,或者解压后ROOT包logs目录映射tomcat日志,可以不进入容器内容查看日志volume目录用于存放自定义日志和附件等文件
- 在该目录下创建一个
docker-compose.yml文件,内容如下
version: '3'
services:
rdsyseduv91-server: # 服务名,自定义
image: registry.cn-hangzhou.aliyuncs.com/sunaf/ep-jdk8-tomcat85:v1 # 镜像名 jdk1.8+tomcat8.5.100
# image: registry.cn-hangzhou.aliyuncs.com/sunaf/ep-jdk11-tomcat9:v1 # 镜像名 jdk11+tomcat9.0.111
# image: registry.cn-hangzhou.aliyuncs.com/sunaf/ep-jdk17-tomcat10:v1 # 镜像名 jdk17+tomcat10.1.24
container_name: rdsyseduv91-server # 容器名,自定义
ports:
- "8095:80" # 端口映射,容器内为80端口,映射到宿主机的8095端口
volumes: # 挂载目录,宿主机目录:容器内目录
- ./webapps:/usr/local/standard/apache-tomcat-8.5.100/webapps
- ./logs:/usr/local/standard/apache-tomcat-8.5.100/logs
# - ./webapps:/usr/local/standard/apache-tomcat-9.0.111/webapps
# - ./logs:/usr/local/standard/apache-tomcat-9.0.111/logs
# - ./webapps:/usr/local/standard/apache-tomcat-10.1.24/webapps
# - ./logs:/usr/local/standard/apache-tomcat-10.1.24/logs
- ./volume:/usr/local/standard/volume
restart: always
privileged: true
- 启动容器
docker-compose up -d - 查看日志
docker-compose logs -f - 访问
http://IP:8095/
三、 其他
- 这些镜像解决了linux下预览功能乱码问题
- 时区处理
- 通过搭配jenkins可以实现开发环境自动构建和部署
镜像构建
一、 环境准备
- 字体文件,可直接复制有字体的linux,如
/usr/share/fonts/ - 下载源,默认基础镜像
FROM centos:7不能执行yum,执行wget -O CentOS-Base.repo http://mirror.centos.org/centos/7/os/x86_64/下载CentOS-Base.repo - 准备打包工具 standard,包含jdk+tommcat运行环境
- 创建Dockerfile
二、 Dockerfile
FROM centos:7
MAINTAINER suanfei<sunafei@e-plugger.com>
# 加入镜像源
COPY CentOS-Base.repo /etc/yum.repos.d/
# 处理字体
RUN yum install -y fontconfig urw-fonts libX11 libXext libXrender && \
yum clean all && \
rm -rf /var/cache/yum/*
## 创建字体目录并复制本地字体
RUN mkdir -p /usr/share/fonts/chinese
COPY fonts/ /usr/share/fonts/chinese/
## 设置权限 + 刷新缓存
RUN chmod -R 755 /usr/share/fonts/chinese && \
fc-cache -fv
# 处理时区
RUN yum install -y tzdata \
&& yum clean all \
# 2. 软链接时区文件
&& ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
&& echo "Asia/Shanghai" > /etc/sysconfig/clock
## ========== Java时区保障 ==========
ENV TZ=Asia/Shanghai
# 把jdk与tomcat添加到容器中
ADD standard /usr/local/standard
ENV MYPATH /usr/local/standard
WORKDIR $MYPATH
# 设置Tomcat目录权限(避免启动权限不足)
RUN chmod +x $MYPATH/*.sh
RUN chmod +x $MYPATH/apache-tomcat-10.1.24/bin/*.sh
# 定义可挂载卷(指定Tomcat程序目录,支持-v挂载)
VOLUME ["$MYPATH/apache-tomcat-10.1.24/webapps", "$MYPATH/apache-tomcat-10.1.24/logs", "$MYPATH/volume"]
# 暴露Tomcat默认端口
EXPOSE 80
# 启动Tomcat(必须前台运行,否则容器会立即退出)
# 极简版(仅前台运行,日志默认写入catalina.out,可通过docker logs -f 查看):
CMD ["/usr/local/standard/startup.sh"]
- 调整启动器
/usr/local/standard/startup.sh
#!/bin/bash
PRG="$0"
while [ -h "$PRG" ]; do
ls=$(ls -ld "$PRG")
link=$(expr "$ls" : '.*-> \(.*\)$')
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=$(dirname "$PRG")/"$link"
fi
done
# 程序目录
PRGDIR=$(dirname "$PRG")
STARTUP_DIR=`cd "$PRGDIR" >/dev/null; pwd`
export JAVA_HOME=$STARTUP_DIR/jdk-17.0.11+9
# exec "$STARTUP_DIR/apache-tomcat-10.1.24/bin/startup.sh"
exec "$STARTUP_DIR/apache-tomcat-10.1.24/bin/catalina.sh" run
三、 构建镜像
- 在阿里云容器管理平台创建镜像仓库,如命名空间
sunaf,镜像仓库名称ep-jdk17-tomcat10 - 在Dockerfile所在目录执行
docker build -t registry.cn-hangzhou.aliyuncs.com/sunaf/ep-jdk17-tomcat10:v1 . - 重命名标签
docker tag 8eb2fbef0118 registry.cn-hangzhou.aliyuncs.com/sunaf/ep-jdk11-tomcat9:v1 - 推送镜像
docker push registry.cn-hangzhou.aliyuncs.com/sunaf/ep-jdk17-tomcat10:v1