java - 每个 Docker 镜像都应该包含一个 JDK 吗?

所以,我对 Docker 很陌生。让我解释一下这个问题的背景。

  1. 我有 10 到 20 个 Spring Boot 微服务应用程序,每个应用程序运行在我本地机器的不同端口上。

  2. 但是要迁移到 Docker,根据我的学习,每个服务必须在不同的 Docker 容器中,以便快速部署或复制。

  3. 对于每个 Docker 容器,我们需要创建一个新的 Docker 镜像。

  4. 每个 Docker 镜像都必须包含一个 JRE,以便 Spring Boot 应用程序运行。最大约为 200 MB。这意味着每个 docker 镜像最大为 350 MB。 另一方面,在我的本地 PC 上,我只有一个 200 MB 的 JRE,每个应用程序只占用几 MB 的空间。

  5. 基于此,我的本地系统需要 600 MB,但所有 Docker 镜像需要 7 GB。

这种方法正确吗? DockerHub 中的“OpenJDK”是否应该添加到每个镜像中?

为什么目标PC可能已经安装了JDK,但是镜像还是很大?

最佳答案

你的理解不正确。

Docker 镜像是由层组成的;见下图:

当你在你的镜像中安装了一个JRE,假设它的校验和是下一张图片中的91e54dfb1179,它确实会占用你的磁盘。

但是,如果你所有的容器都基于同一个镜像,并添加不同的东西,比如你的不同微服务应用程序到瘦 R/W 层,所有容器将共享 91e54dfb1179 ,所以不会是n*m关系。

您需要注意尽可能为所有Java应用程序使用相同的基础镜像,并在瘦R/W层添加不同的东西。

https://stackoverflow.com/questions/52849139/

相关文章:

docker - 如何增加 kubernetes 容器的 shm 大小(--shm-size 相当于

amazon-web-services - 如何将 Kubernetes 日志发送到 AWS Clo

docker - 中间容器是如何形成的?

windows - docker 警告 : failed to get default regist

python - 为什么人们在 docker 容器中创建 virtualenv?

string - docker-compose.yml invalid : app. build c

docker - 使用 docker-compose 设置容器时区

docker - 从 Dockerfile 构建时如何访问本地文件?

php - 如何在不终止 docker 容器的情况下重新启动 apache2?

mysql - 使用 docker-compose 来创建 MySQL 模式/数据库