Dockerfile 生产/构建/调试/测试环境

2024-01-09

假设您有 Web 应用程序和一些工作流程执行器:

  • http-server(提供预构建资产文件)- 生产
  • 构建器(从源代码编译/捆绑 js/css/html)- 部署/开发
  • 调试器/构建器(动态地从源构建,添加 js 源映射)- 开发
  • selenium(运行测试)-集成测试

我们如何构建分层图像以使这些工作流程执行器最有效地工作?我所说的有效是指“运行最快,写入最少”。


答案可能很简单:只需创建 4 个Dockerfile一个依赖于另一个。

您可以添加一个卷来共享源部分的构建。问题是您是否希望结果资产包含在图像中或每次都从源构建它。

创建4个文件夹Dockerfile每一个。

生产

production/Dockefile:

FROM  # put server here
COPY  # put config here
# some other option
# volume sharing?

Build

build/Dockerfile:

# install dependencies
ADD # add sources here
RUN # some building script

Debug

debug/Dockefile:

# ideally, configure production or build image

Test

test/Dockefile:

FROM # import production
# install test dependencies
RUN # test runner

还有几种选择。 1.使用带有否定模式的.gitignore(或ADD?)

*
!directory-i-want-to-add
!another-directory-i-want-to-add

另外使用 docker 命令指定 dockerfiles 和上下文:

docker build -t my/debug-image -f docker-debug .
docker build -t my/serve-image -f docker-serve .
docker build -t my/build-image -f docker-build .
docker build -t my/test-image -f docker-test .

您还可以使用不同的 gitignore 文件。

  1. 安装卷 完全跳过发送上下文,只需在运行时使用安装卷(使用-v host-dir:/docker-dir).

所以你必须:

docker build -t my/build-image -f docker-build . # build `build` image (devtools like gulp, grunt, bundle, npm, etc)
docker run -v output:/output my/build-image build-command # copies files to output dir
docker build -t my/serve-image -f docker-serve . # build production from output dir
docker run my/serve-image # production-like serving from included or mounted dir
docker build -t my/serve-image -f docker-debug . # build debug from output dir
docker run my/serve-image # debug-like serving (uses build-image with some watch magic)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Dockerfile 生产/构建/调试/测试环境 的相关文章

