【发布时间】:2020-07-06 19:35:12
【问题描述】:
我使用 jib 插件创建镜像,而 docker-compose 需要 Dockerfile。我如何将已通过 jib 制作的图像链接到我的 docker-compose,以便它可以在进程中构建我的后端?
【问题讨论】:
标签: angular spring docker-compose dockerfile jib
我使用 jib 插件创建镜像,而 docker-compose 需要 Dockerfile。我如何将已通过 jib 制作的图像链接到我的 docker-compose,以便它可以在进程中构建我的后端?
【问题讨论】:
标签: angular spring docker-compose dockerfile jib
gradle jibDockerBuild && docker-compose up 是一个合理的解决方法。您只需要在docker-compose.yml 的image: 属性(而不是build:)中设置正确的图像名称。当您的应用程序没有更改时,jibDockerBuild 命令几乎是无操作的(除非将图像推送到 Docker 守护程序所需的时间)。当您进行更改时,Jib 将构建一个新图像,docker-compose 将使用它。当然,如果您不必通过 Jib 重建镜像,单独使用 docker-compose up 就足够了,它只会使用 Docker 守护进程缓存中的当前镜像。
另一种选择:如果您的图像很大并且您拥有不错的网络带宽,则使用gradle jib && docker pull <your image> && docker-compose up 向注册表(无论是本地还是远程)推送和拉取可能会更快。 (这是因为 Docker Engine API 与 Docker Registry API 相比功能有限;Jib 必须使用jibDockerBuild 将整个图像流式传输到 Docker 守护进程。
【讨论】:
jibDockerBuild,Jib 直接将图像推送到本地 Docker 引擎。它不会创建压缩包。假设你做了-Djib.to.image=example.com/foo/image。然后在你的docker-comose.yml 中,你只说image: example.com/foo/image 而没有build: .。 Docker Compose 将使用本地 Docker 引擎中的图像。如果你的 Docker 守护进程中不存在 example.com/foo/image,Docker Compose 将尝试从远程注册表下载它(并失败,因为服务器 example.com 没有图像)。
docker-compose.yaml。 spring-boot:build-image 是 Spring 构建图像的方式,不使用 Jib。 spring-boot:build-image 会产生一个非常低效的图像,因此在配置 Jib 时不应使用它。请改用 Jib 的 jib:build 或 jib:dockerBuild。