首页 > 解决方案 > 代码部署问题(运行时拉取代码)

问题描述

我有一个关于代码部署的问题。

我的团队曾经制作一个 Docker 镜像来共享多个应用程序。例如,一个 Docker 映像只有几个应用程序的依赖项,当我从该映像运行容器时,我会“git clone”我想要从 Github 部署的代码。

我认为这不是使用 Docker 的正确方法。所以我问了一下,听说“是的,这不是使用 Docker 的好方法。在此之前,谷歌关于'在运行时拉代码'”。但是当我用谷歌搜索它时,没有足够的结果。

由于我的团队过去常常通过“git clone”部署许多应用程序,即使不使用 Docker,我真的很想知道为什么在运行时拉代码不好。

“为什么在运行时不好时拉代码?”

标签: dockergithubdeploymentgit-clone

解决方案


想象一下,每次您想询问或回答 Stack Overflow 问题时,您都需要下载 Chrome 的源代码并从源代码重新编译。这显然需要很长时间;有时网络或远程服务器出现故障,下载源失败;它实际上不是 Chrome,它是您的私有分支,因此您需要在每次运行它时重新输入您的 GitHub 密码,或者将该密码保存在某个地方。所以你不这样做,你编译应用程序一次,然后运行编译的二进制文件。

Docker 就是这样:一个镜像是一个自包含的对象,它包含一个应用程序、它的语言运行时以及它的所有依赖项。您可以直接docker run启动它,而无需提取代码或联系远程服务器。

这样做的缺点是每次更改代码时都需要重建图像。无论如何,这对于各种通用语言环境(C、C++、Java、Go、Rust、通过 Typescript 或 Webpack 的 Javascript)来说都是非常常规的,这是您的连续集成(自动构建)系统可以非常简单地完成的一个步骤。典型的做法是在每次提交到源代码系统时构建一个新镜像,并且只部署构建的独立镜像。

还值得注意的是,Docker 是一项相对较新的技术,不需要使用它。如果您的工作流基于使用 Ansible 或 Chef 之类的工具将语言运行时部署到生产系统,使用不需要构建步骤的解释型语言(Python、Ruby、纯 Javascript)并直接提取源代码来自源代码控制系统,如果它有效,您绝对可以继续使用它。


推荐阅读