制作JDK21Docker基础镜像

原创
2023/12/19 17:46
阅读数 36

一、概述

    JDK高版本不再提供jre,需要手动从jdk提取,所以制作镜像需要先提取jre。

二、制作步骤

    1、提取jre

jlink --module-path jmods --add-modules java.desktop --output jre21

   如果提取的jre在运行程序的时候出现莫名缺包的问题,建议直接安装jdk(删除jmods文件夹即可)。

    2、打包jre

tar zcvf jre21.tar.gz *

    3、创建 Dockerfile

# 使用Alpine Linux作为基础镜像
#FROM alpine:latest
FROM alpine:3.15
#定义环境变量,以便后续使用
ENV JAVA_HOME :/usr/java/jdk/
ENV PATH $PATH:$JAVA_HOME/bin
COPY *.apk /tmp
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories \
    && apk update && apk add --no-cache curl bash tree tzdata binutils bash-completion curl openssl zstd\
    && rm -rf /var/cache/apk/* \
    && sed -i '1s?/bin/ash?/bin/bash?g' /etc/passwd\
    && sed -i 4d /etc/shells \
    && sed -i '2i/bin/bash' /etc/shells\
    && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
    && cd /tmp && apk add --allow-untrusted glibc-2.31-r0.apk  glibc-i18n-2.31-r0.apk glibc-bin-2.31-r0.apk \
    && wget -O /tmp/gcc-libs.tar.zst http://mirrors.ustc.edu.cn/archlinux/pool/packages/gcc-libs-13.2.1-3-x86_64.pkg.tar.zst \
    && /usr/bin/unzstd /tmp/gcc-libs.tar.zst \
    && mkdir /tmp/gcc \
    && tar -xf /tmp/gcc-libs.tar -C /tmp/gcc \
    && mv /tmp/gcc/usr/lib/libgcc* /tmp/gcc/usr/lib/libstdc++* /usr/glibc-compat/lib \
    && strip /usr/glibc-compat/lib/libgcc_s.so.* /usr/glibc-compat/lib/libstdc++.so* \
    && wget http://mirrors.ustc.edu.cn/archlinux/pool/packages/zlib-1%3A1.3-2-x86_64.pkg.tar.zst -O /tmp/libz.tar.zst \
    && mkdir /tmp/libz \
    && /usr/bin/unzstd /tmp/libz.tar.zst \
    && tar -xf /tmp/libz.tar -C /tmp/libz \
    && mv /tmp/libz/usr/lib/libz.so* /usr/glibc-compat/lib \
    && apk del binutils \
    && rm -rf /tmp/* /var/cache/apk/* \
    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo 'Asia/Shanghai' > /etc/timezone 

# 下载和解压JDK 21
ADD jre21.tar.gz /usr/java/jdk/
WORKDIR /opt

    4、构建(整体大小是 174M)

docker build -t shy/java21:21.0.1 .

    5、测试运行

# docker run -it shy/java21:21.0.1
/opt # java -version
java version "21.0.1" 2023-10-17 LTS
Java(TM) SE Runtime Environment (build 21.0.1+12-LTS-29)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.1+12-LTS-29, mixed mode, sharing)

    6、 备注

    如果项目需要进行Excel导出的话,以上进行将会报错,因为缺少字体库,但是即使安装字体库也不会正确执行,因为字体库与Alpine不兼容,此时需要使用centos作为基础镜像,Dockerfile如下:

#FROM alpine:latest
FROM centos:7
#定义环境变量,以便后续使用
ENV JAVA_HOME :/usr/java/jdk/
ENV PATH $PATH:$JAVA_HOME/bin
RUN yum install -y fontconfig
RUN fc-cache --force
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 
RUN echo 'Asia/Shanghai' > /etc/timezone 
# 下载和解压JDK 21
ADD jre21.tar.gz /usr/java/jdk/
WORKDIR /opt

有兴趣的大佬大神可以关注下小弟的微信公共号,一起学习交流,扫描以下二维码关注即可。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部