方法一
从官方网站下载 openjdk 15 tar 文件,解压文件,删除下载的 tar 文件并将路径设置为 java 二进制文件。
创建一个 Dockerfile 并复制以下内容
FROM centos:8
ENV PATH=$PATH:/opt/java/jdk-15.0.2/bin
WORKDIR /opt/java
RUN curl https://download.java.net/java/GA/jdk15.0.2/0d1cfde4252546c6931946de8db48ee2/7/GPL/openjdk-15.0.2_linux-x64_bin.tar.gz -o openjdk-15.0.2_linux-x64_bin.tar.gz
RUN tar -xzf openjdk-15.0.2_linux-x64_bin.tar.gz && \
rm -rf openjdk-15.0.2_linux-x64_bin.tar.gz
构建一个 docker 镜像
docker build -t java-approach-1:15 .
检查docker镜像的大小
运行以下命令来检查本地机器上可用的 docker 镜像
docker images
从创建的图像创建一个 docker 容器并检查 java 版本
方法 2(最佳实践)
从官网下载openjdk 15 tar文件,解压并单层删除tar文件,设置路径为java binary。
创建一个 Dockerfile 并复制以下内容
FROM centos:8
ENV PATH=$PATH:/opt/java/jdk-15.0.2/bin
RUN mkdir /opt/java && \
curl https://download.java.net/java/GA/jdk15.0.2/0d1cfde4252546c6931946de8db48ee2/7/GPL/openjdk-15.0.2_linux-x64_bin.tar.gz | tar -xz -C /opt/java/
如果你下载的是dockerfile里面的一个文件,解压后不需要这个文件,那我们就应该删除同层的那个文件。
这是因为,Docker镜像是分层架构,在一层添加的文件在二层不能删除,如果不需要该文件,我们必须在同一层删除它。
即使我们删除了下一层的文件,也不会有任何影响,因为该文件已经添加到最后一层,我们无法覆盖该层。
每个“RUN”命令都会为 docker 镜像创建一层。
构建一个 docker 镜像
docker build -t java:15 .
检查docker镜像的大小
运行以下命令来检查本地机器上可用的 docker 镜像
docker images
现在我们可以看到,docker 镜像的大小减小了。
从创建的图像创建一个 docker 容器并检查 java 版本
docker run --rm java:15 java -version
方法 3(最佳实践)
与方法 2 相同,但不是将所有命令都放在 Dockerfile 中,而是将命令放在 shellscript 文件中,将文件复制到 Dockerfile,然后运行 shellscript。
如果您想从 Dockerfile 本身处理所有内容,方法 2 会更好。
如果您想将大量逻辑放在单层中,请使用方法 3,如果命令较少,我们可以使用方法 2
创建一个 shellscriptbuild.sh
复制以下内容到build.sh
文件
#!/bin/bash
mkdir /opt/java
curl https://download.java.net/java/GA/jdk15.0.2/0d1cfde4252546c6931946de8db48ee2/7/GPL/openjdk-15.0.2_linux-x64_bin.tar.gz | tar -xz -C /opt/java/
创建一个 Dockerfile
FROM centos:8
ENV PATH=$PATH:/opt/java/jdk-15.0.2/bin
COPY build.sh .
RUN chmod +x build.sh && \
./build.sh
方法四
不过,如果我们想减小图像大小,我们可以将alipne
其用作基础图像。alpine 是非常轻量级的基础图像。
创建一个 Dockerfile 并复制以下内容
FROM alpine:latest
ENV PATH=$PATH:/opt/java/jdk-15.0.2/bin
RUN apk add --no-cache curl && \
mkdir /opt/java && \
curl https://download.java.net/java/GA/jdk15.0.2/0d1cfde4252546c6931946de8db48ee2/7/GPL/openjdk-15.0.2_linux-x64_bin.tar.gz | tar -xz -C /opt/java/
构建一个 docker 镜像
docker build -t java-approach-4 .
检查docker镜像的大小
docker images
现在我们可以看到,docker 镜像的大小减小了很多。