05 Alpine制作 Jdk8镜像的坑
用Alpine跑了JDK8的镜像结果发现,JDK还是无法执行,后来翻阅文档才发现Oracle Java是基于C开发的(GUN Standard C library(glibc)),而Alpine是基于MUSL libc(mini libc),所以Alpine需要安装glibc的库。
以下是官方给出wiki
https://wiki.alpinelinux.org/wiki/Running_glibc_programs
至于如何安装,可以参考:
https://github.com/sgerrand/alpine-pkg-glibc 一个用于 Alpine Linux的glibc兼容
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-2.35-r0.apk
apk add glibc-2.35-r0.apk
如果你想在glibc应用程序中使用特定的语言,你需要生成你的语言环境。 你可以通过安装 glibc-i18n包并使用 localedef 二进制文件生成区域设置来做到这一点。 en_US.UTF-8的一个示例是:
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-bin-2.35-r0.apk
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.35-r0/glibc-i18n-2.35-r0.apk
apk add glibc-bin-2.35-r0.apk glibc-i18n-2.35-r0.apk
/usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8
FROM alpine:latest
ADD jdk1.8.0_101.tar.gz /usr/local
# ******************更换Alpine源为mirrors.ustc.edu.cn******************
RUN echo http://mirrors.ustc.edu.cn/alpine/v3.7/main > /etc/apk/repositories && \
echo http://mirrors.ustc.edu.cn/alpine/v3.7/community >> /etc/apk/repositories
RUN apk update && apk upgrade
# ******************Alpine安装 Glibc https://github.com/sgerrand/alpine-pkg-glibc *****************
# 安装CA证书、下载alpine软件仓库的公钥文件
RUN apk --no-cache add ca-certificates && \
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://raw.githubusercontent.com/sgerrand/alpine-pkg-glibc/master/sgerrand.rsa.pub && \
wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.27-r0/glibc-2.27-r0.apk && \
apk add glibc-2.27-r0.apk
******************设置JAVA变量环境******************
ENV JAVA_HOME=/usr/local/jdk1.8.0_101
ENV CLASSPATH=$JAVA_HOME/bin
ENV PATH=.:$JAVA_HOME/bin:$PATH
CMD ["java","-version"]