docker jdk基础镜像精简(带jps命令) 第一弹

打docker jdk最小镜像包,考虑到小体积,使用jre包,但需要带jps命令,则将jdk中的jps、tools.jar拷贝进jre包。


1、到官网找jdk、jre对应的下载地址,用wget进行下载

注意官网找的url中otn需要加-pub
wget --no-cookies --no-check-certificate --header "Cookie:oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/8u311-b11/4d5417147a92418ea8b615e228bb6935/jre-8u311-linux-x64.tar.gz
因为需要jps功能因此下载对应的jdk包
wget --no-cookies --no-check-certificate --header "Cookie:oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/8u311-b11/4d5417147a92418ea8b615e228bb6935/jdk-8u311-linux-x64.tar.gz

2、解压jre-8u311-linux-x64.tar.gz,删除一些无用文件

#解压
tar -zxvf jre-8u311-linux-x64.tar.gz

#进入目录
cd jre1.8.0_311/

#删除文本文件
rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txtTHIRDPARTYLICENSEREADME.txt Welcome.html
#删除其他无用文件
rm -rf     lib/plugin.jar \
           lib/ext/jfxrt.jar \
           bin/javaws \
           lib/javaws.jar \
           lib/desktop \
           plugin \
           lib/deploy* \
           lib/*javafx* \
           lib/*jfx* \
           lib/amd64/libdecora_sse.so \
           lib/amd64/libprism_*.so \
           lib/amd64/libfxplugins.so \
           lib/amd64/libglass.so \
           lib/amd64/libgstreamer-lite.so \
           lib/amd64/libjavafx*.so \
           lib/amd64/libjfx*.so         

3、解压jdk-8u311-linux-x64.tar.gz将jps(/bin)和tools.jar(/lib)文件拷贝到对应目录

#解压
tar -zxvf jdk-8u311-linux-x64.tar.gz

#进入目录
cd jdk1.8.0_311/

#拷贝jps文件
cp bin/jps ../jre1.8.0_311/bin/

#拷贝tools.jar文件
cp lib/tools.jar ../jre1.8.0_311/lib/

4、重新打tar.gz包

cd jre1.8.0_311/
tar zcvf jre8.tar.gz *

5、创建Dockerfile

jdk的运行需要依赖glibc库,而alpine镜像不自带,因此需要安装相关依赖。制作镜像的时候下载可能会挺久的,可以提前下载好,使用COPY指令拷贝,如果打错了,下次再打依赖就可以直接使用了

# using alpine-glibc instead of alpine  is mainly because JDK relies on glibc
FROM alpine:3.8
LABEL maintainer="modaozushiyo"
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/${TZ} /etc/localtime && \
    echo ${TZ} > /etc/timezone

#******************更换Alpine源为mirrors.ustc.edu.cn******************
RUN echo http://mirrors.aliyun.com/alpine/v3.10/main/ > /etc/apk/repositories && \
    echo http://mirrors.aliyun.com/alpine/v3.10/community/ >> /etc/apk/repositories
RUN apk update && apk upgrade

# Alpine linux为了精简本身并没有安装太多的常用软件,apk类似于ubuntu的apt-get,
# 用来安装一些常用软V件,其语法如下:apk add bash wget curl git make vim docker
# wget是linux下的ftp/http传输工具,没安装会报错“/bin/sh:   wget: not found”,网上例子少安装wget
# ca-certificates证书服务,是安装glibc前置依赖
RUN apk --no-cache add libstdc++ ca-certificates bash wget \
    && wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
    && wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-2.30-r0.apk \
    && wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-bin-2.30-r0.apk \
    && wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.30-r0/glibc-i18n-2.30-r0.apk \
    && apk add glibc-2.30-r0.apk && apk add glibc-bin-2.30-r0.apk && apk add glibc-i18n-2.30-r0.apk \
    && rm -rf /var/cache/apk/* glibc-2.30-r0.apk glibc-bin-2.30-r0.apk glibc-i18n-2.30-r0.apk

RUN apk add --update font-adobe-100dpi ttf-dejavu fontconfig

# A streamlined jre
ADD jre8.tar.gz /usr/java/jdk/
# set env
ENV JAVA_HOME /usr/java/jdk
ENV PATH ${PATH}:${JAVA_HOME}/bin

6、构建镜像

docker build -t docker-registry:5000/jdk:8-jre-modaozushiyo .

7、测试镜像的java环境及jps是否可用

docker run -it docker-registry:5000/jdk:8-jre-modaozushiyo java -version
docker run -it docker-registry:5000/jdk:8-jre-modaozushiyo jps

8、下载镜像,大小约212M

docker save -o docker-registry-5000-jdk-8-jre-modaozushiyo.tar docker-registry:5000/jdk:8-jre-modaozushiyo

以上为教程可手动学习,如果有哪些小伙伴不想动手只需要镜像,请到以下地址下载镜像

百度网盘 请输入提取码:w4wc

PS:以上为x86的jdk镜像精简,如果需要体积更小的x86和arm版本请看另一篇 docker jdk基础镜像精简(x86和arm架构)踩坑 第二弹

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值