将git存储库添加到Docker映像(工作流最佳实践)

杰玛

我正在部署一个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克隆每个构建版本上的Web应用程序,否则我看不到如何做到这一点-我什至不希望任何人都被git吸引住现场直播容器。

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

乌斯曼·伊斯梅尔(Usman Ismail)

“本着不变的服务精神,……获取数据”

如果您在dockerfile中执行此操作,则此操作会在容器创建时而不是运行时发生。因此,容器的每个版本都将具有特定版本的数据。如果您使用与您的Web应用程序回购的发布标签相匹配的标签来部署容器,则可以很清楚地看到每个容器中正在运行哪个版本的Web应用程序。

“ apt-get install'ing git”

您可以使用github的http界面在特定标记处下载Webapp的tarball或提交哈希,因此不会拖入最新的和可能已损坏的webapp。

我想在Dockerfile中说...

如果将dockerfile移动到git repo的根目录,则可以使用copy命令,因为整个代码已成为docker上下文的一部分。这是docker repos中的常见做法。

“有关更合理工作流的建议。”

我建议在其自己的git repo中有一个通用的nginx容器,该容器在构建时不会复制web-app / serving。从运行您的代码的主机将Web应用程序挂载为卷。然后,您可以使用任何方法(docker外部)将您当前的代码状态保存到服务器上。您的docker容器可以在任何给定时间独立于代码状态。当您需要修复nginx设置而不必寻找容器中的代码时,这将有所帮助。

有时您无法访问主机fs,即如果您在Amazon Elastic beantalk上运行。在那种情况下,我建议为我上面提到的Nginx容器使用相同的通用容器。然后在您的Web应用程序项目的根目录中有一个dockerfile,该with myNginx:version6文件使用并仅在正确的位置复制该Web应用程序文件夹。可以使用部署此容器myApp:SomeVersion这样,您就可以引入一个众所周知的Nginx容器,其中涉及所有与部署相关的问题,以及带有代码版本化的myApp容器。

有一个关于这些方法的讨论在这里在所罗门Hykes解决了这个问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章