一、说明
1、使用的是oracle jdk,不是openjdk,至于为什么不用jre而用jdk,得问我们公司的架构师。
2、java依赖glibc,所以基础镜像使用的是alpine并安装glibc,
二、制作
1、下载oracle jdk并删除不必要的文件,下载过程略。
解压:
tar zxvf jdk-8u181-linux-x64.tar.gz
2、删除无用的文件
rm -rf jdk1.8.0_181/COPYRIGHT LICENSE release THIRDPARTYLICENSEREADME-JAVAFX.txt THIRDPARTYLICENSEREADME.txt README.html && \
rm -rf jdk1.8.0_181/jre/COPYRIGHT LICENSE README THIRDPARTYLICENSEREADME-JAVAFX.txt THIRDPARTYLICENSEREADME.txt Welcome.html
cd jdk1.8.0_181/ && rm -rf *src.zip \
lib/missioncontrol \
lib/visualvm \
lib/*javafx* \
jre/lib/plugin.jar" \
jre/lib/ext/jfxrt.jar" \
jre/bin/javaws \
jre/lib/javaws.jar \
jre/lib/desktop \
jre/plugin \
jre/lib/deploy* \
jre/lib/*javafx* \
jre/lib/*jfx* \
jre/lib/amd64/libdecora_sse.so \
jre/lib/amd64/libprism_*.so \
jre/lib/amd64/libfxplugins.so \
jre/lib/amd64/libglass.so \
jre/lib/amd64/libgstreamer-lite.so \
jre/lib/amd64/libjavafx*.so \
jre/lib/amd64/libjfx*.so \
jre/bin/jjs \
jre/bin/keytool \
jre/bin/orbd \
jre/bin/pack200 \
jre/bin/policytool \
jre/bin/rmid \
jre/bin/rmiregistry \
jre/bin/servertool \
jre/bin/tnameserv \
jre/bin/unpack200 \
jre/lib/ext/nashorn.jar \
jre/lib/jfr.jar \
jre/lib/jfr \
jre/lib/oblique-fonts
4、dockerfile中指定环境变量
ENV LANG=C.UTF-8 \
JAVA_HOME=/usr/local/jdk1.8.0_181 \
PATH=$PATH:/usr/local/jdk1.8.0_181/bin \
TZ=Asia/Shanghai
5、添加时区
echo "" > /etc/apk/repositories \
&& echo "https://mirrors.aliyun.com/alpine/v3.11/main/" >> /etc/apk/repositories \
&& echo "https://mirrors.aliyun.com/alpine/v3.11/community/" >> /etc/apk/repositories \
&& apk update && apk add --no-cache tzdata tini \
&& rm -rf /var/cache/apk/* /tmp/* \
&& ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
6、添加压缩后的jdk,我直接添加了整个目录,没有再进行打包
ADD jdk1.8.0_181 /usr/local/jdk1.8.0_181
7、glibc
8、参考链接
9、乱码问题
上面创建的镜像是有问题的,在java项目运行时,日志等中文会乱码的,解决方案:下载locale-archive文件,
将locale-archive和dockerfile放在同一目录下,添加:
ADD locale-archive /usr/glibc-compat/lib/locale









网友评论