打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架构)踩坑 第二弹