一、问题描述
最近在使用docker部署spring Cloud微服务项目的时候发现,每个服务构建出的镜像文件高达700M。较大的镜像往往会导致移植,迁移缓慢。最后启动并进入容器发现,jdk用的是openjdk,那么我们就需要在构建镜像时使用更小的jdk作为基础镜像,进而减小镜像的大小。
二、解决方案
使用Oracle的JRE不是openjdk,并构建成Docker镜像。具体步骤如下:
2.1 下载并上传jre到linux服务器
下载地址:jre8下载地址
大小大概是77M.
2.2 删除无用文件
-
解压压缩包
$ tar -xvcf jre-8u181-linux-x64.tar.gz
-
删除无用的文件
$ cd jre1.8.0_181/ $ 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 jre8.tar.gz *
2.3 新建Dockerfile
# using alpine-glibc instead of alpine is mainly because JDK relies on glibc
FROM docker.io/jeanblanchard/alpine-glibc
# author
MAINTAINER simon
# A streamlined jre
ADD jre8.tar.gz /usr/java/jdk/
# set env
ENV JAVA_HOME /usr/java/jdk
ENV PATH ${PATH}:${JAVA_HOME}/bin
# run container with base path:/opt
WORKDIR /opt
2.4 构建docker镜像
docker build -t simon/java8:1.0 .
这样构建的jdk镜像大概是120M左右。
2.5 修改maven docker插件配置
指定simon/java8:1.0为基础镜像
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>ibase/${project.artifactId}:${project.version}</imageName>
<!--<dockerDirectory>src/main/docker</dockerDirectory>-->
<forceTags>true</forceTags>
<baseImage>simon/java8:1.0</baseImage>
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
2.6 构建各微服务的镜像
构建之后的镜像只有200M左右。