jdk8_基于安装包
用Alpine跑了JDK8的镜像结果发现,JDK还是无法执行.后来翻阅文档才发现
Java是基于GUN Standard C library(glibc)
Alpine是基于MUSL libc(mini libc)
所以Alpine需要安装glibc的库,以下是官方给出wiki
https://wiki.alpinelinux.org/wiki/Running_glibc_programs
#下载包,解压
tar -zxvf jdk-8u231-linux-x64.tar.gz
#进入目录
cd jdk1.8.0_231
#删除文本文件
rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txt THIRDPARTYLICENSEREADME.txt Welcome.html
#删除其他无用文件
rm -rf lib/plugin.jar
lib/ext/jfxrt.jar
bin/javaws
lib/javaws.jar
lib/desktop
plugin
lib/deploy*
lib/*javafx*
lib/*jfx*
lib/amd64/libdecora_sse.so
lib/amd64/libprism_*.so
lib/amd64/libfxplugins.so
lib/amd64/libglass.so
lib/amd64/libgstreamer-lite.so
lib/amd64/libjavafx*.so
lib/amd64/libjfx*.so
#重新打包
tar zcvf jdk1.8.0_231.tar.gz jdk1.8.0_231
#下载glibc-2.30-r0.apk
https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-2.30-r0.apk
#下载 sgerrand.rsa.pub
https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
编写 dockerfile文件
vi Dockerfile
FROM alpine:latest
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories
RUN apk update
&& apk add tzdata
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
&& echo "Asia/Shanghai" > /etc/timezone
COPY glibc-2.33-r0.apk /opt/
COPY sgerrand.rsa.pub /etc/apk/keys/
RUN ls -l /opt
RUN apk add /opt/glibc-2.33-r0.apk && rm -rf /opt/glibc-2.33-r0.apk
#ADD 命令会自动解压缩
ADD jdk-8u261-linux-x64.tar.gz /usr/local
# 设置JAVA变量环境
ENV JAVA_HOME=/usr/local/jdk1.8.0_261
ENV CLASSPATH=$JAVA_HOME/bin
ENV PATH=.:$JAVA_HOME/bin:$PATH
CMD ["java","-version"]