Docker 老司机带路,亲授打造容器化 Windows 应用的正确姿势

Posted Docker公司

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 老司机带路,亲授打造容器化 Windows 应用的正确姿势相关的知识,希望对你有一定的参考价值。

出品丨Docker公司(ID:docker-cn)

编译丨小东

每周一、三、五晚6点10分  与您不见不散


说在前面


Docker 网络研讨会每一期内容都非常受欢迎。上个月,我们举办了一场与 Docker 和 Windows 容器相关的网络研讨会,本次网络研讨会从基础部分开始详细介绍了如何使用 Docker 平台(Docker EE 和 Docker Desktop)将现有的 .NET 应用进行现代化改造并将其迁移到云端。


Docker 老司机带路,亲授打造容器化 Windows 应用的正确姿势


您可以观看以下视频(约60分钟)了解整场网络研讨会的详细内容,其中包含了大量的演示示例,这些示例将为您展示如何使用 Docker for Windows 在容器中构建和运行 Windows 应用程序。



所有演示的示例代码、Dockerfiles 和 Docker Compose 文件都可以点击文尾处“阅读原文”获取。

&


以下是网络研讨会的重要问题回顾:


问:在容器中构建 SQL 数据库有哪些最佳实践或教程吗?我们如何解决数据持久性、数据库引用等问题呢?我们又将如何在容器中使用 SSDT 呢?


在容器中运行 SQL Server 就如同远程运行 SQL Server 一样 —— 您可以使用 SSDT 、 Visual Studio 、 VS Code 或任何 SQL 客户端进行连接。GitHub 上的 Docker 教程中有一个很好的 SQL Server 示例,它介绍了通过容器来完成构建和部署过程。在 Docker Platform Reference Architecture 中,有详细的存储解决方案


SQL Server 示例:

https://github.com/docker/labs/tree/master/windows/sql-server


存储解决方案:

https://success.docker.com/article/an-introduction-to-storage-solutions-for-docker-caas


Docker 老司机带路,亲授打造容器化 Windows 应用的正确姿势

问:在 Windows 上会有Docker PowerShell cmdlet吗?


Docker 平台作为一个后台 Windows 服务运行,它公开了用于管理容器的 REST API。Docker 命令行可以与 API 进行对话,Microsoft 提供了一个 Docker PowerShell 模块,该模块可以与同一 API 进行对话。尽管 Microsoft 提供的 Docker PowerShell 模块可以与 API 对话,但我们还是建议使用 Docker 命令行,因为 Docker 命令行总是与 Docker 服务器保持同步更新的状态,反观 PowerShell 模块则需要一段时间才能进行更新。

Docker 老司机带路,亲授打造容器化 Windows 应用的正确姿势


问:您能在 Windows 容器上演示运行单元测试(MSTest)吗?


我曾在《》与《》两篇文章中演示过相关内容,您可以根据需要查看。在上述两篇文章中,我展示了用 Docker EE 对 .NET 应用进行持续集成/持续交付(CI/CD),并在容器中运行端到端测试。虽然在展示中我使用的是 NUnit,但它的原理与 MSTest 一样。同时,我也使用 SpecFlow 和 Selenium 来演示测试过程,它可以跨越多个容器运行整个应用程序。


Docker 老司机带路,亲授打造容器化 Windows 应用的正确姿势


问:我可以在 Linux 上运行 Windows 容器吗?


不可以。Windows 容器是使用主机的底层操作系统内核,因此您需要在 Windows Server 2016 (或Windows 10)上来运行 Windows 容器。同时,您还可以通过 Hyper-V 技术在 Windows 上运行 Linux 容器。

Docker 老司机带路,亲授打造容器化 Windows 应用的正确姿势


问:是否需要在 Windows 10 和 Windows 2016 上安装特定的 Docker 版本?就像对于 Windows 10 的 Docker for Windows 和对于 Windows 2016 的 Docker EE 一样?


完全正确!Docker for Windows 是一个桌面版,您可以在 Windows 10 上使用它,它为开发者提供了很多额外的功能。在 Windows Server 2016 上运行 Docker EE,它将自带支持来自 Microsoft 和 Docker 容器的许可证(Windows Server 许可证包含了 Docker EE Basic 许可证)。

Docker 老司机带路,亲授打造容器化 Windows 应用的正确姿势


问:我有一个 .NET Core Web Api 和多个 CMS API。我要如何创建混合了 .NET 框架和 .NET Core 的容器?


您可以在一个容器内运行多个应用程序,但并不推荐您这样操作。您应该为应用的每个部分(例如 API 、 CMS 和 Web UI)构建单独的 Docker 镜像,并将它们分别运行在不同的容器中。这意味着您可以分别为每个部件进行升级、扩展和部署。来自 Microsoft 官方的 Windows Server Core 基础镜像包含了完整的 .NET 架构,并在 Nano 服务器上构建了一个 .NET Core 镜像。

Docker 老司机带路,亲授打造容器化 Windows 应用的正确姿势


问:是否所有的第三方安装程序都将在 Docker 容器中工作?


不一定,这要取决于安装程序。只要安装程序不依赖与 Windows UI,那么您就可以在 Dockerfile 中运行任何命令。如果您有一个可以无人参与运行的 MSI (即没有窗口弹出),那么它将使用标准的msiexec 命令在 Dockerfile 中正常运行。

Docker 老司机带路,亲授打造容器化 Windows 应用的正确姿势


问:如何处理依赖于更新容器注册表的容器化可执行文件?


这不是问题。每个容器都有自己的 Windows 注册表副本。如果您需要在 Dockerfile 文件部署期间或在容器运行时期间对注册表进行更改,它只会更新该容器的注册表,并且不会影响到其它容器。

Docker 老司机带路,亲授打造容器化 Windows 应用的正确姿势


问:容器是否可以在 Windows 上直接访问帧缓冲区和硬件?


目前不行。对主机硬件的访问是 Windows 容器与 Linux 容器没有完全对等的一个领域。但微软正在加大对 Windows Server 容器功能的投入 —— 在 Semi-Annual 1709 版本中有一些重大改进。届时,我们可以期待 Windows Server 2019 发布时带来的新功能!

Docker 老司机带路,亲授打造容器化 Windows 应用的正确姿势


点击下列标题,阅读更多干货



 


点击下方“阅读全文”,获取资料

以上是关于Docker 老司机带路,亲授打造容器化 Windows 应用的正确姿势的主要内容,如果未能解决你的问题,请参考以下文章

老司机带路:三万字超详细图文分析Git管理的使用流程和实例讲解,不怕你学不会,就怕你不学(欢迎三连加收藏)

使用Jenkins Pipeline插件和Docker打造容器化构建环境

docker容器开启sshd

老司机谈DevOps 2.0:引子

与Linux的第一夜

HotFix调研