昨天在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说明

Easypack:基于Alpine的Oracle的JDK镜像

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镜像设定中的常见问题

在此基础上的Maven镜像

Easypack:基于Alpine的Oracle的JDK镜像

相关文章: