docker的官方jdk镜像为openjdk(如下图),目前jdk的长期支持版(LTS)有8、11、17,但大多使用的还是8(尤其是国内公司),我自己做项目一般喜欢用11,如果项目开发使用的是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 <[email protected]>
# 创建一个新目录来存储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了