基于ubuntu构建jdk镜像

news/2024/12/23 6:33:28/

背景

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:$PATHRUN apt update
# 设置启动命令,打印jdk版本
CMD ["java", "-version"]

以此 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"]

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

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


http://www.ppmy.cn/news/1103418.html

相关文章

第6篇 vue的打包工具webpack

一 webpack 1.1 webpack的作用 webpack是一个打包工具,可以把多个静态资源文件打包成一个文件。如图所示: 1.2 版本依赖对照关系 PS E:\vue-project\vue-demo0902\wp-demo> npm -v 6.4.1 PS E:\vue-project\vue-demo0902\wp-demo> node -v v10.…

力扣1、两数之和

转到力扣 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可…

SQL Server对象类型(3)——4.4.索引视图(Indexed View)

4.4. 索引视图(Indexed View) 4.4.1. 索引视图概念 与Oracle中的物化视图(MV,Materialized View)相似,SQL Server中的索引视图是一种实的、被实体化的对象类型,索引视图和视图是有区别的,视图不实际存储数据,其数据来源于其基表中的数据;而索引视图实际存储数据,其…

Python做批处理,给安卓设备安装应用和传输图片

场景:几台新安卓平板过来了,需要安4个应用并复制4张图片。手工操作其实也未尝不可,但是能自动化起来,岂不是美哉。 python调用系统命令,我选用了os.system,最简单粗暴,也能有回显,就…

2023 年高教社杯全国大学生数学建模竞赛题目 A 题 定日镜场的优化设计

A 题 定日镜场的优化设计 构建以新能源为主体的新型电力系统,是我国实现“碳达峰”“碳中和”目标的一项重要措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。 定日镜是塔式太阳能光热发电站(以下简称塔式电站)收集太阳能的基…

XXE-Lab for PHP

环境配置 1.将靶场进行下载.... https://github.com/c0ny1/xxe-lab 2.将PHPStudy的中间件与版本信息调制为php-5.4.45Apache访问以下地址开始练习... http://127.0.0.1/xxelabs/php_xxe/ 靶场实操 1.在登录界面输入账号密码并抓取数据包.... 2.尝试读取本地文件.... <…

信息安全技术 办公设备安全测试方法

声明 本文是学习GB-T 38558-2020 信息安全技术 办公设备安全测试方法. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 办公设备安全测试方法范围 本标准规定了办公设备安全技术要求和安全管理功能要求的测试方法。 本标准适用于测试机构、办公设备厂…

Qt Designer UI设计布局小结

目录 前言1 居中布局2 左右布局3 上下布局4 复杂页面布局总结 前言 本文总结了在开发Qt应用程序时使用 Designer 进行UI布局的一些心得体会。Qt Designer是Qt提供的一个可视化界面设计工具&#xff0c;旨在帮助开发人员快速创建和布局用户界面。它提供了丰富的布局管理器和控件…