Docker 构建 Maven + Tomcat 基础镜像
Posted mickjoust
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 构建 Maven + Tomcat 基础镜像相关的知识,希望对你有一定的参考价值。
前言
在 Java 编程中,大多数应用都是是基于 Maven 构建的,而交付的结果大多是采用的 Tomcat 的 war 包形式,所以,构建一个基于 Maven 和 Tomcat 的基础镜像很有必要,不仅能帮助我们提升平时自主实验研究分析的效率,还可以在一定程度能减少运维减少编写 Dockerfile 的复杂度,提升整体项目交付效率。
1.创建编译目录
mkdir -p build_docker
cd build_docker
vim Dockerfile
2.编写 Dockerfile
首先,我们选择官方维护的 maven:3.3.3 镜像作为基础镜像,然后,在此基础上添加 Tomcat 支持。
FROM maven:3.3.3
如果喜欢国内仓库的速度,也可以选择阿里的 maven:3-jdk-8。
FROM registry.cn-hangzhou.aliyuncs.com/acs/maven:3-jdk-8
其次,设置 Tomcat 相关的环境变量,并添加到系统 PATH 变量中,使 Tomcat 的启动脚本可以在 Shell 中直接访问。
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
第三,添加 Tomcat GPG-KEY,用于 Tomcat 下载完后校验文件是否正确,以下keyid数据来自官方 Tomcat-8。
RUN gpg --keyserver pool.sks-keyservers.net --recv-keys \\
F22C4FED \\
86867BA6 \\
E86E29AC \\
307A10A5 \\
564C17A3 \\
0x7C037D42 \\
0BECE548 \\
5E763BEC \\
2F6059E7 \\
288584E7 \\
4B6FAEFB \\
286BACF1 \\
731FABEE \\
461B342D \\
0D498E23 \\
DC3D1B18 \\
D63011C7 \\
30480593
第四,设置 Tomcat 版本变量,构建时可以传入相应参数来更改 Tomcat 版本。因为 maven:3.3.3 镜像依赖的 Java 版本是 1.8,,所以我们的 Tomcat 版本也选择 8.X 版本,保持编译一致性可以最大化 Tomcat 的性能。
这里我们选用最新版:8.5.45
随后使用 curl 执行下载,并验证后解压,同时删除多余的 bat 脚本。(该脚本仅用于 Windows 环境,在Linux/Mac镜像中无用)
ENV TOMCAT_VERSION 8.5.45
ENV TOMCAT_TGZ_URL https://www.apache.org/dist/tomcat/tomcat-8/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz
RUN set -x \\
&& curl -fSL "$TOMCAT_TGZ_URL" -o tomcat.tar.gz \\
&& curl -fSL "$TOMCAT_TGZ_URL.asc" -o tomcat.tar.gz.asc \\
&& gpg --verify tomcat.tar.gz.asc \\
&& tar -xvf tomcat.tar.gz --strip-components=1 \\
&& rm bin/*.bat \\
&& rm tomcat.tar.gz*
第五,暴露 Tomcat 默认的 8080 端口,并指定基于该镜像的容器启动时执行的脚本,该脚本为 Tomcat 启动脚本。
EXPOSE 8080
CMD ["catalina.sh", "run"]
3.构建镜像
docker build -t base-maven-tomcat .
到此,完成。
附:完整 Dockerfile 文件
FROM maven:3.3.3
ENV CATALINA_HOME /usr/local/tomcat
ENV PATH $CATALINA_HOME/bin:$PATH
RUN mkdir -p "$CATALINA_HOME"
WORKDIR $CATALINA_HOME
RUN gpg --keyserver pool.sks-keyservers.net --recv-keys \\
F22C4FED \\
86867BA6 \\
E86E29AC \\
307A10A5 \\
564C17A3 \\
0x7C037D42 \\
0BECE548 \\
5E763BEC \\
2F6059E7 \\
288584E7 \\
4B6FAEFB \\
286BACF1 \\
731FABEE \\
461B342D \\
0D498E23 \\
DC3D1B18 \\
D63011C7 \\
30480593
ENV TOMCAT_VERSION 8.5.45
ENV TOMCAT_TGZ_URL https://www.apache.org/dist/tomcat/tomcat-8/v$TOMCAT_VERSION/bin/apache-tomcat-$TOMCAT_VERSION.tar.gz
RUN set -x \\
&& curl -fSL "$TOMCAT_TGZ_URL" -o tomcat.tar.gz \\
&& curl -fSL "$TOMCAT_TGZ_URL.asc" -o tomcat.tar.gz.asc \\
&& gpg --verify tomcat.tar.gz.asc \\
&& tar -xvf tomcat.tar.gz --strip-components=1 \\
&& rm bin/*.bat \\
&& rm tomcat.tar.gz*
EXPOSE 8080
CMD ["catalina.sh", "run"]
以上是关于Docker 构建 Maven + Tomcat 基础镜像的主要内容,如果未能解决你的问题,请参考以下文章