gradle docker 镜像的基本操作系统是什么?

时间:2021-01-16 10:02:53

标签: docker gradle virtual-machine

在我的 Dockerfile 中,我使用:FROM gradle:6.8.0-jdk11-hotspot

我知道每个 docker 容器都运行某种虚拟机。因此它必须有一些操作系统(之前我使用 Alpine 作为基础映像)。使用 Gradle 映像作为基础我不确定我的容器正在运行什么操作系统。我想这是一些标准,因为 gradle 图像的 Docker Hub 页面没有详细介绍,而且 gradle 本身不是操作系统。

在使用某些 docker 镜像作为基础时,如何确定它们的操作系统?

2 个答案:

答案 0 :(得分:1)

您可以尝试拉取映像,运行它,然后使用 some of the commands/steps for knowing what Linux version you are using

<块引用>

使用以下命令获取更多详细信息:

  1. cat /etc/*release*
  2. uname -a
$ docker pull gradle:6.8.0-jdk11-hotspot
...
Digest: sha256:13e62bd49f58d62c65672d6dfdcb79de3ffac01be8551f1d5cf44937c0776f86
Status: Downloaded newer image for gradle:6.8.0-jdk11-hotspot
docker.io/library/gradle:6.8.0-jdk11-hotspot

~$ docker run -it gradle:6.8.0-jdk11-hotspot bash
root@09e06441cc17:/home/gradle# 
root@09e06441cc17:/home/gradle# uname -a
Linux 09e06441cc17 4.19.121-linuxkit #1 SMP Tue Dec 1 17:50:32 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
root@09e06441cc17:/home/gradle# 
root@09e06441cc17:/home/gradle# cat /etc/*release*
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=20.04
DISTRIB_CODENAME=focal
DISTRIB_DESCRIPTION="Ubuntu 20.04.1 LTS"
NAME="Ubuntu"
VERSION="20.04.1 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04.1 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

它看起来像是基于 Ubuntu 20.04.1 LTS (Focal Fossa)。

您也可以尝试从 Dockerfile 中追踪基础镜像。

  1. gradle Dockerhub page 中,有指向每个图像标签的 Dockerfile 的链接。 6.8.0-jdk11-hotspot 通过此 FROM 行链接到 this Dockerfile
    FROM adoptopenjdk:11-jdk-hotspot
    
  2. adoptopenjdk Dockerhub page 中,我找不到 adoptopenjdk:11-jdk-hotspot 版本的 Dockerfile 的明确链接,但我认为它确实是 Ubuntu,如图像变体所述该 Dockerhub 页面上的部分: <块引用>

    其中一些标签可能有像焦点这样的名称。这些是 Ubuntu 发行版的套件代码名称,并指示映像基于哪个发行版。如果您的映像需要安装除映像附带的任何其他软件包,您可能需要明确指定其中之一,以在有新版本的 Ubuntu 时最大程度地减少损坏。

答案 1 :(得分:1)

您可以向上追踪 FROM 行,直到找到最终的基本图像。

  1. gradle:6.8.0-jdk11-hotspot's Dockerfile 有:

    FROM adoptopenjdk:11-jdk-hotspot
    
  2. adoptopenjdk:11-jdk-hotspot's Dockerfile 有:

    FROM ubuntu:20.04
    

    AdoptOpenJDK's documentation 说:

    <块引用>

    其中一些标签可能有像焦点这样的名称。这些是 Ubuntu 发行版的套件代码名称,并指示图像基于哪个发行版。如果您的映像需要安装除映像附带的任何其他软件包,您可能需要明确指定其中之一,以在有新版本的 Ubuntu 时最大程度地减少损坏。

  3. ubuntu's Docker Hub page 显示 20.04 是一个别名:

    <块引用>

    20.04focal-20201106focallatest


<块引用>

但是 Ubuntu 是不是有点不好用,因为它有点大?使用 Alpine 作为基础并手动安装 gradle 是否更有意义(空间方面)?

是的,Ubuntu 是一个大型基础映像。 AdoptOpenJDK 是否需要它,或者他们是否出于方便而使用它?也许 Alpine 缺少他们需要的东西;也许他们需要 glibc 并且不能使用 Alpine 的 musl 替代品;也许他们现在不能改变它,因为下游图像依赖于 Apt。我不知道。