构建最小JDK Docker镜像

一、问题描述

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

二、解决方案

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

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

下载地址:jre8下载地址

大小大概是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.spotifygroupId>
  <artifactId>docker-maven-pluginartifactId>
  <version>1.0.0version>
  <configuration>
    <imageName>ibase/${project.artifactId}:${project.version}imageName>
    
    <forceTags>trueforceTags>
    <baseImage>simon/java8:1.0baseImage>
    <entryPoint>["java","-jar","/${project.build.finalName}.jar"]entryPoint>
    <resources>
      <resource>
        <targetPath>/targetPath>
        <directory>${project.build.directory}directory>
        <include>${project.build.finalName}.jarinclude>
      resource>
    resources>
  configuration>
plugin>

2.6 构建各微服务的镜像


构建之后的镜像只有200M左右。

你可能感兴趣的:(Docker,Docker)