如何使用 Windows 容器进行软件测试?

Posted

技术标签:

【中文标题】如何使用 Windows 容器进行软件测试?【英文标题】:How can I use Windows Containers for Software Testing? 【发布时间】:2016-09-28 11:23:58 【问题描述】:

我试图弄清楚如何在 Windows 10 机器上进行一些软件测试,但我不确定我想做的事情是否可以使用 Docker 或其他一些技术。如果有人对这是否可能有任何建议,以及我需要什么技术来做到这一点,那就太好了,如果我知道我正朝着正确的方向前进,我很乐意去调查。

基本上我想构建一个容器,它使用我的主要 Windows 10 安装作为基础,但随后具有隔离的容器,它将:

外观和行为就好像它们是同一个 Windows 10 安装的一部分 在应用程序和文件夹结构方面与也在运行的其他容器隔离。我希望能够在容器中启动应用程序,使其能够访问主安装以及容器内的文件夹,然后将结果传递回主 Windows 安装。 能够重置回其原始映像状态,因此当我在未来某个时间启动容器时,安装到容器中的任何应用程序或文件都不存在。我想回到图像中定义的原始状态(可能只是一个文件夹结构,因为任何默认应用程序都将安装在基础 Windows 安装上)。

这有意义吗?我很想听听关于这是否可能的任何想法。我已经尝试了几天但没有运气,使用 Docker、Docker-Machine、Hyper-V 以及在线找到的博客/教程。

谢谢,

PH

【问题讨论】:

对所有选项都是。请使用适当的标题来解释您想要的内容。 什么可能吗?问题文本听起来像是对容器的一般概述。标题不应该是“如何使用 Windows 10 容器进行测试?” 使用快照创建虚拟机可能是您的朋友,但您也可以尝试沙盒:sandboxie.com @BJB​​lack 为什么?实际上,容器已经满足了所有要求,即容器的定义。虚拟机要重得多,而沙盒试图伪造容器,没有任何实际保证 我承认我对 Windows 容器不太熟悉,但是 Docker 对 Linux 上系统其余部分的访问非常有限(除非通过 -p、-v 等明确允许) )。如果 Windows 容器可以“看起来和行为就像它们是同一个 Windows 10 安装的一部分”,那么替代建议将被撤回。 @BJB​​lack 这不是 Docker 的工作方式,即使在 Linux 中也是如此。您可以进行很多修改,但这些都保留在容器内部中。这正是您在测试时想要的 【参考方案1】:

第一件事是 - 不,您不能使用 Windows 10 作为基础。您可以将 Windows 应用程序打包为 Docker 容器映像,但它们需要基于服务器操作系统 - Nano Server 或 Windows Server Core。您可以在 Windows 10 上从这些映像运行容器。

您的容器看起来和行为都不像只是在 Windows 10 上运行的应用程序。它们是孤立的单元,看起来更像独立的计算机 - 每个容器都有自己的(虚拟)IP 地址和文件系统。不过,您可以通过以下方式将容器与您的主机集成:

发布端口,以便主机的网络请求被路由到容器,例如当您浏览到 http://localhost:8080 时,您实际上可以从已发布端口 8080 的容器中获得响应; 使用卷将主机文件系统的一部分挂载到容器中,这样您的容器就可以读取和写入它认为是本地目录的内容,但这实际上是主机上的挂载目录,因此它的工作方式类似于网络共享。

Docker 镜像是快照 - 当您从镜像运行容器时,它将具有镜像在持久化时的状态。您可以更改容器中的内容,但这不会更改图像。杀死那个容器并从同一个镜像启动一个新容器,它会保持原来的状态。

我们在 Windows 上使用 Docker 处于早期阶段,但 Windows 10 quick start on MSDN 将帮助您入门,或者您可以查看我的博客以获取 running IIS in Docker on a Windows Server 2016 VM。

【讨论】:

感谢您迄今为止的所有反馈和建议。我现在将进一步调查。 @Panagiotis Kanavos - 很好,我已将帖子重命名,希望能更好地了解我正在寻找的信息。

以上是关于如何使用 Windows 容器进行软件测试?的主要内容,如果未能解决你的问题,请参考以下文章

如何使 Azure 应用服务容器崩溃

如何停止 gcloud 容器引擎集群

windows vc++ 如何使用 UniversalCRT_IncludePath 以及如何使其在 cl.exe 中工作

如何在不同的主机上运行测试容器

如何使用ssl设置Docker redis容器

如何保证 docker 后台进程重启,而不引起容器关闭