随机推荐

  • 使用 SignalR 的 WCF 服务

    我有一个网络应用程序 仪表板上几乎没有图表 图表数据是在客户端调用 WCF 服务方法的 document ready 函数中获取的 我现在想要的是在我的应用程序中使用 SignalR 我对 SignalR 真的很陌生 我如何从 Signal
  • 如何进行内核线程通信?

    如何让内核模块中的线程进行通信 我正在编写一个内核模块 我的架构将使用三个需要通信的线程 到目前为止 我的研究使我相信唯一的方法是使用共享内存 声明全局变量 和锁定机制来同步线程之间的读 写 那里关于这方面的材料相当稀缺 我还有其他可以考虑
  • 当您的应用程序安装在 Android 上时,您可以运行 Intent 或脚本吗?

    例如 RPM 有 post postun pre preun 允许您编写在安装过程的不同阶段运行的脚本 我想做一些事情 比如在安装我的 Android 应用程序时创建和填充数据库 Ted 不 抱歉 这是明确不支持的
  • 将生成的进程的输出捕获到字符串

    背景 我正在开发一个程序 需要能够捕获stdout stderr以及程序的返回值 理想情况下 我希望将这些捕获到存储在对象内的字符串中 该对象保存过程的详细信息 我目前有一些代码 可以使用一些 在我看来 古老的 C 文件处理魔法将输出保存到
  • 向 AVM2 添加语言

    我对创建一种在 AVM2 上运行的语言很感兴趣 并且正在寻求从哪里开始的建议 我确实意识到这绝不是一项微不足道的任务 但我想尝试一下 至少在此过程中了解更多有关实现语言的知识 我一直在研究 ANTLR 并一直在阅读语言开发的语法问题 我正在
  • 我可以在循环内使用 useEffect 确保其尺寸恒定吗?

    我有一个功能性的 React 组件 更多的是非 React 对象的代理 如下所示 function ProxyComponent onEvent1 onEvent2 onEvent3 useEffect gt someObject on e
  • C# Windows 窗体自动关闭

    我有一个 Windows 应用程序 其中我的第一个 Windows 窗体是登录 成功登录后 必须打开 主页 表单 我在调试时看到 Home 表单 但是一旦代码进入 Home Designer cs 中的 Dispose 方法 我的应用程序就
  • Nodejs Express http 服务器如何处理并发请求?

    我正在构建一个 Node js 应用程序 并想了解如何处理并发请求 我构建了一个测试服务器 通过等待 10 秒来模拟高 CPU 负载 为了测试行为 我打开两个浏览器选项卡并同时刷新页面 const http require http con
  • Python:不同的空集列表

    我是一个Python新手 正在尝试为埃拉托斯特尼筛编写代码 为此 我必须初始化一个空集列表 我尝试这样做factors set 1001 但这会产生一个浅拷贝 我想要一个深拷贝 这样factors i and factors j 指向不同的
  • 如果我的应用程序是通过 ACTION_VIEW 启动的,我如何检索附加的数据?

    我已经让我的应用程序处理某种数据类型的 ACTION VIEW 意图 效果很好 我似乎无法弄清楚如何实际检测我的应用程序是否已以这种方式启动 以及如何获取附加数据 有人能指出我正确的方向吗 这是我的清单的摘录 如果有帮助的话
  • 将 XCTest 导入动态框架

    我有一个项目 我创建了一个动态框架 在框架本身 而不是框架的测试 内部 我有以下文件 import Foundation import XCTest public func assertThrowsException function th
  • 绘制包含 NaN 的 pandas 数据框

    我有来自三个不同 GPS 接收器的冰速 GPS 数据 数据位于 pandas 数据框中 索引为 Julian Day 从 2009 年初开始增量 这是数据的子集 主数据集有 3487235 行 R2 R7 R8 1235 000000 11
  • 如何在不使用扩展器的情况下将 WPF 工具栏绑定到我的 VM 中的集合

    我有一个 WPF 窗口 其中有ToolBar 我的虚拟机中有一组要绑定的对象 它们显示为按钮 但总是被推到扩展的下拉部分ToolBar 如何使这些按钮出现在标准部分ToolBar 我有以下 XAML
  • C# 从邮件附件中获取文件名

    我有一个简单的 C 应用程序 用于发送 SMTP 电子邮件 使用 System Net Mail 类 发送 通过电子邮件发送 MailMessage 对象后 我想遍历附件列表并删除与这些附件关联的原始文件 但是我很难找到与每个附件关联的完整
  • Flutter Web 应用程序在部署到 Firebase 托管后返回空白页面

    我已成功将我的 flutter Web 应用程序部署到 Firebase 托管 但是 当我访问链接时返回空白页面 这是我的 firebase json database rules database rules json firestore
  • Flutter:如何避免 ListView 动态滚动(或改变其物理特性)

    我有一个ListView https api flutter dev flutter widgets ListView class html小部件 我想允许它基于某些逻辑可滚动或不可滚动 NeverScrollable滚动物理 https
  • 对向量进行排序 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 当对递增时 如何按降序对向量对进行排序
  • 如何对包装字符串的枚举变体进行模式匹配? [复制]

    这个问题在这里已经有答案了 我有一个枚举 enum T A String 我想匹配此枚举的变量 但此代码不起作用 match t T A a gt println a T A b gt println b gt println someth
  • 角度材质 (8) S2591:找不到名称“require”

    我正在尝试将日期 时间记录到 javascript 控制台中 我收到的错误消息如下 是由下面的代码生成的 ETA 该代码确实有效 日期将发送到控制台 仅保留错误消息 Message src app kdc services customer
  • Dockerfile 生产/构建/调试/测试环境

    假设您有 Web 应用程序和一些工作流程执行器 http server 提供预构建资产文件 生产 构建器 从源代码编译 捆绑 js css html 部署 开发 调试器 构建器 动态地从源构建 添加 js 源映射 开发 selenium 运