首先说说为何要进行镜像压缩,docker镜像内部分层结构,致使某些层上面的依赖多余,在某种特定场景下这些依赖其实并不会用到,所以,针对特定场景,咱们能够将这些多余的依赖进行删除,缩小镜像体积节省资源。html
JRE官方下载网站为:官方下载java
下载时请注意你所用的机器的系统以及位数,不要在32位机器上安装了64位的包,那就尴尬了老铁。linux
下载完成以后大概就长下面这个样子:docker
咱们重点看下Dockerfile1
和jre-8u221-linux-x64.tar.gz
两个文件便可~bash
解压缩刚刚下载的包,使用下面命令jsp
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
文件时要特别注意。微服务
接下来咱们根据咱们生成的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镜像。ui
docker build -f Dockerfile1 -t xxx/jdk8 .
复制代码
构建完成以后,会用docker images
能够查看咱们刚刚生成的镜像,以下:
执行下面命令启动一个容器,看看java环境变量是否生效:
docker run -it 3015
3015
为镜像ID的前4位,最后使用exit
退出容器。
在服务中使用很简单,只须要在FROM
指令中引入便可,以下:
FROM xxx/jdk8
复制代码