我在github上有一个git仓库,
一个Dockerfile,可构建多个旨在一起使用的映像。 (maven构建会通过从工件存储库中下载然后通过下载生成war文件和sql文件;然后,多阶段构建会创建带有war的苗条tomcat映像和预加载了sql数据的苗条mysql映像。)
一个docker-compose.yml文件,该文件使用“目标”指令在多阶段构建的映像上构建并运行容器。
这在开发期间效果很好。但是它迫使用户在他们的计算机上构建图像。我希望用户只能下载图像。设置还应该使用dockerhub的自动构建,以使图像保持最新。
如何设置它以实现这一目标?我给用户哪些命令或文件,以允许他们下载图像并运行容器?如果不可能,我该怎么做才能做到(拆分存储库?复制粘贴dockerfile?将中间映像发布到dockerhub并确保正确的构建顺序?不要使用dockerhub的自动构建?)
答案 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)
以下一些提示和链接可以帮助您解决问题:
这部分很简单。您将需要使用Docker Hub和Github的帐户。您可以免费注册这些帐户。
在Docker Hub上创建存储库时,可以将其链接到Github存储库以自动进行构建。
建议:
这部分有些棘手,因为我还没有找到最好的文档。如果拆分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
不幸的是,我没有完成这一部分,所以我无法确认如何使它工作。
使用Docker Hub中的存储库并运行docker-compose.yml,您的客户端可能只需要在docker-compose.yml文件所在的目录中运行docker-compose up
。 Docker Compose应该从Docker Hub提取图像。