• 基于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

  • 相关阅读:
    gradle使用笔记整理
    淘宝/天猫api数据接口,获得淘宝商品详情 API 返回值说明
    OpenCV(十五):拷贝图像
    centos下jenkins部署springboot项目(jar包)编写启动脚本
    算法 数据流的中位数-(大顶堆小顶堆+冒泡排序)
    docker 安装kafka
    毕业论文中的问卷如何做效度分析?
    以管道的方式来完成复杂的流程处理
    语义检索系统【全】:基于Milvus+ERNIE+SimCSE+IBN实现学术文献语义检索系统完整版
    【算法】过桥
  • 原文地址:https://blog.csdn.net/imonkeyi/article/details/132792630