对于开发来讲,Windows 和 macOS 是更为常见和经常使用的系统,因此也颇有必要了解在 Windows 和 macOS 中使用 Docker 的方法。很幸运的是,Docker 的官方对这两个系统提供了强有力的支持,咱们能够很轻松的在这两个系统中运行 Docker。在这一小节中,咱们就来了解一下 Docker 在 Windows 和 macOS 中安装的方式以及运行的原理。docker
在大多数状况下,咱们的开发工做是在 Windows 或 macOS 这两个操做系统中进行的,既然 Docker 是咱们用来解决开发、测试到运维整条产品线的工具,天然支持这两个系统是不可或缺的功能。json
如同封装 Docker 为咱们提供了轻松的虚拟化运行环境同样,Docker 在 Windows 和 macOS 中的安装也是极易完成的。Docker 官方为 Windows 和 macOS 系统单独开辟了一条产品线,名为 Docker Desktop,其定位是快速为开发者提供在 Windows 和 macOS 中运行 Docker 环境的工具。windows
Docker Desktop 实现容器化与 Docker Engine 是一致的,这就保证了咱们在 Windows 和 macOS 中开发所使用的环境能够很轻松的转移到其余的 Docker 实例中,不论这个 Docker 实例是运行在 Windows、macOS 亦或是 Linux。api
Docker Desktop 产品线包含两个软件,也就是针对 Windows 系统的 Docker for Windows 和针对 macOS 的 Docker for Mac。安全
在安装 Docker for Windows 和 Docker for Mac 以前,咱们依然要了解一下两款软件对操做系统及软硬件的要求,只有达到了这些要求,咱们才能顺利的安装上 Docker for Windows 和 Docker for Mac。网络
对于 Windows 系统来讲,安装 Docker for Windows 须要符合如下条件:运维
对于 macOS 系统来讲,安装 Docker for Mac 须要符合如下条件:工具
另外,虚拟机软件 VirtualBox 与 Docker Desktop 兼容性不佳,建议在安装 Docker for Windows 和 Docker for Mac 以前先卸载 VirtualBox。测试
在确认系统可以支持 Docker Desktop 以后,咱们就从 Docker 官方网站下载这两个软件的安装程序,这里直接附上 Docker Store 的下载连接,供你们直接下载:网站
安装 Docker for Windows 和 Docker for Mac 的方法十分简单,按 Windows 或 macOS 常见的软件安装方式安装便可。
像 Linux 中同样,咱们要在 Windows 和 macOS 中使用 Docker 前,咱们须要先将 Docker 服务启动起来。在这两个系统中,咱们须要启动的就是刚才咱们安装的 Docker for Windows 和 Docker for Mac 了。
启动两个软件的方式很简单,咱们只须要经过操做系统的快捷访问功能查找到 Docker for Windows 或 Docker for Mac 并启动便可。
打开软件以后,咱们会在 Windows 的任务栏或者 macOS 的状态栏中看到 Docker 的大鲸鱼图标。
Docker for Windows 或 Docker for Mac 在启动时,这只大鲸鱼上的集装箱会一直闪动,这说明 Docker 程序正在部署 docker daemon 所须要的一些环境并执行 docker daemon 的启动。当集装箱再也不闪动,就说明 Docker 服务已经准备就绪,咱们就能够在 Windows 和 macOS 中使用 Docker 了。
Docker Desktop 为咱们在 Windows 和 macOS 中使用 Docker 提供了与 Linux 中几乎一致的方法,咱们只须要打开 Windows 中的 PowerShell 得到 macOS 中的 Terminal,亦或者 Git Bash、Cmder、iTerm 等控制台类软件,输入 docker
命令便可。
使用 docker version
可以看到 Docker 客户端的信息,咱们能够在这里发现程序运行的平台:
$ docker version Client: ## ...... OS/Arch: windows/amd64 ## ......
经过以前小节的介绍,咱们知道 Docker 的核心功能,也就是容器实现,是基于 Linux 内核中 Namespaces、CGroups 等功能的。那么大致上能够说,Docker 是依赖于 Linux 而存在的。那么问题来了,Docker Desktop 是如何实现让咱们在 Windows 和 macOS 中如此顺畅的使用 Docker 的呢?
其实 Docker Desktop 的实现逻辑很简单:既然 Windows 和 macOS 中没有 Docker 可以利用的 Linux 环境,那么咱们生造一个 Linux 环境就行啦!Docker for Windows 和 Docker for Mac 正是这么实现的。
因为虚拟化在云计算时代的普遍使用,Windows 和 MacOS 也将虚拟化引入到了系统自己的实现中,这其中就包含了以前咱们所提到的经过 Hypervisor 实现虚拟化的功能。在 Windows 中,咱们能够经过 Hyper-V 实现虚拟化,而在 macOS 中,咱们能够经过 HyperKit 实现虚拟化。
Docker for Windows 和 Docker for Mac 这里利用了这两个操做系统提供的功能来搭建一个虚拟 Linux 系统,并在其之上安装和运行 docker daemon。
除了搭建 Linux 系统并运行 docker daemon 以外,Docker Desktop 系列最突出的一项功能就是咱们可以直接经过 PowerShell、Terminal 这类的控制台软件在 Windows 和 macOS 中直接操做虚拟 Linux 系统中运行的 docker daemon。
实现这个功能得益于 docker daemon 对外提供的操做过程并非复杂且领域性强的 IPC 等方式,而是通用的 RESTful Api 的形式。也就是说,Docker Desktop 只要实现 Windows 和 macOS 中的客户端,就可以直接利用 Hypervisor 的网络支持与虚拟 Linux 系统中的 docker daemon 进行通信,并对它进行控制。
这其实就是咱们以前所提到 docker daemon 使用 RESTful Api 做为控制方式的优点体现了。
控制可以直接在主机操做系统中进行,给咱们使用 Docker Desktop 系列软件提供了极大的方便。除此以外,文件的挂载也是 Docker Desktop 所提供的大幅简化咱们工做效率且简化使用的功能之一。
以前咱们谈到了,Docker 容器中可以经过数据卷的方式挂载宿主操做系统中的文件或目录,宿主操做系统在 Windows 和 macOS 环境下的 Docker Desktop 中,指的是虚拟的 Linux 系统。
固然,若是只能从虚拟的 Linux 系统中进行挂载,显然不足以达到咱们的指望,由于最方便的方式必然是直接从 Windows 和 macOS 里挂载文件了。
要实现咱们所指望的效果,也就是 Docker 容器直接挂载主机系统的目录,咱们能够先将目录挂载到虚拟 Linux 系统上,再利用 Docker 挂载到容器之中。这个过程被集成在了 Docker Desktop 系列软件中,咱们不须要人工进行任何操做,整个过程已经实现了自动化。
Docker Desktop 对 Windows 和 macOS 到虚拟 Linux 系统,再到 Docker 容器中的挂载进行了实现,咱们只须要直接选择可以被挂载的主机目录 ( 这个过程更多也是为了安全所考虑 ),剩下的过程所有由 Docker Desktop 代替咱们完成。这相比于普通虚拟机软件进行挂载的过程来讲,彻底不能用百倍效率来比较了。
在咱们使用 Docker Desktop 系列以前,咱们还会简单修改其的一些配置,以便更好的合理搭配操做系统与 Docker Desktop 系列软件。
咱们能够经过 Docker for Windows 或 Docker for Mac 的大鲸鱼图标打开配置页面:在大鲸鱼弹出的菜单中选择 Settings ( Windows ) 或 Preferences ( macOS )。
打开 Docker for Windows 和 Docker for Mac 的配置页面后,咱们能够发现几个配置页面。这里我不逐一把每一个页面进行截图了,你们能够本身动手查看页面每一个页面的内容。
Docker for Windows 和 Docker for Mac 的配置项目较 Docker Engine 来讲要多上许多,这主要是由于 Docker Desktop 是 Docker Engine 的超集,因此其不只包含了 Docker Engine 的配置内容,还要包含诸如虚拟机实现等其余配置。
我这里抽出几个与 Docker 相关的关键配置,分别简单说明它们的做用:
在 Docker for Windows 的 Shared Drivers 面板,以及在 Docker for Mac 中的 File Sharing 面板中,包含了咱们以前提到的将本机目录挂载到 Hypervisor 里 Linux 系统中的配置。
在 Advanced 面板中,咱们能够调整 Docker 最大占用的本机资源。固然,更准确的说咱们是在调整虚拟 Linux 环境所能占用的资源,是经过这个方式影响 Docker 所能占用的最大资源。
在 Docker for Windows 的 Network 面板,以及在 Docker for Mac 中的 Advanced 面板中,咱们能够配置 Docker 内部默认网络的子网等内容。这个网络的做用以及更详细的内容,咱们会在之第 9 节中进行讲解。
在 Daemon 面板里,咱们能够直接配置对 docker daemon 的运行配置进行调整。默认状况下,在 Daemon 面板里只有 Insecure registries 和 Registry mirrors 两个配置,分别用来定义未认证镜像仓库地址和镜像源地址。
咱们能够点击切换按钮切换到 Advanced 模式,在这个模式下,咱们能够直接编辑 docker daemon 的 daemon.json 配置文件,实现更具体、完整的配置 docker daemon 的目的。
Docker Desktop 系列为咱们在 Windows 和 macOS 中使用 Docker 提供了巨大的便利,几乎让咱们能够在数分钟内搭建 Windows 和 macOS 中 Docker 的运行环境,并获得像 Linux 中使用 Docker 同样的体验。但 Docker Desktop 依然存在必定的局限性,其中最大的莫过于其对 Windows 和 macOS 的苛刻要求。虽然咱们提倡保持操做系统的更新换代,以获得最新的功能以及更好的安全保障,但依然有不少状况下咱们不得不使用低版本的 Windows 和 macOS。对于这种状况,Docker 官方也提供了相应的解决方案。
首先,让咱们来聊聊为何 Docker for Windows 和 Docker for Mac 会对操做系统有如此严苛的要求。其实缘由很简单,刚才咱们谈到了,Docker for Windows 和 Docker for Mac 的实现分别依靠了 Windows 中的 Hyper-V 和 macOS 中的 HyperKit,而这两个虚拟化工具只在高版本的 Windows 和 macOS 系统中才提供出来。
既然知道了缘由,解决方案天然也就有了,既然咱们不能利用 Hyper-V 或 HyperKit 来建立虚拟的 Linux 系统,那就找一个可以替代它们的工具,用其建立虚拟 Linux 系统便可。
Docker 官方为咱们找到了用于搭建虚拟 Linux 系统的软件,即 Oracle 的 VirtualBox,并以此封装了另外一个集成的 Docker 运行环境软件:Docker Toolbox。
安装 Docker Toolbox 的过程也十分简单,下载安装包并按常规软件同样安装便可。这里直接我直接提供给你们 Docker Toolbox 安装包的链接,方便你们下载。
安装完 Docker Toolbox 后,咱们有几项与 Docker for Windows 和 Docker for Mac 不一样的使用方法须要注意。
因为不能很好的与系统以及 VirtualBox 互通结合,咱们启动、关闭、重启 Docker 服务不能彻底实现自动化,因此这里 Docker 为咱们提供了 Docker QuickStart Terminal 这个工具来处理这些过程。换个方式说,咱们必须经过它来启动和操做 Docker,而不能再直接使用 PowerShell、Terminal 这类软件了。
另一个不便之处就是文件系统的挂载,因为 Docker Toolbox 没法直接操做 VirtualBox 实现挂载,因此这个过程须要咱们人工来进行。整个挂载的方式与咱们以前谈到的同样,区别只是须要咱们手动操做。将本机目录挂载到虚拟 Linux 系统中的配置在 VirtualBox 的 Settings 中,咱们将本机须要挂载的目录配置进去并保存便可。