首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Dockerfile应该使用哪个代码库呢?

Dockerfile应该使用哪个代码库呢?
EN

Stack Overflow用户
提问于 2019-08-11 18:16:10
回答 2查看 1.2K关注 0票数 1

长话短说

我应该在哪里提交Dockerfile?在项目代码库中还是在devops代码库中?

推理细节:

没有码头也没有CI

在古代,当开发一个具有多个代码库的复杂应用程序时,通常希望每个项目都有一个repo,并将所有密码、凭据和dev/test/pre/prod配置与代码分离。

代码语言:javascript
运行
复制
+-----------------------------------------------------------------------+
|                                                                       |
|  +---------+       +---------+       +---------+       +---------+    |
|  |  app-1  |       |  app-2  |       |  app-3  |       |  app-4  |    |
|  +---------+       +---------+       +---------+       +---------+    |
|                                                                       |
|                            +----+                                     |
|                            |    |\                                    |
|                            |    +-+                                   |
|                            | conf |                                   |
|                            | files|                                   |
|                            +------+                                   |
|                                                                       |
+-----------------------------------------------------------------------+

在古代,一个sysadmin在服务器上安装了软件,然后复制了配置文件。回到90年代,sysop通常将这些文件放在自己的目录中,只与老板共享。

有CI但仍然没有码头

稍后,我们改进了循环:在连续开发/集成环境中,“系统”本身需要能够克隆所有这些repos,并能够“构建”应用程序,并将它们配置为可以运行。然后将构建复制到服务器并相应地配置它们。

这使得所有开发人员都能够在生产中触发部署,但仍然不会泄露秘密密钥。

在容器之前,通常情况下,公司有一个额外的"devops“(AKA回购),我们有所有这些配置文件的组织和脚本知道。CI服务器(预对接者)知道所有源代码回复,知道目的地-网络拓扑结构,有云密码,复制/构建/部署其目的地中的所有东西,并配置它,这样就没有必要在服务器启动和运行的情况下进行人工干预。

代码语言:javascript
运行
复制
+-----------------------------------------------------------------------+
|                                                                       |
|  +---------+       +---------+       +---------+       +---------+    |
|  |  app-1  |       |  app-2  |       |  app-3  |       |  app-4  |    |
|  +---------+       +---------+       +---------+       +---------+    |
|                                                                       |
|                          +----------------+                           |
|                          |     devops     |                           |
|                          +----------------+                           |
|                          | config-1-devel |                           |
|                          | config-1-pre   |                           |
|                          | config-1-prod  |                           |
|                          | config-2-devel |                           |
|                          |      [...]     |                           |
|                          | config-4-prod  |                           |
|                          +----------------+                           |
|                                                                       |
+-----------------------------------------------------------------------+

CI与码头

当要让docker在等式中发挥作用时,我想知道Dockerfile的正确位置是在应用程序CVS存储库中还是在devops存储库中。

Dockerfile会进入应用程序代码库吗?

除非我们做一个需要在许多平台上运行的开源代码,否则公司通常会建立一个目标平台,而编码者“知道”目标系统将是Ubuntu,或者CentOs之类的。

另一方面,现在编码人员将Dockerfile作为moe源代码文件来处理。这促使我们认为Dockerfile适合于每个代码库,因为应用程序和它运行的系统可能会因需要某些需求而结合在一起。

代码语言:javascript
运行
复制
+-----------------------------------------------------------------------+
|                                                                       |
| +-------------+   +-------------+   +-------------+   +-------------+ |
| |    app-1    |   |    app-2    |   |    app-3    |   |    app-4    | |
| +-------------+   +-------------+   +-------------+   +-------------+ |
| |Dockerfile-1 |   |Dockerfile-2 |   |Dockerfile-3 |   |Dockerfile-4 | |   
| +-------------+   +-------------+   +-------------+   +-------------+ |
|                                                                       |
|                          +----------------+                           |
|                          |     devops     |                           |
|                          +----------------+                           |
|                          | config-1-devel |                           |
|                          | config-1-pre   |                           |
|                          | config-1-prod  |                           |
|                          | config-2-devel |                           |
|                          |      [...]     |                           |
|                          | config-4-prod  |                           |
|                          +----------------+                           |
|                                                                       |
+-----------------------------------------------------------------------+

或者Dockerfile会进入devops代码库(AKA,CI服务器代码库)吗?

