dockerhub使用单个dockerfile构建多个映像从单个回购自动构建

dockerhub使用单个dockerfile构建多个映像从单个回购自动构建,docker,docker-compose,dockerhub,Docker,Docker Compose,Dockerhub,我在github上有一个git存储库,其中包含: 一个Dockerfile,用于构建多个要一起使用的图像。(maven构建通过从工件存储库下载生成war文件和sql文件;多阶段构建然后创建带有war的细长tomcat映像和预加载sql数据的细长mysql映像) docker-compose.yml文件,它使用“target”指令在多阶段构建的映像上构建和运行容器 这在开发过程中效果很好。但它迫使用户在他们的计算机上构建图像。我希望用户只能下载图片。安装程序还应该使用dockerhub的自动构

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

  • 一个Dockerfile,用于构建多个要一起使用的图像。(maven构建通过从工件存储库下载生成war文件和sql文件;多阶段构建然后创建带有war的细长tomcat映像和预加载sql数据的细长mysql映像)

  • docker-compose.yml文件,它使用“target”指令在多阶段构建的映像上构建和运行容器

这在开发过程中效果很好。但它迫使用户在他们的计算机上构建图像。我希望用户只能下载图片。安装程序还应该使用dockerhub的自动构建来保持图像的最新

我如何设置它来实现这一点?我给用户什么命令或文件允许他们下载图像和运行容器?如果不可能,我可以做些什么使之成为可能(拆分repo?复制粘贴dockerfile?将中间映像发布到dockerhub并确保生成顺序正确?不使用dockerhub的自动生成?

要使用,您需要为每个dockerfile生成一个映像,并拥有一个映像。映像名称来自源存储库名称(github org/user name作为docker映像用户名,github repo name作为docker映像名称)。多阶段构建在自动构建中工作,但每个Dockerfile(构建的最终映像)只发布一个映像

您可以在CI中甚至在本地计算机上构建映像,然后推送到dockerhub。您只需在dockerhub上拥有一个帐户,并在使用时登录到该帐户即可。执行此推送操作时,不必映射到GitHub repos,但图像名称应以
/
开头,作为一种前缀(在中解释)。如果它们是以不同的名称构建的,这没关系,因为您可以在按下之前通过重新标记来重命名它们。这样,你也可以建立你喜欢的图像


当您在dockerhub中有图像时,您可以使用
image:/:
的格式在docker compose文件中引用它们。当用户进行
docker compose up

时,将自动提取图像。以下是一些提示和链接,可以帮助您解决此问题:

是部署映像的方便方法。 这部分很简单。您将需要Docker Hub和Github的帐户。你可以免费注册这些帐户

在Docker Hub上创建存储库时,您可以将其链接到Github存储库以自动化构建

建议:

  • 分为单独的Dockerfiles。理想情况下,您应该使用单独的存储库:Docker Compose将在最后将它们放在一起。如果任何人想要为其部署实施云数据库后端,服务部门也将提供帮助
  • 不要将数据库文件存储在容器中
  • 对于稳健的设计
Docker Hub自动化构建非常灵活,可以使用。 这部分有点棘手,因为我还没有找到最好的文档。如果拆分Dockerfile,也可能没有必要这样做

我已经在
hooks/build
上使用一个钩子成功地创建了具有多个标记和目标的自动构建,但是在阅读文档之后,您似乎也能够使用
hooks/post_-build

您的钩子可以简单地构建正确的层并将标签推送到Docker Hub

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

#!/usr/bin/env bash

docker build --target lutece-mysql -t lutece/mysql .
docker push lutece/mysql
如果您最终使用了
hooks/build
,那么您可能需要构建最终目标作为最后一步

建议:

  • 如果一幅图像需要多个标签,请使用
    hooks/post\u push
    上的钩子添加其他标签。这样,每个标签都应该将用户链接到同一个图像。e、 g

    #!/usr/bin/env bash
    
    docker tag lutece/tomcat:master lutece/tomcat:latest
    docker push lutece/tomcat:latest
    
  • 此外,您还可以使用构建挂钩为图像添加标签,例如
不幸的是,我还没有完成这一部分,所以我无法确认如何让它工作


使用Docker Hub中的存储库和一个工作的Docker-compose.yml,您的客户端可能只需要在包含Docker-compose.yml文件的目录中运行
Docker compose up
。Docker Compose应该从Docker Hub中提取图像。

如果它是公共的(我猜如果您正在查看Docker Hub,它是公共的),如果您可以链接到Docker文件,那就太棒了谢谢您的评论。Dockerfile和docker-compose.yml位于感谢分享。快速浏览一下,我想您可以将Dockerfile拆分为一个用于web应用程序的文件和一个用于db的文件(如果需要)。