docker 编译jdk镜像
在使用docker镜像过程中,会发现有些镜像总不那么如意,比如jdk8u111以前的版本没有考虑到容器资源的情况,而新版本的镜像又是使用debian或者unbutu、centOS等很大的系统底层镜像,这时候需要我们执行构建核实的jdk镜像,话不多说,下面详细描述
镜像说明
- 系统使用alpine镜像,这是一个5m左右的系统镜像,最小的linux系统
- jdk采用jdk8的最新安装压缩包,后续也可以更换成jdk10
- 需要在容器中安装glib支持java使用
准备内容
- jdk-8u181-linux-x64.tar.gz
- Dockerfile
镜像构建
-
编写dockerfile,dockerfile文件内容如下:
FROM alpine:3.7
ADD jdk-8u181-linux-x64.tar.gz /usr/local/
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
RUN apk --no-cache add ca-certificates &&
wget --no-check-certificate -q -O /etc/apk/keys/sgerrand.rsa.pub https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.27-r0/sgerrand.rsa.pub &&
wget --no-check-certificate https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.27-r0/glibc-2.27-r0.apk &&
apk add glibc-2.27-r0.apk
ENV JAVA_HOME=/usr/local/jdk1.8.0_181
ENV JAVA_TOOL_OPTIONS="-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap"
ENV CLASSPATH=.: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/dt.jar: JAVAHOME/lib/dt.jar:JAVA_HOME/lib/toos.jar
ENV PATH=.: J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
CMD [“jshell”, “-J-XX:+UnlockExperimentalVMOptions”,
“-J-XX:+UseCGroupMemoryLimitForHeap”,
“-R-XX:+UnlockExperimentalVMOptions”,
“-R-XX:+UseCGroupMemoryLimitForHeap”]
CMD [“java”,"-version"] -
把dockerfile文件和jdk-8u181-linux-x64.tar.gz放在同一目录
-
编译镜像文件
docker image build -t jdk-8-alpine:1.8.181 -f jdk-8-alpine.Dockerfile .
-
运行镜像文件,查看java版本
docker run -ti jdk-8-alpine:1.8.181 sh
java -version -
在容器内看到下面内容则构建成功
Picked up JAVA_TOOL_OPTIONS: -XX:+UnlockExperimentalVMOptions - XX:+UseCGroupMemoryLimitForHeap
java version “1.8.0_181”
Java™ SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot™ 64-Bit Server VM (build 25.181-b13, mixed mode)