1:Docker簡介
Docker 是一種執行於 Linux 和 Windows 上的軟體,用於建立、管理和編排容器。
Docker 是在 GitHub 上開發的 Moby 開源專案的一部分。
Docker 公司,位於舊金山,是整個 Moby 開源專案的維護者。Docker 公司還提供包含支援服務的商業版本的 Docker。
2:Docker安裝
2.1:Windows安裝Docker
在瞭解 Windows 版 Docker 之前,讀者首先要知道這是由 Docker 公司提供的一個產品。這意味著它易於下載,並且有一個很靈活的安裝器(installer)。
Windows 版 Docker 需要執行在一個安裝了 64 位 Windows 10 作業系統的計算機上,通過啟動一個獨立的引擎來提供 Docker 環境。
其次,讀者需要知曉 Windows 版 Docker 是一個社群版本(Community Edition,CE)的應用,並不是為生產環境設計的。
最後,讀者還需要知道 Windows 版 Docker 在某些版本特性上可能是延後支援的。這是因為 Docker 公司對該產品的定位是穩定性第一,新特性其次。
以上 3 點被新增到 Windows 版 Docker 這個安裝快捷簡單,但並不支援生產環境部署的產品當中。
接下來我們一起了解一下如何安裝 Windows 版 Docker。
在安裝之前,Windows 版 Docker 的環境有以下要求。
Windows 10 Pro(專業版) / Enterprise(企業版) / Education(教育版)(1607 Anniversary Update、Build 14393 或者更新的版本)。
Windows 必須是 64 位的版本。
需要啟用 Windows 作業系統中的 Hyper-V 和容器特性。
接下來的步驟會假設讀者的計算機已經開啟了 BIOS 設定中的硬體虛擬化支援。如果沒有開啟,讀者需要在機器上執行下面的步驟。
首先,讀者需要確認在 Windows 10 作業系統中,Hyper-V 和容器特性已安裝並且開啟。
1) 右鍵單擊 Windows 開始按鈕並選擇“應用和功能”頁面。
2) 單擊“程式和功能”連結。
3) 單擊“啟用或關閉Windows功能”。
4) 確認Hyper-V和容器核取方塊已經被勾選,並單擊確定按鈕。
按上述步驟操作完成後,會安裝並開啟 Hyper-V 和容器特性,如下圖所示。這時需要重啟作業系統。
其中,容器特性只有在 summer 2016 Windows 10 Anniversary Update(build 14393)版本或更高版本上才能開啟。
當讀者完成 Hyper-V 和容器特性的安裝並重啟機器之後,就可以安裝 Windows 版 Docker 了。
1) 訪問 Docker 的下載(https://www.docker.com/products/docker-desktop)頁面,並單擊其中的 Download for Windows 按鈕。
2) 單擊後會跳轉到 Docker 商店,需要讀者使用自己的 Docker ID 進行登入。
3) 單擊任意 Get Docker 下載連結。Docker for Windows 分為穩定版(Stable)和搶鮮版(Edge)。搶鮮版當中包含一些新特性,但是可能不夠穩定。單擊下載連結後,會將名為 Docker for Windows Installer.exe 的安裝包下載到預設下載目錄。
4) 找到上一步下載的安裝包並執行即可。
以管理員身份執行安裝嚮導,並按照提示一步一步完成整個安裝過程。安裝完成後 Docker 會作為系統服務自動啟動,並且在 Windows 的通知欄看到 Docker 的大鯨魚圖示。
恭喜!到目前為止已經成功完成 Windows 版 Docker 的安裝。
開啟命令列或者 PowerShell 介面,並嘗試執docker version
命令。
Client: Version: 18.01.0-ce API version: 1.35 Go version: go1.9.2 Git commit: 03596f5 Built: Wed Jan 10 20:05:55 2018 OS/Arch: windows/amd64 Experimental: false Orchestrator: swarm Server: Engine: Version: 18.01.0-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.2 Git commit: 03596f5 Built: Wed Jan 10 20:13:12 2018 OS/Arch: linux/amd64 Experimental: false
注意觀察命令輸出內容,其中 Server 部分中的 OS/Arch 屬性展示了當前的作業系統是 linux/amd64。
這是因為在預設安裝方式中,Docker daemon 是執行在 Hyper-V 虛擬機器中的一個輕量級 Linux 上的。這種情況下,讀者只能在 Windows 版 Docker 上執行 Linux 容器。
如果讀者想要執行原生 Windows 容器(Native Windows Container),可以右擊 Windows 通知欄中的 Docker 鯨魚圖示,並選擇“切換到 Windows 容器”。
使用下面的命令也可以完成切換(進入 \Program Files\Docker\Docker 目錄下執行)。
C:\Program Files\Docker\Docker> .\dockercli -SwitchDaemon
如果沒有開啟 Windows 容器特性,則會看到下圖的提示。
如果已經開啟了 Windows 容器特性,則只需要花費數秒就能完成切換。一旦切換完成,在命令列中執行docker version
指令的輸出內容如下。
C:\> docker version Client: <Snip> Server: Engine: Version: 18.01.0-ce API version: 1.35 (minimum version 1.24) Go version: go1.9.2 Git commit: 03596f5 Built: Wed Jan 10 20:20:36 2018 OS/Arch: windows/amd64 Experimental: true
可以看到,現在 Server 版本資訊變成了 windows/amd64。這意味著 Docker daemon 執行在原生 Windows 核心上,並且只能執行 Windows 容器了。
同時也可以發現,Experimental 這個屬性的值為 true。這表示當前執行的 Docker 版本是實驗版本。
前面提到過,Docker for Windows有兩個版本:穩定版和搶鮮版。 Windows 容器是搶鮮版中的一個實驗特性。
讀者可以通過執行dockercli -Version
命令來檢視當前的 Docker 版本。dockercli
命令在 C:\Program Files\Docker\Docker 目錄下。
C:\Program Files\Docker\Docker> .\dockercli -Version Docker for Windows Version: 18.01.0-ce-win48 (15285) Channel: edge Sha1: ee2282129dec07b8c67890bd26865c8eccdea88e OS Name: Windows 10 Pro Windows Edition: Professional Windows Build Number: 16299
下面展示了一些常用的能夠正常執行的 Docker 命令。
> docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE > docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES > docker system info Containers: 1 Running: 0 Paused: 0 Stopped: 1 Images: 6 Server Version: 17.12.0-ce Storage Driver: windowsfilter <Snip>
Windows 版 Docker 包括 Docker 引擎(客戶端和 daemon)、Docker Compose、Docker Machine 以及 Docker Notary 命令列。
通過下列命令確認各個模組已經成功安裝。
C:\> docker --version Docker version 18.01.0-ce, build 03596f5 C:\> docker-compose --version docker-compose version 1.18.0, build 8dd22a96 C:\> docker-machine --version docker-machine.exe version 0.13.0, build 9ba6da9 C:\> notary version notary Version: 0.4.3 Git commit: 9211198
2.2:Mac安裝Docker
Mac 版 Docker 也是由 Docker 公司提供的一個產品。
我們們大可以放心使用 Docker,而無須先成為一個核心工程師,也不必通過很極客的方法將 Docker 安裝到 Mac。
Mac 版 Docker 是由 Docker 公司基於社群版的 Docker 提供的一個產品。這意味著在筆記本上安裝單引擎版本的 Docker 是非常簡單的。
但是同時,這也意味著 Mac 版 Docker 並不是為生產環境而設計的。如果你聽說過 boot2docker,那麼 Mac 版 Docker 就是一個流暢、簡單並且穩定版的 boot2docker。
對於 Mac 版 Docker 來說,提供基於 Mac 原生作業系統中 Darwin 核心的 Docker 引擎沒有什麼意義。
所以在 Mac 版 Docker 當中,Docker daemon 是執行在一個輕量級的 Linux VM 之上的。
Mac 版 Docker 通過對外提供 daemon 和 API 的方式與 Mac 環境實現無縫整合。
這意味著讀者可以在 Mac 上開啟終端並直接使用 Docker 命令。
儘管在 Mac 上實現了無縫整合,還是要謹記 Mac 版 Docker 底層是基於 Linux VM 執行的,所以說 Mac 版 Docker 只能執行基於 Linux 的 Docker 容器。
不過這樣已經很好了,因為大部分容器實際上都是基於 Linux 的。
下圖展示了 Mac 版 Docker 的抽象架構。
Mac 版 Docker 採用 HyperKit9 實現了一個極其輕量級的 Hypervisor。HyperKit 是基於 Xhyve Hypervisor 的。
Mac 版 Docker 也利用了 DataKit 的某些特性,並執行了一個高度優化後的 Linux 發行版 Moby(基於 Alpine Linux)。
接下來開始安裝 Mac 版 Docker。
1) 開啟瀏覽器,訪問Docker的下載頁面(https://www.docker.com/products/docker-desktop),然後單擊 Download for Mac 按鈕。
2) 頁面會跳轉到 Docker 商店,需要讀者使用自己的 Docker ID 和密碼進行登入。
3) 單擊下載連結 Get Docker CE。
Mac 版 Docker 分為兩個版本:穩定版(Stable)和搶鮮版(Edge)。搶鮮版包含一些新特性,但是並不保證穩定執行。
單擊連結後,會下載 Docker.dmg 安裝包。
4) 執行上一步中下載的 Docker.dmg 檔案。將代表 Docker 的鯨魚圖示拖拽到應用資料夾(Application folder)中。
5) 開啟應用資料夾(可能會自動開啟)並且雙擊 Docker 應用圖示來啟動 Docker。可能需要確認是否執行,因為這是從網際網路下載的應用程式。
6) 輸入 Mac 使用者密碼,這樣安裝程式可以獲取到建立元件所需的許可權。
7) Docker daemon 程式啟動。
一個活動的鯨魚圖示會在螢幕上方狀態列中出現。一旦 Docker 成功執行,鯨魚圖示就靜止了。可以單擊鯨魚圖示來管理 DfM。
DfM 現在已經安裝完成,讀者可以開啟一個終端,並執行一些常用的 Docker 指令。
嘗試執行下面的命令。
$ docker version Client: Version: 17.05.0-ce API version: 1.29 Go version: go1.7.5 Git commit: 89658be Built: Thu May 4 21:43:09 2017 OS/Arch: darwin/amd64 Server: Version: 17.05.0-ce API version: 1.29 (minimum version 1.12) Go version: go1.7.5 Git commit: 89658be Built: Thu May 4 21:43:09 2017 OS/Arch: linux/amd64 Experimental: true
注意,Server 的 OS/Arch 屬性中顯示的值是 linux/amd64。這是因為 daemon 是基於前文提到過的 Linux VM 執行的。
Client 元件是原生的 Mac 應用,執行在 Mac 作業系統 Darwin 核心之上(OS/Arch: darwin/amd64)。
除此之外,還需要注意當前 Docker 版本是一個實驗性質的版本(Experimental: true)。這是因為它是搶鮮版,搶鮮版中開啟了一些實驗特性。
執行其他 Docker 命令。
$ docker --version Docker version 17.05.0-ce, build 89658be $ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE $ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Mac 版 Docker 安裝了 Docker 引擎(客戶端以及服務端守護程式)、Docker Compose、Docker machine 以及 Notary 命令列。
下面的 3 條命令展示瞭如何確認這些元件是否成功安裝,以及元件的版本資訊。
$ docker --version Docker version 17.05.0-ce, build 89658be $ docker-compose --version docker-compose version 1.13.0, build 1719ceb $ docker-machine --version docker-machine version 0.11.0, build 5b27455 $ notary version notary Version: 0.4.3 Git commit: 9211198
2.3:Linux安裝Docker
在 Linux 上安裝 Docker 是常見的安裝場景,並且安裝過程非常簡單。
通常難點在於 Linux 不同發行版之間的輕微區別,比如 Ubuntu 和 CentOS 之間的差異。
接下來的示例基於 Ubuntu 版本 Linux,同樣適用於更低或者更高的版本。
理論上,下面的示例在 CentOS 的各種版本上也是可以執行的。至於 Linux 作業系統是安裝在自己的資料中心,還是第三方公有云,或是筆記本的虛擬機器上,都沒有任何的區別。唯一需求就是這臺機器是 Linux 作業系統,並且能夠訪問 https://get.docker.com。
首先讀者需要選擇安裝的 Docker 版本。當前有兩個版本可供選擇:社群版(Community Edition,CE)和企業版(Enterprise Edition,EE)。
Docker CE 是免費的,並且是接下來示例中將要使用的版本。
Docker EE 包含 Docker CE 中的全部功能,還包括了商業支援以及與其他 Docker 產品的整合,比如 Docker 可信映象庫和通用控制皮膚。
下面的例子使用wget命令來執行一個 Shell 指令碼,完成 Docker CE 的安裝。
更多其他在 Linux 上安裝 Docker 的方式,可以開啟 Docker 主頁面(www.docker.com),單擊頁面中 Get Started 按鈕來獲取。
注:在開始下面的步驟之前,要確認系統升級到最新的包,並且打了相應的安全補丁。
1) 在 Linux 機器上開啟一個新的 Shell。
2) 使用wget
從 https://get.docker.com 獲取並執行 Docker 安裝指令碼,然後採用 Shell 中管道(pipe
)的方式來執行這個指令碼。
$ wget -qO- https://get.docker.com/ | sh modprobe: FATAL: Module aufs not found /lib/modules/4.4.0-36-generic + sh -c 'sleep 3; yum -y -q install docker-engine' <Snip> If you would like to use Docker as a non-root user, you should now consider adding your user to the "docker" group with something like: sudo usermod -aG docker your-user Remember that you will have to log out and back in...
3) 最好通過非 root 使用者來使用 Docker。這時需要新增非 root 使用者到本地 Docker Unix 組當中。
下面的命令展示瞭如何把名為 npoulton 的使用者新增到 Docker 組中,以及如何確認操作是否執行成功。
$ sudo usermod -aG docker npoulton $ cat /etc/group | grep docker docker:x:999:npoulton
如果當前登入使用者就是要新增到 Docker 組中的使用者的話,則需要重新登入,組許可權設定才會生效。
至此 Docker 已經在 Linux 上安裝成功。執行下面命令來確認安裝結果。
$ docker --version Docker version 18.01.0-ce, build 03596f5 $ docker system info Containers: 0 Running: 0 Paused: 0 Stopped: 0 Images: 0 Server Version: 18.01.0-ce Storage Driver: overlay2 Backing Filesystem: extfs <Snip>
如果上述步驟在自己的 Linux 發行版中無法成功執行,可以訪問 Docker Docs 網站(https://docs.docker.com)並單擊與自己的版本相關的那個連結。
接下來頁面會跳轉到 Docker 官方提供的適合當前版本的安裝指南頁面,這個安裝指南通常會保持更新。
但是需要注意,Docker 網站上提供的指令使用了包管理器,相比前面的例子需要更多的步驟才能完成安裝操作。
實際上,如果讀者使用瀏覽器開啟網頁 https://get.docker.com,會發現這其實就是一個 Shell 指令碼,指令碼中已經幫讀者定義好了安裝相關的指令,包括設定 Docker 為系統開啟自啟動。
如果未從官方 Docker 倉庫下載原始碼,則最終安裝的可能是 Docker 的一個複製版本。過去一些 Linux 發行商選擇複製了 Docker 的程式碼,並基於此開發了一些定製化的版本。
需要注意類似的情況,因為執行一個與 Docker 官方版本不同的複製版,可能遇到異常退出的情況。
如果本意就是採用該版本執行,那這不是問題。但是如果本意並非如此,複製版本中發行商提交的一些改動可能導致其版本無法與 Docker 官方版本相相容。這樣就無法從 Docker 公司或者 Docker 公司授權的合作伙伴那裡獲得商業支援。