天天看點

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學習筆記之在 Windows 和 Mac 中使用 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。

Docker學習筆記之在 Windows 和 Mac 中使用 Docker

除了搭建 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學習筆記之在 Windows 和 Mac 中使用 Docker

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學習筆記之在 Windows 和 Mac 中使用 Docker

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 中,我們将本機需要挂載的目錄配置進去并儲存即可。