docker - dockerhub 从单个 repo 自动构建,单个 dockerfile 构建多个图像
问题描述
我在 github 上有一个 git 存储库,其中包含:
一个 Dockerfile,它构建了多个要一起使用的图像。(一个 maven 构建通过从工件存储库下载然后生成一个 war 文件和 sql 文件;一个多阶段构建然后创建一个带有战争的苗条 tomcat 映像和一个带有预加载 sql 数据的苗条 mysql 映像)。
一个 docker-compose.yml 文件,它使用“target”指令在来自多阶段构建的图像上构建和运行容器。
这在开发过程中运行良好。但它迫使用户在他们的计算机上构建图像。我希望用户只能下载图像。该设置还应该使用 dockerhub 的自动构建来使图像保持最新。
我该如何设置它来实现这一目标?我给用户什么命令或文件以允许他们下载图像和运行容器?如果不可能,我该怎么做才能使它成为可能(拆分 repo?复制粘贴 dockerfile?将中间图像发布到 dockerhub 并确保正确的构建顺序?不要使用 dockerhub 的自动构建?)
解决方案
要使用dockerhub 的自动构建,您需要为每个 Dockerfile 构建一个镜像,并且每个 repo 有一个 Dockerfile。镜像名称来自源存储库名称(github org/user 名称作为 docker 镜像用户名,github repo 名称作为 docker 镜像名称)。多阶段构建在自动构建中工作,但每个 Dockerfile(构建的最终镜像)只发布一个镜像。
你可以在 CI 甚至本地机器上构建镜像,然后推送到 dockerhub。您只需要在 dockerhub 上拥有一个帐户,并在使用docker push
命令时登录到该帐户。执行此推送时,不必映射到 GitHub 存储库,但您的图像名称应<dockerhub_user>/
以某种前缀开头(在https://docs.docker.com/docker-hub/repos/中解释)。如果它们以不同的名称构建也没关系,因为您可以在推送之前通过重新标记来重命名。这样你也可以随心所欲地构建图像。
当您在 dockerhub 中有图像时,您可以在 docker-compose 文件中使用表单引用它们image: <dockerhub_user>/<dockerhub_image_name>:<tag>
。当用户这样做时,图像将自动被拉出docker-compose up
。
推荐阅读
- multithreading - Julia-Lang UndefVarError: loop_inner 未定义
- python - 如何从时钟进程 Heroku Flask 访问我的 PostgreSQL 数据库?
- dll - 尝试在 opencv4 Visual Studio 2019 中使用 gstreamer 时未发现 gstreamer-1.0-0.dll 错误
- python - SMOTE 关于数组问题的数据框
- python - 为什么 __future__.annotations (PEP 563) 没有向后移植到 python3.6?
- random - 如何随机更改圆圈的颜色?
- ruby - Ruby 可重复使用的地图块
- python - 同一网络架构的两种不同风格的 Tensorflow 实现会导致两种不同的结果和行为?
- node.js - 使用 google apis 更改 google 电子表格的访问权限
- puppet - Puppet 模块是否使用互联网安装软件?