我们在会议结束时提出了很多问题,没有足够的时间来回答这些问题。以下是错过的问题。
问:你说你可以在你的笔记本电脑上运行你的投票应用程序,但它是Linux和Windows容器的混合体。这不会有用吗?
答:不,你不能在一台机器上运行Linux和Windows容器的混合体。您需要有一个运行Docker Swarm的集群,其中包含Linux和Windows服务器的混合体。示例投票应用程序具有不同的版本,因此它可以在所有Linux,全Windows或混合环境中运行。
问:使用Docker容器从源代码编译[你的应用程序]是什么?在这种情况下MSBuild?
答:是的,您编写了一个多阶段Dockerfile,其中第一阶段编译您的应用程序。该阶段使用已部署工具集的Docker镜像。Microsoft拥有.NET Framework SDK映像和.NET Core映像,还有其他平台(如Go和Maven for Java)的官方Docker映像。您可以构建自己的SDK映像并打包所需的任何工具。
问:如果群集中安装了遗留应用程序,我们如何使用Docker swarm或Kubernetes维护粘性会话?
答:您的群集节点上将有一个负载平衡器,因此流量可以进入任何服务器,然后您可以在该服务器上运行多个容器。Docker Swarm或Kubernetes都没有为开箱即用的容器提供会话亲和性,但你可以通过运行像Traefik这样的反向代理或者像Nginx这样的Kubernetes的会话感知入口控制器来实现。
问:在桌面上进行测试时,不同的操作系统要求如何工作?(例如,某些容器需要Linux,有些需要Windows,而Mac则用于开发)
答:容器非常有效,因为它们使用运行它们的主机的底层操作系统。这意味着Linux容器需要在Windows主机上的Linux主机和Windows容器上运行。Docker Desktop使这一切变得简单 - 它为您提供和管理Linux VM。Docker Desktop for Mac只允许您运行Linux容器,但Docker Desktop for Windows支持Windows和Linux。
问:IDE如何适应Docker(例如,确保所有开发团队成员都使用兼容的IDE配置)?
答:使用Docker从源代码编译和打包应用程序的好处在于人们使用的IDE无关紧要。当开发人员在本地测试应用程序时,他们将使用具有CI使用的相同构建脚本的Docker容器来构建和运行它。因此构建是一致的,团队不需要使用相同的IDE - 人们可以在同一个项目中使用Visual Studio,VS Code或Rider。
问:如何协调Windows容器的最佳方法?
答:现在只有Docker Swarm支持生产中的Windows节点。您可以将多个Windows服务器与Docker Swarm一起加入,或者使用Docker Enterprise配置混合的Linux-Windows群集。预计到2018年底,Kubernetes将支持Windows节点。
问:我是否需要管理程序来管理我的Docker环境运行的底层硬件?更好的是,使用Docker是否可以满足对VMware的需求?
答:Docker可以在裸机或VM上运行。生产Docker服务器只安装了最小的操作系统(比如Ubuntu Server或Windows Server Core)和Docker。
问:在容器中运行的SQL Server可以使用Windows身份验证吗?
答:是的。默认情况下,容器不是域加入的,但您可以使用凭据规范运行它们,这意味着它们可以使用组管理的服务帐户的凭据访问AD。
问:对于旧的Eclipse IDE依赖,在容器内构建/编译Java的任何建议吗?
答:您需要在没有任何IDE的情况下通过脚本构建应用程序。如果您可以迁移构建以使用Maven(例如),那么您可以在Dockerfile中使用Maven设置构建和打包。
问:那么,服务器必须拥有容器所需的所有应用程序?如果服务器没有容器需要的应用程序,会发生什么?
A.不,恰恰相反!Docker镜像是包含容器所需内容的包。因此,Docker镜像中的ASP.NET应用程序将安装.NET Framework,IIS和ASP.NET,并且您不需要在运行容器的服务器上安装任何这些组件。
问:如果您需要多种技术来运行应用程序,如何在单个包中创建支持它们的Docker镜像?如果您需要一个不易获得的特定技术堆栈呢?
答:您的应用程序映像需要安装应用程序的所有先决条件。您可以使用现有图像,如果它可以为您提供所需的一切或构建自己的图像。只要您可以编写脚本,就可以将其放在Dockerfile中 - 因此Windows Dockerfile可以使用Chocolatey来安装依赖项。
问:Docker如何决定哪些库/运行时将成为容器的一部分?它如何划分OS和其他运行时?
A. Docker没有决定。这取决于构建应用程序映像的人。目标是使您的应用程序实际需要的依赖项尽可能地使您的运行时映像尽可能小。这为您提供了更小的攻击表面区域,并缩短了构建和部署的时间。