但是,似乎程序员应该执行相同的代码行,例如,如果他正在编写web应用程序,尽管它是在apache、nginx或caddy服务器下运行的.因此,运行时的“分离”似乎应该被编码到devops代码库中:

代码语言:javascript
运行
复制
+-----------------------------------------------------------------------+
|                                                                       |
| +-------------+   +-------------+   +-------------+   +-------------+ |
| |    app-1    |   |    app-2    |   |    app-3    |   |    app-4    | |
| +-------------+   +-------------+   +-------------+   +-------------+ |
|                                                                       |
|                          +----------------+                           |
|                          |     devops     |                           |
|                          +----------------+                           |
|                          | Dockerfile-1   |                           |
|                          | Dockerfile-2   |                           |
|                          | Dockerfile-3   |                           |
|                          | Dockerfile-4   |                           |
|                          +----------------+                           |
|                          | config-1-devel |                           |
|                          | config-1-pre   |                           |
|                          | config-1-prod  |                           |
|                          | config-2-devel |                           |
|                          |      [...]     |                           |
|                          | config-4-prod  |                           |
|                          +----------------+                           |
|                                                                       |
+-----------------------------------------------------------------------+

在团队中,我们不能明确正确的方式,我已经搜索过了,但是我无法找到说明不同的Dockerfile应该被提交到应用程序repos或devops (AKA回购)的文档。

我该在哪里把他们交出来?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-08-19 03:12:21

将Dockerfile放入应用程序代码库

也许,如果组织中有一些不标准化的应用程序,或者同一公司中有多种不同策略的语言,那么Dockerfile应该位于存储库级别,以允许直接修改。

但是,如果我们谈论的是几十个/数百个微型服务,会发生什么呢?

在这种情况下,开发人员不应该修改Dockerfile,因为它以前是由架构师、技术主管或高级开发人员开发的

让我们设想一个Dockerfile、entrypoint.sh和其他必需的文件,它们是数十个具有相同性质的应用程序的基础,比如同一个组织中的java微服务。下面是一些需要考虑的问题,如果Dockerfile已经进入了代码库:

  • 如果您需要更改这个Dockerfile中的某些内容,则必须在每个git存储库中进行更改。
  • 您必须付出额外的努力来验证开发人员没有破坏这个Dockerfile,因为对于所有其他微服务都是一样的。我们能想象几十个具有不同Dockerfile的微服务吗?我的意思是每个微服务都有自己的架构吗?
  • 如果所有的微服务都需要一个用于构建docker的公共文件,那么您必须将该文件放入每个git存储库中!示例: ssh-key、令牌、脚本、工件下载密钥等。

将Dockerfile放入devops代码库

我的建议,基于我的几十个申请,正是你提到的。这里有一些优点:

  • 只有一个Dockerfile为我的所有微服务(例如)。
  • 如果我需要升级或修复某些东西,我只需要更改一个Dockerfile,而不需要更改其他任何文件。
  • 开发人员可以看到和理解这个Dockerfile,但是永远不会破坏它。

C.I平台

如果您选择将Dockerfile放到devops代码库中,而不是在您的组织中的每个git存储库中,您必须开发如下所示的流:

  • 开发人员将代码推送到git存储库。
  • C.I平台接收通知
  • C.I平台克隆应用程序git存储库
  • C.I平台克隆devops代码库,其中包含组织的所有Dockerfile
  • C.I平台确定应用程序的性质,选择正确的Dockerfile和其他文件,如entry-point.sh等。
  • C.I平台将Dockerfile复制到应用程序源代码根文件夹。
  • C.I平台执行码头构建.
  • C.I平台执行一个码头推送.如果您有一个私人码头注册(推荐)
  • 最后,C.I平台在任何远程服务器(之前安装了对接器)中执行对接者映像的实例化(docker运行)。

我可以推荐你詹金斯,因为它使用方便

配置文件

如果可能的话,我建议您不要在应用程序的构建阶段使用复杂的文件。开放源码技术可以很好地做到这一点,但是如果您使用的是一些专有语言,那么您就需要:S。

无论如何,如果在构建阶段需要配置文件,可以使用:

票数 3
EN

Stack Overflow用户

发布于 2019-08-12 09:32:58

我建议将它保存在您的应用程序中,因为它应该随着代码库的发展而发展。IMHO的最佳实践是在应用程序中保留CI代码和配置,而不是单独的回购,这样您就不必管理应用程序代码版本和配置之间的依赖关系。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57452441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档