docker自行编译jdk镜像

三世轮回 提交于 2020-01-26 07:43:14

docker 编译jdk镜像


在使用docker镜像过程中,会发现有些镜像总不那么如意,比如jdk8u111以前的版本没有考虑到容器资源的情况,而新版本的镜像又是使用debian或者unbutu、centOS等很大的系统底层镜像,这时候需要我们执行构建核实的jdk镜像,话不多说,下面详细描述

镜像说明

  • 系统使用alpine镜像,这是一个5m左右的系统镜像,最小的linux系统
  • jdk采用jdk8的最新安装压缩包,后续也可以更换成jdk10
  • 需要在容器中安装glib支持java使用

准备内容

  • jdk-8u181-linux-x64.tar.gz
  • Dockerfile

镜像构建

  1. 编写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=.:JAVAHOME/lib/dt.jar:JAVA_HOME/lib/dt.jar:JAVA_HOME/lib/toos.jar
    ENV PATH=.:JAVAHOME/bin:JAVA_HOME/bin:PATH
    CMD [“jshell”, “-J-XX:+UnlockExperimentalVMOptions”,
    “-J-XX:+UseCGroupMemoryLimitForHeap”,
    “-R-XX:+UnlockExperimentalVMOptions”,
    “-R-XX:+UseCGroupMemoryLimitForHeap”]
    CMD [“java”,"-version"]

  2. 把dockerfile文件和jdk-8u181-linux-x64.tar.gz放在同一目录

  3. 编译镜像文件

    docker image build -t jdk-8-alpine:1.8.181 -f jdk-8-alpine.Dockerfile .

  4. 运行镜像文件,查看java版本

    docker run -ti jdk-8-alpine:1.8.181 sh
    java -version

  5. 在容器内看到下面内容则构建成功

    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)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!