• 基于ubuntu构建jdk镜像


    背景

    Docker Hub 上有很多官方的 JDK 镜像,但是它们都不是基于 ubuntu 的,而是基于更小的 Linux 发行版,在使用一些命令行工具的之后老师报找不到,而且自己对 ubuntu 也更加熟悉。

    Dockerfile

    # 以ubuntu为基础镜像
    FROM ubuntu:18.04
    
    # 指明该镜像的作者
    MAINTAINER monkeybrain
    
    # 更新apt源
    RUN sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list \
        && sed -i s/security.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list 
    
    # 复制linux版本jdk压缩包到镜像内
    COPY /jdk-8u381-linux-x64.tar.gz /usr/java/jdk-8u381-linux-x64.tar.gz
    # 解压缩jdk到指定目录
    RUN mkdir /usr/java/jdk
    RUN tar -zxvf /usr/java/jdk-8u381-linux-x64.tar.gz -C /usr/java/jdk
    
    # 设置JAVA_HOME、CLASSPATH、PATH环境变量
    ENV JAVA_HOME=/usr/java/jdk/jdk1.8.0_381
    ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV PATH=$JAVA_HOME/bin:$PATH
    
    RUN apt update
    # 设置启动命令,打印jdk版本
    CMD ["java", "-version"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    以此 Dockerfile 构建的镜像拥有国内的apt源,且安装了jdk8。
    在构建此镜像的时候我遇到了一个问题,如果将 RUN apt update 的位置放在更新apt源的 RUN 之后,或报错,但是镜像构建成功,如下所示:

    # 以ubuntu为基础镜像
    FROM ubuntu:18.04
    
    # 指明该镜像的作者
    MAINTAINER monkeybrain
    
    # 更新apt源
    RUN sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list \
        && sed -i s/security.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list 
    RUN apt update
    
    # 复制linux版本jdk压缩包到镜像内
    COPY /jdk-8u381-linux-x64.tar.gz /usr/java/jdk-8u381-linux-x64.tar.gz
    # 解压缩jdk到指定目录
    RUN mkdir /usr/java/jdk
    RUN tar -zxvf /usr/java/jdk-8u381-linux-x64.tar.gz -C /usr/java/jdk
    
    # 设置JAVA_HOME、CLASSPATH、PATH环境变量
    ENV JAVA_HOME=/usr/java/jdk/jdk1.8.0_381
    ENV CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    ENV PATH=$JAVA_HOME/bin:$PATH
    
    # 设置启动命令,打印jdk版本
    CMD ["java", "-version"]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    这样构建出来的镜像要自己手动进入容器里面重新执行 apt update,如果不执行可能会在执行 apt install 报找不到软件。如果有知道原因的可以在评论区解释一下。

    参考:
    https://juejin.cn/post/7195443401142042683
    https://blog.csdn.net/eif88/article/details/123852897

  • 相关阅读:
    无叶风扇32位MCU单片机MM32SPIN0230
    ADB各种操作指令详解大汇总
    代码随想录算法训练营20期|第三十天|332.重新安排行程 ● 51. N皇后 ● 37. 解数独 ● 总结
    Mysql_Note3
    LeetCode_双指针_中等_633.平方数之和
    【MySQL】深入理解MySQL索引优化器工作原理
    (09_13)杭州站|阿里云 Serverless 技术实践营(Serverless + 大数据)开启报名!
    I/O多路复用 - select
    对比分析:GBDT、XGBoost、CatBoost和LightGBM
    A2l文件解析
  • 原文地址:https://blog.csdn.net/imonkeyi/article/details/132792630