0x00 概述

对于开发来说,Windows 和 macOS 是更为常见和常用的系统,所以也很有必要了解在 Windows 和 macOS 中使用 Docker 的方法。很幸运的是,Docker 的官方对这两个系统提供了强有力的支持,我们可以很轻松的在这两个系统中运行 Docker。在这一小节中,我们就来了解一下 Docker 在 Windows 和 macOS 中安装的方式以及运行的原理。

0x01 Docker Desktop

在大多数情况下,我们的开发工作是在 Windows 或 macOS 这两个操作系统中进行的,既然 Docker 是我们用来解决开发、测试到运维整条产品线的工具,自然支持这两个系统是不可或缺的功能。

如同封装 Docker 为我们提供了轻松的虚拟化运行环境一样,Docker 在 Windows 和 macOS 中的安装也是极易完成的。Docker 官方为 Windows 和 macOS 系统单独开辟了一条产品线,名为 Docker Desktop,其定位是快速为开发者提供在 Windows 和 macOS 中运行 Docker 环境的工具。

Docker Desktop 实现容器化与 Docker Engine 是一致的,这就保证了我们在 Windows 和 macOS 中开发所使用的环境可以很轻松的转移到其他的 Docker 实例中,不论这个 Docker 实例是运行在 Windows、macOS 亦或是 Linux。

Docker Desktop 产品线包含两个软件,也就是针对 Windows 系统的 Docker for Windows 和针对 macOS 的 Docker for Mac。

0x02 安装 Docker Desktop

在安装 Docker for Windows 和 Docker for Mac 之前,我们依然要了解一下两款软件对操作系统及软硬件的要求,只有达到了这些要求,我们才能顺利的安装上 Docker for Windows 和 Docker for Mac。

对于 Windows 系统来说,安装 Docker for Windows 需要符合以下条件:

  • 必须使用 Windows 10 Pro ( 专业版 )
  • 必须使用 64 bit 版本的 Windows

对于 macOS 系统来说,安装 Docker for Mac 需要符合以下条件:

  • Mac 硬件必须为 2010 年以后的型号
  • 必须使用 macOS El Capitan 10.11 及以后的版本

另外,虚拟机软件 VirtualBox 与 Docker Desktop 兼容性不佳,建议在安装 Docker for Windows 和 Docker for Mac 之前先卸载 VirtualBox。

在确认系统能够支持 Docker Desktop 之后,我们就从 Docker 官方网站下载这两个软件的安装程序,这里直接附上 Docker Store 的下载链接,供大家直接下载:

安装 Docker for Windows 和 Docker for Mac 的方法十分简单,按 Windows 或 macOS 常见的软件安装方式安装即可。

0x03 启动 Docker

像 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
## ......

0x04 Docker Desktop 的实现原理

通过之前小节的介绍,我们知道 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 作为控制方式的优势体现了。

0x05 主机文件挂载

控制能够直接在主机操作系统中进行,给我们使用 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 代替我们完成。这相比于普通虚拟机软件进行挂载的过程来说,完全不能用百倍效率来比较了。

0x06 配置 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 相关的关键配置,分别简单说明它们的作用:

6.1 文件系统挂载配置

在 Docker for Windows 的 Shared Drivers 面板,以及在 Docker for Mac 中的 File Sharing 面板中,包含了我们之前提到的将本机目录挂载到 Hypervisor 里 Linux 系统中的配置。

6.2 资源控制配置

在 Advanced 面板中,我们可以调整 Docker 最大占用的本机资源。当然,更准确的说我们是在调整虚拟 Linux 环境所能占用的资源,是通过这个方式影响 Docker 所能占用的最大资源。

6.3 网络配置

在 Docker for Windows 的 Network 面板,以及在 Docker for Mac 中的 Advanced 面板中,我们可以配置 Docker 内部默认网络的子网等内容。这个网络的作用以及更详细的内容,我们会在之第 9 节中进行讲解。

