方法一

从官方网站下载 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

dockerfile 安装nfs dockerfile 安装tar_服务器

从创建的图像创建一个 docker 容器并检查 java 版本

dockerfile 安装nfs dockerfile 安装tar_java_02

 方法 2(最佳实践)

从官网下载openjdk 15 tar文件,解压并单层删除tar文件,设置路径为java binary。

创建一个 Dockerfile 并复制以下内容

FROM centos:8

ENV PATH=$PATH:/opt/java/jdk-15.0.2/bin

# 更新软件
RUN yum -y upgrade
# 安装中文包
RUN yum install -y kde-l10n-Chinese
# 重新安装glibc-common
RUN yum -y reinstall glibc-common
# 编译生成语言库
RUN localedef -c -f UTF-8 -i zh_CN zh_CN.utf8
# 设置语言默认值为中文,时区改为东八区
RUN echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8
#上面是中文语言包

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



dockerfile 安装nfs dockerfile 安装tar_运维_03

现在我们可以看到,docker 镜像的大小减小了。

从创建的图像创建一个 docker 容器并检查 java 版本

docker run --rm java:15 java -version

dockerfile 安装nfs dockerfile 安装tar_服务器_04

方法 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

dockerfile 安装nfs dockerfile 安装tar_运维_05

现在我们可以看到,docker 镜像的大小减小了很多。