使用JRE8构建Java8基础镜像

2,986 阅读2分钟

首先说说为什么要进行镜像压缩,docker镜像内部分层结构,导致某些层上面的依赖多余,在某种特定场景下这些依赖其实并不会用到,因此,针对特定场景,我们可以将这些多余的依赖进行删除,缩小镜像体积节省资源。

一、JRE下载

JRE官方下载网站为:官方下载

下载时请注意你所用的机器的系统以及位数,不要在32位机器上安装了64位的包,那就尴尬了老铁。

下载完成之后大概就长下面这个样子:

我们重点看下Dockerfile1jre-8u221-linux-x64.tar.gz两个文件即可~

二、解压缩并删除相关没用的依赖

解压缩刚刚下载的包,使用下面命令

tar -zxvf jre-8u221-linux-x64.tar.gz
cd jre1.8.0_221/
rm -rf COPYRIGHT LICENSE README release THIRDPARTYLICENSEREADME-JAVAFX.txt THIRDPARTYLICENSEREADME.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

tar zcvf jdk8.tar.gz *

mv jdk8.tar.gz  ..

cd ..

ll

执行完之后大概就如下图,我们重新打包生成了一个jre8文件叫jdk8.tar.gz,注意这里解压出来之后是没有目录的,在编写下边的Dockerfile文件时要特别注意。

三、编写Dockerfile文件并构建

接下来我们根据我们生成的jdk8.tar.gz文件构建出一个jdk8镜像,编写Dockerfile文件如下:

# using alpine-glibc instead of alpine  is mainly because JDK relies on glibc
FROM docker.io/jeanblanchard/alpine-glibc
# 维护者信息
MAINTAINER hjw <v:lifvalue>
# ADD指令:拷贝文件并解压   COPY指令:拷贝文件
ADD jdk8.tar.gz /usr/local/software/
# 设置相关java环境变量
ENV JAVA_HOME /usr/local/software
ENV PATH ${PATH}:${JAVA_HOME}/bin
# 这个指令表示,我们运行容器时,容器默认的工作目录
WORKDIR /opt

注意,这个Dockerfile文件最后不要增加ENTRYPOINY指令,加上之后可能会有xxxxxx directory的坑。

下边我们构建我们自己的jdk8镜像。

docker build -f Dockerfile1 -t xxx/jdk8 .

构建完成之后,会用docker images可以查看我们刚刚生成的镜像,如下:

四、测试镜像

执行下面命令启动一个容器,看看java环境变量是否生效:

docker run -it 3015

3015为镜像ID的前4位,最后使用exit退出容器。

五、如何在微服务中使用?

在服务中使用很简单,只需要在FROM指令中引入即可,如下:

FROM xxx/jdk8