docker是一个开源项目,旨在将应用程序打包成可移植的、自给自足的容器,以便在云端或本地自动部署。docker同时也是一家公司,致力于推广和发展这项技术,并与云、linux和windows供应商(如微软)合作。
Docker在混合云的各个层面上部署容器。
Docker容器可以在任何地方运行,包括客户数据中心、外部服务提供商或云端,如Azure。Docker映像可以在Linux和Windows上本地运行。然而,Windows映像只能在Windows主机上运行,而Linux映像可以在Linux主机和Windows主机上运行(目前通过Hyper-V Linux VM实现),这里的主机指的是服务器或虚拟机。
开发人员可以在Windows、Linux或macOS上使用开发环境。在开发计算机上,开发人员运行Docker主机,部署Docker映像,包括应用程序及其依赖项。在Linux或macOS上工作的开发人员使用基于Linux的Docker主机,只能为Linux容器创建映像。(在macOS上工作的开发人员可以编辑代码或从macOS运行Docker CLI,但在撰写本文时,容器并不直接在macOS上运行。)在Windows上工作的开发人员可以为Linux或Windows容器创建映像。
为了在开发环境中托管容器并提供额外的开发工具,Docker为Windows或macOS提供Docker Community Edition(CE)。这些产品安装必要的虚拟机(Docker主机)来承载容器。Docker还提供Docker Enterprise版本(EE),该版本专为企业开发,供IT团队在生产环境中构建、发布和运行大型业务关键型应用程序时使用。
要运行Windows容器,有两种运行时类型:
Windows服务器容器通过进程和命名空间隔离技术提供应用程序隔离。Windows服务器容器与容器主机以及主机上运行的所有容器共享内核。Hyper-V容器通过在高度优化的虚拟机中运行每个容器来扩展Windows服务器容器提供的隔离。在此配置中,容器主机的内核不与Hyper-V容器共享,从而提供更好的隔离。这些容器的图像创建方式和功能相同。不同之处在于如何从运行Hyper-V容器的映像创建容器需要额外的参数。有关详细信息,请参见Hyper-V容器。
下图展示了虚拟机和Docker容器之间的比较。
虚拟机包括应用程序、所需的库或二进制文件以及完整的来宾操作系统。完全虚拟化需要比容器化更多的资源。