构建最小JDK Docker镜像

本文介绍如何通过更换基础镜像和精简JRE来减少Docker镜像体积,适用于Spring Cloud微服务项目的部署。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题描述

最近在使用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左右。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值