昨天在Dockerhub上搜了一下,目前提供出来的Alpine版本的Oracle的JDK镜像大多不好用,加上Oracle本身的下载方式发生变化,结合Alpine镜像本身的MUSL的libc并不能得到Oracle的支持,暂时在Easypack中添加对Oracle的Alpine镜像的支持。
特性
包含如下特性:
- 支持Alpine版本基础镜像:目前3.9。 容易升级
- 支持Alpine下的GNU Libc
- 支持Alpine下的Locale设定,LANG缺省设定为UTF8
- Dockerfile分为自动下载和手动提供两种
目前Oracle的JDK下载方式
- Oracle目前主要维护的版本如下:
| 大版本 | 当前版本(2019/04/30) | 下载方式 | 备注 |
|---|---|---|---|
| 12 | 12.0.1 | 不必login和登录 | 非lts版 |
| 11 | 11.0.3 | 需要login | lts版 |
| 8 | 8u212 | 需要login | 非lts版 |
12.0.1版下载命令:
wget --header “Cookie: oraclelicense=accept-securebackup-cookie” https://download.oracle.com/otn-pub/java/jdk/12.0.1+12/69cfe15208a647278a19ef0990eea691/jdk-12.0.1_linux-x64.tar.gz
其余版本在Archive中保存
Dockerfile:自动下载
上述12.0.1目前不必登录即可通过wget或者curl下载,这种Oracle的JDK只需要Dockerfile即可。以12.0.1为例,设定如下所示
###############################################################################
#
#IMAGE: Oracle-JDK-Image
#VERSION: Alpine: 3.9
#VERSION: JDK :Oracle 12.0.1
#
###############################################################################
FROM alpine:3.9
###############################################################################
#MAINTAINER
###############################################################################
MAINTAINER LiuMiao <[email protected]>
ARG VER_JAVA_MAJOR=12.0.1
ARG VER_JAVA_MINOR=12
ARG DIR_JAVA_BASE=/usr/local/share/java
ARG DIR_JAVA_HOME=${DIR_JAVA_BASE}/jdk-${VER_JAVA_MAJOR}
ARG ARC_MODE=x64
ARG JDK_DOWNLOAD_URL=https://download.oracle.com/otn-pub/java/jdk/${VER_JAVA_MAJOR}+${VER_JAVA_MINOR}/69cfe15208a647278a19ef0990eea691/jdk-${VER_JAVA_MAJOR}_linux-${ARC_MODE}_bin.tar.gz
ARG VER_GLIBC=2.29-r0
ARG GLIBC_DOWNLOAD_URL=https://github.com/sgerrand/alpine-pkg-glibc/releases/download/${VER_GLIBC}
RUN mkdir -p ${DIR_JAVA_HOME} && \
wget --header "Cookie: oraclelicense=accept-securebackup-cookie" ${JDK_DOWNLOAD_URL} &&\
tar zxf jdk-${VER_JAVA_MAJOR}_linux-${ARC_MODE}_bin.tar.gz -C ${DIR_JAVA_BASE} && \
apk upgrade --update-cache &&\
wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub &&\
wget ${GLIBC_DOWNLOAD_URL}/glibc-${VER_GLIBC}.apk &&\
wget ${GLIBC_DOWNLOAD_URL}/glibc-bin-${VER_GLIBC}.apk &&\
wget ${GLIBC_DOWNLOAD_URL}/glibc-i18n-${VER_GLIBC}.apk &&\
apk add glibc-${VER_GLIBC}.apk glibc-bin-${VER_GLIBC}.apk glibc-i18n-${VER_GLIBC}.apk &&\
sleep 2 &&\
rm -rf /tmp/* /var/cache/apk/* jdk-${VER_JAVA_MAJOR}_linux-${ARC_MODE}_bin.tar.gz &&\
/usr/glibc-compat/bin/localedef -i en_US -f UTF-8 en_US.UTF-8
ENV JAVA_HOME ${DIR_JAVA_HOME}
ENV PATH $PATH:${DIR_JAVA_HOME}/bin
ENV LANG en_US.UTF8
注意事项:
随着Oracle版本的升级,目前可以下载的,未必以后可以下载,而且链接的地址会发生变化,Easypack中生成的Oracle 的JDK镜像,各版本会只构建一次不会重新更新。
Dockerfile:手动下载
以7u79为例,目前Oracle的大部分编译后的JDK文件只能通过login才能下载,非常不便,而且又无法通过源码全编译来达到这个目的。所以整体方式,只能是通过网页登录之后,下载,然后在Dockerfile中使用COPY进行构建。除了获取JDK的tar.gz文件的方式不同,其余和所谓的自动下载都相同
镜像tag说明
| JDK版本 | Base镜像 | Glibc | Locale | 大小 | 获取命令 |
|---|---|---|---|---|---|
| JDK12.0.1 | Alpine3.9 | 2.29 | UTF8 | 215M | docker pull liumiaocn/jdk:ora8u201-alpine3.9-glibc2.29 |
| JDK11.0.3 | Alpine3.9 | 2.29 | UTF8 | 215M | docker pull liumiaocn/jdk:ora11.0.3-alpine3.9-glibc2.29 |
| JDK7u79 | Alpine3.9 | 2.29 | UTF8 | 334M | docker pull liumiaocn/jdk:ora7u79-alpine3.9-glibc2.29 |
| JDK7u79 | CentOS7.6 | 缺省 | 缺省 | 382M | docker pull liumiaocn/jdk:ora7u79 |
| JDK8u201 | Alpine3.9 | 2.29 | UTF8 | 411M | docker pull liumiaocn/jdk:ora8u201-alpine3.9-glibc2.29 |
Oracle的JDK镜像设定中的常见问题
- https://liumiaocn.blog.csdn.net/article/details/89702529
- https://liumiaocn.blog.csdn.net/article/details/89682894
- https://liumiaocn.blog.csdn.net/article/details/89682376