一、问题描述

最近在使用docker部署spring Cloud微服务项目的时候发现,每个服务构建出的镜像文件高达700M。镜像
较大的镜像往往会导致移植,迁移缓慢。最后启动并进入容器发现,jdk用的是openjdk,那么我们就需要在构建镜像时使用更小的jdk作为基础镜像,进而减小镜像的大小。

二、解决方案

使用Oracle的JRE不是openjdk,并构建成Docker镜像。具体步骤如下:

2.1 下载并上传jre到linux服务器

下载地址:jre8下载地址
jre linux
大小大概是77M.

2.2 删除无用文件

  1. 解压压缩包

    $ tar -xvcf jre-8u181-linux-x64.tar.gz
  2. 删除无用的文件

    $ 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
  3. 重新打包
    cmd
    $ 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左右。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