6.4 docker daemon 配置

在 Daemon 面板里,我们可以直接配置对 docker daemon 的运行配置进行调整。默认情况下,在 Daemon 面板里只有 Insecure registries 和 Registry mirrors 两个配置,分别用来定义未认证镜像仓库地址和镜像源地址。

我们可以点击切换按钮切换到 Advanced 模式,在这个模式下,我们可以直接编辑 docker daemon 的 daemon.json 配置文件,实现更具体、完整的配置 docker daemon 的目的。

0x07 低系统版本解决方案

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 系统即可。

0x08 Docker Toolbox

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 中,我们将本机需要挂载的目录配置进去并保存即可。

Docker学习笔记之在 Windows 和 Mac 中使用 Docker的更多相关文章

  1. docker学习笔记(一)—— ubuntu16.04下安装docker

    docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...

  2. docker~学习笔记索引

    回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...

  3. docker学习笔记-1

    docker学习笔记一:安装 mac安装docker docker官方文档上有这么一段话: Because the Docker daemon uses Linux-specific kernel f ...

  4. docker学习笔记(3)- 镜像

    简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...

  5. Docker学习笔记 — 配置国内免费registry mirror

    Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror

  6. docker学习笔记1 -- 安装和配置

    技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...

  7. Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...

  8. Docker学习笔记 - Docker容器内部署redis

    Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...

  9. Docker学习笔记之使用 Docker Compose 管理容器

    0x00 概述 通过之前的介绍,我们已经基本掌握了构建.运行容器的方法,但这还远远不够,由于 Docker 采用轻量级容器的设计,每个容器一般只运行一个软件,而目前绝大多数应用系统都绝不是一个软件所能 ...

随机推荐

  1. excel 常用法

    粘贴格式化数据 数据如下 206190 98604 20991 2807.20 236584 113705 24599 3268.68 272083 128111 29021 3721.33 2487 ...

  2. 利用yum升级Centos6的gcc版本,使其支持C++11

    下面的可以在centos6下工作,centos7下有问题.可能是因为centos下的scl我是拷贝的文件,没有完全验证centos6下肯定没问题. https://my.oschina.net/u/5 ...

  3. centos7安装Amber16 && AmberTools

    Centos7 安装amber16 1.准备下载好的amber(Amber16.tar.bz2)及tools(AmberTools16.tar.bz2)安装包: $ cd MySoftware_hom ...

  4. OEMCC 13.2 安装部署

    需求:安装部署OEM 13.2 环境:两台主机,系统RHEL 6.5,分别部署OMS和OMR: OMS,也就是OEMCC的服务端 IP:192.168.1.88 内存:12G+ 硬盘:100G+ OM ...

  5. 多表关联查询_resultMap_集合对象

    多表关联查询_resultMap_集合对象_N+1方式实现 package com.bjsxt.mapper; import java.util.List; import com.bjsxt.pojo ...

  6. 笔记 : win8系统中的VM虚拟机的Ubuntu搭建samba服务

    1. 环境准备 (此处使用root超级管理员帐户,执行命令时不用加sudo, 普通帐户需要前面加sudo):  (1)安装好Ubutun虚拟系统后,Ubuntu 的软件源配置文件是 /etc/apt/ ...

  7. Docker服务端和客户端

    Docker是一个客户端-服务端(c/s)的架构程序

  8. LeetCode21.合并两个有序链表

    将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...

  9. TensorFlow的封装

    TensorFlow是比较底层的深度学习API,TF-Slim.TFLearn.Keras和TensorLayer均尝试简化TensorFlow/Theano,它们对TensorFlow/Theano ...

  10. [3]windows内核情景分析--内存管理

    32位系统中有4GB的虚拟地址空间 每个进程有一个地址空间,共4GB,(具体分为低2GB的用户地址空间+高2GB的内核地址空间) 各个进程的用户地址空间不同,属于各进程专有,内核地址空间部分则几乎完全 ...