alpine linux构建jdk基础镜像

alpine能够如此小巧是因为它没有集成一些普通的Linux库,比如跑Java应用必须依赖的glibc相关的包,alpine linux构建oracle jdk时,需要先安装一些依赖库,oracle官网下载jre即可,无需下载jdk,否则构建的基础镜像过大,以下为Dockerfile

FROM alpine:3.18.5

ADD jdk.tar.gz /usr/local/jdk/

COPY locale.md /usr/local/locale.md
COPY glibc-2.34-r0.apk /tmp/glibc.apk
COPY glibc-bin-2.34-r0.apk /tmp/glibc-bin.apk
COPY glibc-i18n-2.34-r0.apk /tmp/glibc-i18n.apk

COPY gcc-libs-11.1.0-3-x86_64.pkg.tar /tmp/gcc-libs.tar
COPY zlib-1_1.2.11-4-x86_64.pkg.tar.xz /tmp/libz.tar

COPY sgerrand.rsa.pub /etc/apk/keys/sgerrand.rsa.pub

RUN echo http://mirrors.aliyun.com/alpine/v3.18/main/ > /etc/apk/repositories \
    && echo http://mirrors.aliyun.com/alpine/v3.18/community/ >> /etc/apk/repositories \ 
    && apk update && apk add --no-cache curl zlib wget bash tree tzdata binutils cronie openssl font-adobe-100dpi ttf-dejavu fontconfig \
    && 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\
    && cd /tmp && apk add --force-overwrite glibc.apk  glibc-i18n.apk glibc-bin.apk \
    && 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* \
    && cat /usr/local/locale.md | xargs -i /usr/glibc-compat/bin/localedef -i {} -f UTF-8 {}.UTF-8 \
    && mkdir /tmp/libz \
    && 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/* /var/cache/fontconfig/* /usr/local/locale.md \
    && ulimit -c unlimited \
    && rm -rf /lib/libc.musl-x86_64.so.1 \
    && mv /usr/glibc-compat/lib/ld-linux-x86-64.so.2 /usr/glibc-compat/lib/ld-linux-x86-64.so \
    && ln -s /usr/glibc-compat/lib/ld-linux-x86-64.so /usr/glibc-compat/lib/ld-linux-x86-64.so.2 \
    && ln -s /usr/glibc-compat/lib/ld-linux-x86-64.so /lib/libc.musl-x86_64.so.1 \
    && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && echo 'Asia/Shanghai' > /etc/timezone

#设置定时任务的文件 /etc/crontabs/root root是个文件
#处理生成图片验证码报错的问题
COPY libbrotlicommon.so.1.0.9 /usr/lib/
COPY libfontconfig.so.1.12.0 /usr/lib/

ENV LANG=zh_CN.UTF-8
ENV LANGUAGE=zh_CN.UTF-8

ENV JAVA_HOME /usr/local/jdk
ENV CLASSPATH .:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $JAVA_HOME/bin:$PATH

CMD ["java","-version"]

COPY libbrotlicommon.so.1.0.9 /usr/lib/
COPY libfontconfig.so.1.12.0 /usr/lib/

 alpine linux版本<=3.15,Dockerfile文件中可以省略这两个COPY命令,这两个COPY命令是处理alpine linux版本大于3.15后,若java应用中包含生成图形验证码相关代码,java应用报底层错误,导致应用停止验证码无法生成的问题

locale.md,sgerrand.rsa.pub,libbrotlicommon.so.1.0.9,libfontconfig.so.1.12.0文件免积分下载地址

https://download.csdn.net/download/q84851217/88729326

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值