docker利用jre制作成基础镜像,再根据这个基础镜像制作可运行jar包的镜像

制作jre基础镜像

因为在dockerhub上获取的jdk镜像都很大, 动辄500多M, 本着精简镜像的考虑, 把根据jdk生成jar包镜像, 改为根据jre生成jar包镜像

alpine简介

由于项目基于spring boot需要jre环境支撑,出于镜像大小考虑,若采用unbuntu或者centos作为基础镜像,会很大,在需要传输的场景中非常的不方便。

docker的linux镜像有很多,比如Ubuntu、centos之类的,但他们的体积都比较大,单纯一个镜像的都是400M以上的,alpine是一个轻量级的linux系统,而其中的alpine镜像只用不到10M,非常的小巧,所以这里就选用它作为基础的构建镜像。但是alpine是基于MUSL libs(mini libc)的,而Java是基于GUN Standard C (glibc)library的,如果不做任何处理的话Java不能在其上运行,而在网上有大佬已经制造安装了glibc的alpine镜像,我们直接使用即可

jdk与jre的区别

jdk大小200M左右(java development kit)java开发工具包
jre大小70M+(java runtime enviorment)java运行时环境
由于使用SpringBoot项目仅需要Java运行时环境,没有编译等需求,故这里选择体积较小的jre

下载jre8u171并上传至linux服务器

解压缩后发现, 解压后的大小大约200M+, 还是太大了, 可以删除一些不需要的内容, 以精简jre

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

最后查看jre的大小变成了107M

使用DockerFile把jre制作成docker镜像

在于jre同级别的目录下
vim Dockerfile
添加如下内容

FROM docker.io/jeanblanchard/alpine-glibc
ADD jre /usr/local/
ENV JAVA_HOME /usr/local/jre
ENV PATH ${PATH}:${JAVA_HOME}/bin
CMD ["java", "-version"]

docker build -f dockerfile的绝对路径 -t jre:8 .

使用Dockerfile 根据jre8镜像生成运行jar包的镜像

暂时在本地上传jar包进行演示
把jar包上传至/opt目录下
vim Dockerfile
加入如下内容

FROM jre:8
COPY *.jar /opt/app.jar
EXPOSE 80
ENTRYPOINT ["java","-jar","/opt/app.jar"]

使用docker run即可启动即可

你可能感兴趣的:(docker)