【问题标题】:Where to keep Dockerfile's in a project?将 Dockerfile 保存在项目中的什么位置?
【发布时间】:2014-12-09 20:05:29
【问题描述】:

我正在获取有关 Docker 的知识,我有以下问题

  • Dockerfile 保存在项目中的什么位置?
    • 它们是否与源一起保存?
    • 它们是否保留在源之外?您是否有自己的 Git 存储库仅用于 Dockerfile?

如果 CI 服务器应该为每个构建创建一个新镜像并在测试服务器上运行它,你会保留之前的镜像吗?我的意思是,您是在创建新图像之前标记之前的图像还是删除之前的图像?

我是一名 Java EE 开发人员,所以我会使用 Maven、Jenkins 等。

【问题讨论】:

标签: docker jenkins


【解决方案1】:

对 Dockerfile 保存位置的唯一限制是,您添加到映像中的任何文件都必须位于文件系统中的 Dockerfile 之下。我通常会在项目的顶层看到它们,尽管我有一个结合了一堆小图像的存储库,其中我有类似的东西

top/
  project1/
    Dockerfile
    project1_files
  project2/
    Dockerfile
    project2_files  

Jenkins docker 插件可以使用 Dockerfile 指向任意目录,所以这很容易。至于 CI,我见过的最常见的策略是将使用 CI 构建的每个图像标记为“最新”。如果您不向构建添加标签,这是默认设置。然后发布有自己的标签。因此,如果你只是运行一个不带参数的图像,你会得到 CI 构建的最后一个图像,但如果你想要一个特定的版本,很容易这么说。

【讨论】:

  • 但是你需要一个 Dockerfile 用于数据库,一个用于应用服务器,数据卷容器等等?你是怎么组织的?
  • 使用我上面的布局,您可以将组件作为子目录,然后使用 top/fig.yml 来启动和链接容器。
【解决方案2】:

我建议将 Dockerfile 与源文件一起保存,就像您使用 makefile 一样。

构建上下文问题意味着大多数 Dockerfile 都保留在或接近项目的顶层。您可以通过使用脚本或构建工具来复制 Dockerfile 或源文件夹来解决此问题,但这会有点痛苦。

我不知道有关标签和 CI 的最佳做法。使用 git hash 或类似的标签可能是一个很好的解决方案。您将希望至少保留一代旧图像以防需要回滚。

【讨论】:

  • 但是你需要一个 Dockerfile 用于数据库,一个用于应用服务器,数据卷容器等等?你是怎么组织的?
  • 您可以为数据库和数据容器使用相同的 Dockerfile。但是,是的,您要么必须将 Dockerfile 放在单独的目录中,要么使用构建工具来复制有关内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
相关资源
最近更新 更多