zoukankan      html  css  js  c++  java
  • 构建最小JDK Docker镜像=>改换成文章:重构基础docker镜像

    一、问题描述

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

    二、解决方案

    使用Oracle的JRE而不是openjdk,并构建成Docker镜像。

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

    jre8下载地址:https://www.java.com/en/download/manual.jsp

    jre linux x64

    大小大概是80M

    2.2 删除无用文件

    解压压缩包
    
    $ tar -zxv -f 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 jre1.8.0_231.tar.gz *
    

    2.3 新建Dockerfile

    vim Dockerfile_jre1.8.0_231
    
    # using alpine-glibc instead of alpine  is mainly because JDK relies on glibc
    FROM docker.io/jeanblanchard/alpine-glibc:latest
    # author
    MAINTAINER sandu <1103324414@qq.com>
    # date zone 设置时间,避免相差8个小时
    RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
    RUN echo "Asia/Shanghai" > /etc/timezone
    # A streamlined jre
    ADD jre1.8.0_231.tar.gz /usr/local/java/jdk/
    # set env
    ENV JAVA_HOME /usr/local/java/jdk/
    ENV PATH ${PATH}:${JAVA_HOME}/bin
    # run container with base path:/opt
    WORKDIR /opt
    

    2.4 构建docker镜像

    docker build -t 192.168.75.12/library/jre:1.8 -f Dockerfile_jre1.8.0_231 .
    

    这样构建的jdk镜像大概是130M左右。

    2.5 测试

    # docker run -it 192.168.75.12/library/jre:1.8
    /opt # java -version
    java version "1.8.0_231"
    Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
    Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
    /opt # date
    Tue Oct 29 10:22:33 UTC 2019
    

    2.6 推送到Harbor仓库

    [root@bogon jre1.8.0_231]# docker login http://192.168.75.12
    Authenticating with existing credentials...
    WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
    Configure a credential helper to remove this warning. See
    https://docs.docker.com/engine/reference/commandline/login/#credentials-store
    
    Login Succeeded
    
    [root@bogon jre1.8.0_231]# docker push 192.168.75.12/library/jre:1.8
    The push refers to repository [192.168.75.12/library/jre]
    0c64e8821df0: Pushed 
    cc24d9491ad4: Pushed 
    fd414845c3cc: Pushed 
    6dbecb8e1a3e: Layer already exists 
    77cae8ab23bf: Layer already exists 
    1.8: digest: sha256:3484a7852d1330867c14805c03db28ccde2cc327e2ceb5658aaeb0bea010122a size: 1365
    

    20200618下载的最新版本是1.8.251
    不过构建docker镜像的时候需要做些调整,不然容器内时间会差8个小时

    /usr/local/src/jre1.8.0_251 # cp /etc/localtime . 
    /usr/local/src/jre1.8.0_251 # touch  timezone 
    /usr/local/src/jre1.8.0_251 # echo "Asia/Shanghai" >> timezone  
    
    /usr/local/src/jre1.8.0_251 # ll                                                                                                   
    总用量 43M
    drwxr-xr-x  2 10143 10143  208 6月  18 10:53 bin
    -rw-r--r--  1 root  root   268 6月  18 11:36 Dockerfile_jre1.8.0_251
    -rw-r--r--  1 root  root   43M 6月  18 10:54 jre1.8.0_251.tar.gz
    drwxr-xr-x 13 10143 10143 4.0K 6月  18 10:53 lib
    -rw-r--r--  1 root  root   556 6月  18 11:41 localtime
    drwxr-xr-x  4 10143 10143   47 3月  12 14:33 man
    -rw-r--r--  1 root  root    14 6月  18 11:44 timezone
    
    /usr/local/src/jre1.8.0_251 # cat Dockerfile_jre1.8.0_251                                                                          
    FROM docker.io/jeanblanchard/alpine-glibc:latest
    MAINTAINER sandu <1103324414@qq.com>
    COPY localtime /etc/localtime
    COPY timezone /etc/timezone
    ADD jre1.8.0_251.tar.gz /usr/local/java/jdk/
    ENV JAVA_HOME /usr/local/java/jdk/
    ENV PATH ${PATH}:${JAVA_HOME}/bin
    /usr/local/src/jre1.8.0_251 # docker build -t idocker.io/jre:1.8.251 -f Dockerfile_jre1.8.0_251 .                                   
    Sending build context to Docker daemon  161.1MB
    Step 1/7 : FROM docker.io/jeanblanchard/alpine-glibc:latest
     ---> b18af330677b
    Step 2/7 : MAINTAINER sandu <1103324414@qq.com>
     ---> Using cache
     ---> 032d2550e70a
    Step 3/7 : COPY localtime /etc/localtime
     ---> 11bfcd12b1cd
    Step 4/7 : COPY timezone /etc/timezone
     ---> f04d04a9a714
    Step 5/7 : ADD jre1.8.0_251.tar.gz /usr/local/java/jdk/
     ---> 0bcb7f049c6d
    Step 6/7 : ENV JAVA_HOME /usr/local/java/jdk/
     ---> Running in e986b48fb724
    Removing intermediate container e986b48fb724
     ---> 193adeb5015b
    Step 7/7 : ENV PATH ${PATH}:${JAVA_HOME}/bin
     ---> Running in 4b7fda4a59ad
    Removing intermediate container 4b7fda4a59ad
     ---> bbba3f4d1958
    Successfully built bbba3f4d1958
    Successfully tagged idocker.io/jre:1.8.251
    /usr/local/src/jre1.8.0_251 # docker images                                                                                         
    REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
    idocker.io/jre               1.8.251             bbba3f4d1958        5 seconds ago       133MB
    redis                        latest              235592615444        7 days ago          104MB
    jeanblanchard/alpine-glibc   latest              b18af330677b        2 weeks ago         17.3MB
    /usr/local/src/jre1.8.0_251 # docker run -it idocker.io/jre:1.8.251                                                             
    / # date
    Thu Jun 18 11:49:32 CST 2020
    / # java -version
    java version "1.8.0_251"
    Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
    Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)
    / # exit
    
  • 相关阅读:
    DS博客作业05--查找
    DS博客作业04--图
    DS博客作业03--树
    栈和队列
    第六次作业
    第五次作业
    第四次作业
    第三次作业
    java任务
    第三周-自主学习任务-面向对象基础与类的识别
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/11760747.html
Copyright © 2011-2022 走看看