docker构建jdk+tomcat镜像
Docker 5

使用说明

一、 要解决的问题

团队有很多演示项目以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 ./volume
    • webapps目录用于存放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
docker构建jdk+tomcat镜像
http://blog.sunafei.top/archives/1766136978688
作者
sunafei
发布于
更新于
许可