dockerhub 使用单个 dockerfile 构建多个图像从单个 repo 自动构建
dockerhub automated build from single repo with single dockerfile building multiple images
我在 github 上有一个 git 存储库:
一个 Dockerfile,它构建多个旨在一起使用的图像。 (maven 构建通过从工件存储库下载然后生成 war 文件和 sql 文件;多阶段构建然后创建一个带有 war 和预加载 sql 数据的苗条 mysql 图像)。
a docker-compose.yml 文件,使用 "target" 指令构建和 运行 多阶段构建镜像上的容器.
这在开发过程中效果很好。但它迫使用户在他们的计算机上构建图像。我希望用户只能下载图像。该设置还应使用 dockerhub 的自动构建来保持图像最新。
我该如何设置才能实现这一目标?我给用户什么命令或文件允许他们下载图像和 运行 容器?如果不可能,我该怎么做才能让它成为可能(拆分存储库?复制粘贴 docker 文件?将中间图像发布到 dockerhub 并确保正确的构建顺序?不要使用 dockerhub 的自动构建 ?)
使用dockerhub's automated builds you would need to build one image per Dockerfile and have one Dockerfile per repo。图像名称来自源存储库名称(github org/user 名称作为 docker 图像用户名和 github 存储库名称作为 docker 图像姓名)。多阶段构建在自动构建中工作,但每个 Dockerfile 只发布一个图像(构建的最终图像)。
您可以在 CI 甚至本地机器上构建映像,然后推送到 dockerhub。您只需要在 dockerhub 上拥有一个帐户,并在使用 docker push
command. When doing this push there doesn't have to be any mapping to GitHub repos but your image names should start with <dockerhub_user>/
as a kind of prefix (explained at https://docs.docker.com/docker-hub/repos/ 时登录到该帐户。如果它们是以不同的名称构建的,那没关系,因为您可以在推送之前通过重新标记来重命名。通过这种方式,您还可以根据自己的喜好构建图像。
当您在 dockerhub 中有图像时,您可以使用 image: <dockerhub_user>/<dockerhub_image_name>:<tag>
格式在 docker-compose 文件中引用它们。当用户 docker-compose up
.
时,图像将自动拉取
这里有一些提示和 link 应该对您的情况有所帮助:
Automated builds 是部署图像的便捷方式。
这部分很简单。您需要具有 Docker Hub 和 Github 的帐户。您可以免费注册这些帐号。
当您在 Docker Hub 上创建存储库时,您可以 link 将其添加到 Github 存储库以自动构建。
建议:
- Split your services 到单独的 Docker 文件中。理想情况下,您应该使用单独的存储库:Docker Compose 会在最后将它们整合在一起。如果有人想实施例如服务部门,服务部门也会有所帮助。用于部署的云数据库后端。
- 不要将数据库文件存储在容器中。 Containers should be ephemeral
- 对于稳健的设计,test your builds。
Docker 使用 build hooks.
集线器自动构建非常灵活
这部分有点棘手,因为我还没有找到最好的文档。如果您拆分 Docker 文件,也可能没有必要。
我已经使用 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
处的挂钩来添加其他标签。这样每个标签 应该 link 用户使用相同的图像。例如
#!/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 up
docker-compose.yml 文件。 Docker Compose 应该从 Docker Hub 中提取图像。
我在 github 上有一个 git 存储库:
一个 Dockerfile,它构建多个旨在一起使用的图像。 (maven 构建通过从工件存储库下载然后生成 war 文件和 sql 文件;多阶段构建然后创建一个带有 war 和预加载 sql 数据的苗条 mysql 图像)。
a docker-compose.yml 文件,使用 "target" 指令构建和 运行 多阶段构建镜像上的容器.
这在开发过程中效果很好。但它迫使用户在他们的计算机上构建图像。我希望用户只能下载图像。该设置还应使用 dockerhub 的自动构建来保持图像最新。
我该如何设置才能实现这一目标?我给用户什么命令或文件允许他们下载图像和 运行 容器?如果不可能,我该怎么做才能让它成为可能(拆分存储库?复制粘贴 docker 文件?将中间图像发布到 dockerhub 并确保正确的构建顺序?不要使用 dockerhub 的自动构建 ?)
使用dockerhub's automated builds you would need to build one image per Dockerfile and have one Dockerfile per repo。图像名称来自源存储库名称(github org/user 名称作为 docker 图像用户名和 github 存储库名称作为 docker 图像姓名)。多阶段构建在自动构建中工作,但每个 Dockerfile 只发布一个图像(构建的最终图像)。
您可以在 CI 甚至本地机器上构建映像,然后推送到 dockerhub。您只需要在 dockerhub 上拥有一个帐户,并在使用 docker push
command. When doing this push there doesn't have to be any mapping to GitHub repos but your image names should start with <dockerhub_user>/
as a kind of prefix (explained at https://docs.docker.com/docker-hub/repos/ 时登录到该帐户。如果它们是以不同的名称构建的,那没关系,因为您可以在推送之前通过重新标记来重命名。通过这种方式,您还可以根据自己的喜好构建图像。
当您在 dockerhub 中有图像时,您可以使用 image: <dockerhub_user>/<dockerhub_image_name>:<tag>
格式在 docker-compose 文件中引用它们。当用户 docker-compose up
.
这里有一些提示和 link 应该对您的情况有所帮助:
Automated builds 是部署图像的便捷方式。
这部分很简单。您需要具有 Docker Hub 和 Github 的帐户。您可以免费注册这些帐号。
当您在 Docker Hub 上创建存储库时,您可以 link 将其添加到 Github 存储库以自动构建。
建议:
- Split your services 到单独的 Docker 文件中。理想情况下,您应该使用单独的存储库:Docker Compose 会在最后将它们整合在一起。如果有人想实施例如服务部门,服务部门也会有所帮助。用于部署的云数据库后端。
- 不要将数据库文件存储在容器中。 Containers should be ephemeral
- 对于稳健的设计,test your builds。
Docker 使用 build hooks.
集线器自动构建非常灵活这部分有点棘手,因为我还没有找到最好的文档。如果您拆分 Docker 文件,也可能没有必要。
我已经使用 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
处的挂钩来添加其他标签。这样每个标签 应该 link 用户使用相同的图像。例如#!/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 up
docker-compose.yml 文件。 Docker Compose 应该从 Docker Hub 中提取图像。