[!WARNING]
2023.5.18,Docker Hub 官网(hub.docker.com)突然无法访问……
Docker Hub 无法正常访问
Docker 的官方 jdk 镜像为 openjdk(下图),目前 jdk 的长期支持版(LTS)有 1.8、11、17,如果项目开发使用的是 jdk11,Dockerfile 中就写 FROM 的时候就要选择 jdk11 的 image 了,可以通过 docker search 查找别人构建好的 jdk11 镜像,也可以自己制作镜像,这里我们自己构建,方法如下
1 选择 JDK 的基础镜像,这里我选用 Oracle 的(openjdk、graalvmjdk 均可),从Oracle 官网下载 JDK11的 tar 包,不要下成.zip 的了
2 上传到 linux 服务器并创建一个 Dockerfile 文件,任意位置均可,最好和 Dockerfile 一个路径下,这样不用 build 时用 -f 指定 Dockerfile 的位置
3 编写 Dockerfile 文件,这个才是重点
内容如下:
# 建立一个新的镜像文件,配置模板:新建立的镜像是以 centos 为基础模板
# 因为 jdk 必须运行在操作系统之上
FROM centos:7.9.2009
# 维护者
MAINTAINER author <xxx@xx.com>
# 创建一个新目录来存储 jdk 文件
RUN mkdir /usr/local/java
#将 jdk 压缩文件复制到镜像中,它将自动解压缩 tar 文件
ADD jdk-11.0.10_linux-x64_bin.tar.gz /usr/local/java/
# 设置时区
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 设置环境变量
ENV JAVA_HOME /usr/local/java/jdk-11.0.10
ENV PATH $JAVA_HOME/bin:$PATH
# VOLUME 指定了临时文件目录为/tmp
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
4 将 Dockerfile 文件转为镜像
docker build -t java:11 .
-f:指定要使用的 Dockerfile 路径;
--tag, -t: 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
5 验证 jdk 版本(可略)
首先查看刚才构建的镜像
运行该镜像
查看 jdk 版本,是 11(具体是 11.0.10,和之前下载的 tar 文件名中版本一致),版本无误
完成!可以愉快的使用 Oracle JDK11 了😊