dockerhub从单个存储库自动构建,单个dockerfile构建多个映像

时间:2018-08-21 10:50:36

标签: docker docker-compose dockerhub

我在github上有一个git仓库,

  • 一个Dockerfile,可构建多个旨在一起使用的映像。 (maven构建会通过从工件存储库中下载然后通过下载生成war文件和sql文件;然后,多阶段构建会创建带有war的苗条tomcat映像和预加载了sql数据的苗条mysql映像。)

  • 一个docker-compose.yml文件,该文件使用“目标”指令在多阶段构建的映像上构建并运行容器。

这在开发期间效果很好。但是它迫使用户在他们的计算机上构建图像。我希望用户只能下载图像。设置还应该使用dockerhub的自动构建,以使图像保持最新。

如何设置它以实现这一目标?我给用户哪些命令或文件,以允许他们下载图像并运行容器?如果不可能,我该怎么做才能做到(拆分存储库?复制粘贴dockerfile?将中间映像发布到dockerhub并确保正确的构建顺序?不要使用dockerhub的自动构建?)

2 个答案:

答案 0 :(得分:2)

要使用Instant.ofEpochMilli(m),您需要为每个Dockerfile构建一个映像,并具有一个dockerhub's automated builds。映像名称来自源存储库名称(以github org / user名称作为docker映像用户名,以github repo名称作为docker映像名)。多阶段构建在自动构建中工作,但是每个Dockerfile仅发布一个映像(构建的最终映像)。

您可以在CI中甚至在本地计算机上构建映像,然后推送到dockerhub。您只需要在dockerhub上拥有一个帐户,然后在使用Dockerfile per repo时登录该帐户。进行此推送时,不必映射到GitHub存储库,但您的映像名称应以<dockerhub_user>/开头,作为前缀(在docker push command进行解释)。可以使用其他名称构建它们,因为您可以在推送之前通过重新标记来重命名。这样,您还可以根据需要构建图像。

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

答案 1 :(得分:1)

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

Automated builds是部署映像的便捷方法。

这部分很简单。您将需要使用Docker Hub和Github的帐户。您可以免费注册这些帐户。

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

建议:

  • Split your services放入单独的Dockerfile中。理想情况下,您应该使用单独的存储库:Docker Compose将在最后将它们组合在一起。如果有人要实施例如云数据库后端进行部署。
  • 不要将数据库文件存储在容器内。 Containers should be ephemeral
  • 要获得可靠的设计,请test your builds

使用build hooks,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_push上的钩子添加其他标签。这样,每个标签应该会将用户链接到同一张图片。例如

    #!/usr/bin/env bash
    
    docker tag lutece/tomcat:master lutece/tomcat:latest
    docker push lutece/tomcat:latest
    
  • 此外,您可以使用构建钩子为图像添加build date and git commit之类的标签。

Deployment with Docker Compose

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

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