Docker学习笔记之在 Windows 和 Mac 中使用 Docker
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 ( store.docker.com/editions/co… )
- Docker for Mac ( store.docker.com/editions/co… )
安装 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 for Windows ( download.docker.com/win/stable/… )
- Docker Toolbox for Mac ( download.docker.com/mac/stable/… )
安装完 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的更多相关文章
- docker学习笔记(一)—— ubuntu16.04下安装docker
docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...
- docker~学习笔记索引
回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...
- docker学习笔记-1
docker学习笔记一:安装 mac安装docker docker官方文档上有这么一段话: Because the Docker daemon uses Linux-specific kernel f ...
- docker学习笔记(3)- 镜像
简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...
- Docker学习笔记 — 配置国内免费registry mirror
Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror
- docker学习笔记1 -- 安装和配置
技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...
- Docker学习笔记之一,搭建一个JAVA Tomcat运行环境
Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...
- Docker学习笔记 - Docker容器内部署redis
Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...
- Docker学习笔记之使用 Docker Compose 管理容器
0x00 概述 通过之前的介绍,我们已经基本掌握了构建.运行容器的方法,但这还远远不够,由于 Docker 采用轻量级容器的设计,每个容器一般只运行一个软件,而目前绝大多数应用系统都绝不是一个软件所能 ...
随机推荐
- SOA架构大概思路
1.创建父工程(pom)管理jar包版本 2.创建子工程common工程(jar)管理通用工具类.通用pojo 3.创建服务层工程(聚合工程(pom)) 3.1.创建模块(dao.pojo.inter ...
- JS 8-3 prototype属性
动态修改Student.prototype的属性时,会影响已创建或将要创建的实例. 如果将整个Student.prototype赋值为新的对象,对已经创建的实例是不会修改的,会影响后续创建的实例. n ...
- yum 安装报错 File "/usr/bin/yum", line 30 except KeyboardInterrupt, e:
原因: 这是因为yum采用python作为命令解释器,这可以从/usr/bin/yum文件中第一行#!/usr/bin/python发现.而python版本之间兼容性不太好,使得2.X版本与3.0版本 ...
- AFNetworking 源码解析
3.0 之后,就取消了NSOperation的控制. 因为根据Apple Developer Document的文档 https://developer.apple.com/documentation ...
- ODBC的JAR包和PLSQL
eclipse编辑器,写java 下载ODBC的JAR包 配置一下用户名和密码 java连接上数据库后 不是直接操作数据库 在代码里面有SQL语句 代码执行的时候遇到这些语句就可以操作数据库 平时操 ...
- MySQL--8MySQL存储过程小结
CURD: 就是对数据表进行插入更新删除查找的操作. 预编译:第一次会分析语法是否正确,编译成可识别的命令.然后存在内存中,以后再调用就省去了这两步,效率变高. 第一点:在存储过程内可以写控制语句,可 ...
- calibur处理ROSETTA输出的多个结构文件,clustering
下载网址:https://sourceforge.net/projects/calibur/ 安装: $ tar zxvf calibur.tar.gz $ cd calibur $ make 安装完 ...
- node.js初识02
node.js相较于那些老的服务器语言,他的优势在于,节省了I/O的时间,主要的特点是单线程,非阻塞和事件驱动,其实三个说的是同一个事情,相较于多线程而言,单线程的特点是,使用的那一条线程的cpu的利 ...
- sqli-labs(三)
第五关:这关的重点是有联合查询的注入漏洞,但是页面不会显示查询信息,但是会有报错信息显示在页面上 这关是双查询注入,其实用报错注入和盲注都是可以注入的,但是我觉得这个双查询注入还是很有意思的,所以这关 ...
- SpringMVC.入门篇《二》form表单
SpringMVC.入门篇<二>form表单 项目工程结构: 在<springmvc入门篇一.HelloWorld>基础上继续添加代码,新增:FormController.ja ...