gpt4 book ai didi

git - 将 git 存储库添加到 docker 镜像(工作流最佳实践)

转载 作者:太空狗 更新时间:2023-10-29 14:06:34 25 4
gpt4 key购买 nike

我正在部署一个 nginx 实例。 dockerfile 以及 nginx 配置数据和 Web 应用程序位于我的 git 存储库中。对我来说,这似乎是一个 git 存储库:应用程序以及如何部署它。在Dockerfile中我想说(这个简化了一点,但重点是我不会)

COPY web-app /serving
COPY docker/site-conf /etc/nginx/sites-enabled/

我在哪里有这个目录结构:

my-git-root
web-app
...
docker
Dockerfile
build.sh
site-conf

问题至少部分是 docker 的上下文是 my-git-root/docker/。

本着不可变服务的精神,我希望容器具有 git 存储库的快照,而不是 apt-get 在容器中安装 git 并提取数据。但是我不知道如何进行这项工作,除非我将 docker 的东西分离到一个单独的 git 存储库,然后在每个构建上 git clone 网络应用程序——我宁愿不让任何人被诱惑 git pull in a live容器。

关于更合理的工作流程的建议?

最佳答案

"In the spirit of immutable services, ... pulling the data"

如果您在 dockerfile 中执行此操作,那么这会在容器创建时而不是运行时发生。因此,您的容器的每个版本都将具有特定版本的数据。如果您使用与网络应用程序存储库的发布标签相匹配的标签部署容器,那么您在每个容器中运行的网络应用程序版本将非常清楚。

"apt-get install'ing git"

您可以使用 github 的 http 接口(interface)在特定标签或提交哈希中下载 webapp 的 tarball,因此不会 pull 入最新的和可能损坏的 webapp。

In Dockerfile I want to say...

如果您将 dockerfile 移动到 git 存储库的根目录,您可以使用复制命令,如您所示,因为整个代码成为 docker 上下文的一部分。这是 docker repos 中的常见做法。

"Suggestions on a more sane workflow.."

我建议在它自己的 git 仓库中有一个通用的 nginx 容器,它不会在构建时复制 web-app/serving。从运行您的代码的主机将网络应用程序安装为一个卷。然后您可以使用任何方法(docker 外部)将当前代码状态获取到服务器上。您的 docker 容器可以在任何给定时间独立于代码状态。当您需要修复 nginx 设置而无需查找容器中的代码时,这将有所帮助。

有时您无法访问主机 fs,即如果您在 Amazon Elastic beanstalk 上运行。在那种情况下,我建议为上面提到的 nginx 容器使用相同的通用容器。然后在使用 with myNginx:version6 的 web-app 项目的根目录中有一个 dockerfile,并将 web-app 文件夹复制到正确的位置。可以使用 myApp:SomeVersion 部署此容器。通过这种方式,您将引入一个众所周知的 Nginx 容器,其中包含任何与部署相关的问题,以及使用您的代码进行版本控制的 myApp 容器。

有关于这些方法的讨论 here Solomon Hykes 在其中解决了这个问题。

关于git - 将 git 存储库添加到 docker 镜像(工作流最佳实践),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27318820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com