出品丨Docker公司(ID:docker-cn)
编译丨小东
每周一、三、五晚6点10分 与您不见不散
说在前面
Docker 网络研讨会每一期内容都非常受欢迎。上个月,我们举办了一场与 Docker 和 Windows 容器相关的网络研讨会,本次网络研讨会从基础部分开始详细介绍了如何使用 Docker 平台(Docker EE 和 Docker Desktop)将现有的 .NET 应用进行现代化改造并将其迁移到云端。
您可以观看以下视频(约60分钟)了解整场网络研讨会的详细内容,其中包含了大量的演示示例,这些示例将为您展示如何使用 Docker for Windows 在容器中构建和运行 Windows 应用程序。
class="video_iframe" height="502.5" width="670" frameborder="0" data-src="http://v.qq.com/iframe/player.html?vid=f0627ljl416&width=670&height=502.5&auto=0" allowfullscreen="" data-vidtype="2" style="display: none; width: 670px !important; height: 502.5px !important;" data-vh="502.5" data-vw="670"/>
所有演示的示例代码、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
问:在 Windows 上会有Docker PowerShell cmdlet吗?
Docker 平台作为一个后台 Windows 服务运行,它公开了用于管理容器的 REST API。Docker 命令行可以与 API 进行对话,Microsoft 提供了一个 Docker PowerShell 模块,该模块可以与同一 API 进行对话。尽管 Microsoft 提供的 Docker PowerShell 模块可以与 API 对话,但我们还是建议使用 Docker 命令行,因为 Docker 命令行总是与 Docker 服务器保持同步更新的状态,反观 PowerShell 模块则需要一段时间才能进行更新。
问:您能在 Windows 容器上演示运行单元测试(MSTest)吗?
我曾在《拯救 .NET 开发者,用 Docker 将 .NET 应用进行现代化改造(一)》与《拯救 .NET 开发者,用 Docker 将 .NET 应用进行现代化改造(二)》两篇文章中演示过相关内容,您可以根据需要查看。在上述两篇文章中,我展示了用 Docker EE 对 .NET 应用进行持续集成/持续交付(CI/CD),并在容器中运行端到端测试。虽然在展示中我使用的是 NUnit,但它的原理与 MSTest 一样。同时,我也使用 SpecFlow 和 Selenium 来演示测试过程,它可以跨越多个容器运行整个应用程序。
问:我可以在 Linux 上运行 Windows 容器吗?
不可以。Windows 容器是使用主机的底层操作系统内核,因此您需要在 Windows Server 2016 (或Windows 10)上来运行 Windows 容器。同时,您还可以通过 Hyper-V 技术在 Windows 上运行 Linux 容器。
问:是否需要在 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 许可证)。
问:我有一个 .NET Core Web Api 和多个 CMS API。我要如何创建混合了 .NET 框架和 .NET Core 的容器?
您可以在一个容器内运行多个应用程序,但并不推荐您这样操作。您应该为应用的每个部分(例如 API 、 CMS 和 Web UI)构建单独的 Docker 镜像,并将它们分别运行在不同的容器中。这意味着您可以分别为每个部件进行升级、扩展和部署。来自 Microsoft 官方的 Windows Server Core 基础镜像包含了完整的 .NET 架构,并在 Nano 服务器上构建了一个 .NET Core 镜像。
问:是否所有的第三方安装程序都将在 Docker 容器中工作?
不一定,这要取决于安装程序。只要安装程序不依赖与 Windows UI,那么您就可以在 Dockerfile 中运行任何命令。如果您有一个可以无人参与运行的 MSI (即没有窗口弹出),那么它将使用标准的msiexec 命令在 Dockerfile 中正常运行。
问:如何处理依赖于更新容器注册表的容器化可执行文件?
这不是问题。每个容器都有自己的 Windows 注册表副本。如果您需要在 Dockerfile 文件部署期间或在容器运行时期间对注册表进行更改,它只会更新该容器的注册表,并且不会影响到其它容器。
问:容器是否可以在 Windows 上直接访问帧缓冲区和硬件?
目前不行。对主机硬件的访问是 Windows 容器与 Linux 容器没有完全对等的一个领域。但微软正在加大对 Windows Server 容器功能的投入 —— 在 Semi-Annual 1709 版本中有一些重大改进。届时,我们可以期待 Windows Server 2019 发布时带来的新功能!
点击下列标题,阅读更多干货
拯救 Java 开发者,用 Docker 将 Java 应用进行现代化改造(四)
Java 10 牵手 Docker,新特性完美解决服务器资源分配问题
只需简单两步,轻松缩减 Node.js 应用的镜像大小
再会 —— Solomon Hykes
如果本文对你有帮助,欢迎分享到朋友圈!获取更多Docker实用技巧,扫描下图二维码!