所以,我对 Docker 很陌生。让我解释一下这个问题的背景。
我有 10 到 20 个 Spring Boot 微服务应用程序,每个应用程序运行在我本地机器的不同端口上。
但是要迁移到 Docker,根据我的学习,每个服务必须在不同的 Docker 容器中,以便快速部署或复制。
对于每个 Docker 容器,我们需要创建一个新的 Docker 镜像。
每个 Docker 镜像都必须包含一个 JRE,以便 Spring Boot 应用程序运行。最大约为 200 MB。这意味着每个 docker 镜像最大为 350 MB。 另一方面,在我的本地 PC 上,我只有一个 200 MB 的 JRE,每个应用程序只占用几 MB 的空间。
基于此,我的本地系统需要 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
windows - docker 警告 : failed to get default regist
python - 为什么人们在 docker 容器中创建 virtualenv?
string - docker-compose.yml invalid : app. build c
docker - 使用 docker-compose 设置容器时区
docker - 从 Dockerfile 构建时如何访问本地文件?