首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从单次回购到单文档自动生成多个映像

从单次回购到单文档自动生成多个映像
EN

Stack Overflow用户
提问于 2018-08-21 10:50:35
回答 2查看 2K关注 0票数 3

我在github上有一个git存储库,包含:

  • 一个Dockerfile,它构建多个要一起使用的图像。( maven构建生成一个war文件和sql文件,然后从工件存储库下载;然后多阶段构建创建一个带有war的瘦tomcat映像和一个带有sql数据预加载的瘦mysql映像)。
  • 使用“目标”指令在多阶段生成的图像上构建和运行容器的docker-compose.yml文件。

这在开发过程中工作得很好。但它迫使用户在自己的电脑上生成图像。我希望用户只能下载图片。安装程序还应该使用dockerhub的自动构建来保持图像的更新。

我如何设置它来实现这一点呢?我应该给用户什么命令或文件来允许他们下载图像和运行容器?如果这是不可能的,我能做什么使它成为可能(分裂回购?复制码头文件?将中间映像发布到dockerhub并确保正确的构建顺序?不要使用dockerhub的自动构建?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-21 16:47:49

要使用码头枢纽的自动构建,您需要每个Dockerfile构建一个映像,并有一个每个回购文件。图像名称来自源存储库名称( github /用户名作为坞映像用户名,github名称作为坞映像名)。多阶段构建在自动构建中工作,但每个Dockerfile只发布一个映像(构建的最终映像)。

您可以在您的CI中,甚至在您的本地机器上构建映像,然后推送到dockerhub。您只需要在dockerhub上有一个帐户,并在使用命令时登录到该帐户。在进行此推送时,不需要对GitHub repos进行任何映射,但是您的映像名应该以<dockerhub_user>/作为一种前缀(在https://docs.docker.com/docker-hub/repos/中解释)。如果它们是以不同的名称构建的,这是可以的,因为您可以在推送之前通过重新定位来重命名。通过这种方式,您也可以构建任何您喜欢的图像。

当您在dockerhub中有图像时,您只需使用表单image: <dockerhub_user>/<dockerhub_image_name>:<tag>在docker文件中引用它们。当用户执行docker-compose up时,图像将自动被拉出。

票数 2
EN

Stack Overflow用户

发布于 2019-02-05 07:05:14

以下是一些可以帮助您解决问题的提示和链接:

自动构建是一种部署映像的方便方法。

这部分很简单。你需要在码头集线器和吉特布的账户。您可以免费注册这些帐户。

当您在Docker上创建一个存储库时,您可以将它链接到您的Github存储库,以实现构建自动化。

建议:

  • 分头服务分成单独的Dockerfile。理想情况下,您应该使用单独的存储库: Docker将在最后将它们结合在一起。如果有人想要实现(例如,用于部署的云数据库后端),服务分工也会有所帮助。
  • 不要将数据库文件存储在容器中。容器应该是短暂的
  • 对于健壮的设计,测试您的构建

Docker自动化构建非常灵活,使用了建钩

这个部分有点棘手,因为我还没有找到最好的文档。如果拆分Dockerfile,也可能没有必要。

我已经使用hooks/build的钩子成功地创建了带有多个标记和目标的自动构建,但是在阅读了文档之后,您应该也能够使用hooks/post_build了。

您的钩子可以简单地构建正确的层并将标记推送到码头集线器。

对于您的存储库,应该如下所示:

代码语言:javascript
复制
#!/usr/bin/env bash

docker build --target lutece-mysql -t lutece/mysql .
docker push lutece/mysql

如果您最终使用了hooks/build,您可能需要构建最后一个目标作为最后一步。

建议:

  • 如果图像需要多个标记,请使用hooks/post_push上的钩子添加附加标记。这样,每个标记都应该将用户链接到同一个图像。例如: #!/usr/bin/env bash对接标记lutece/tomcat:master lutece/tomcat:最新的停靠推送lutece/tomcat:最新的
  • 此外,您还可以使用构建钩子将您的图像标记为像构建日期和git提交这样的东西。

用Docker组合进行部署

不幸的是,我还没有完成这个部分,所以我无法确定如何使它工作。

有了Docker中的存储库和一个工作的docker-compose.yml,您的客户端可能只需要在目录中运行带有docker-compose.yml文件的docker-compose up。码头组合应该从码头集线器拉出图像。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51947044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档