Docker 作為一個整合的、易於部署的環境,在很多方面都有廣泛的應用,但是由於其使用了 Linux 核心的容器技術,所以很依賴 Linux 環境,在其他系統環境下必須要使用虛擬機器啟動一個 Linux 系統然後在此基礎上使用 Docker,非常不方便。而前不久 Docker 推出了 Mac 和 Windows 的全新 beta 版本,允許 Docker 以更貼近使用者、透明的方式執行。筆者也下載了 beta 版本嚐鮮,最新版本是 1.11.1-beta10
,這裡只講解 Mac 平臺。
Docker for Mac vs Docker Toolbox
Docker for Mac 本質上還是建立了一個 Linux 虛擬機器,然後在上面執行 Docker Daemon,Mac 本身存在 Docker 二進位制檔案作為客戶端,但是設計上相比之前的 Docker Toolbox 就更加巧妙了。
Docker Toolbox
Docker 工具箱會將 docker
、docker-compose
、docker-machine
安裝到 /usr/local/bin
目錄下,同時安裝 VirtualBox。工具箱通過 docker-machine
虛擬化一個 Linux 環境,這個環境執行 boot2docker 系統,其中包含了一個 Docker Engine 並且使用主機 $HOME/.docker/machine/machines/default
上存放的證書通訊。
在使用 docker
、docker-compose
命令之前,必須要使用 eval $(docker-machine env default)
命令初始化各類環境變數用於告知 docker
命令如何與虛擬機器內的 Docker Daemon 通訊
Docker for Mac
Docker for Mac 是一個原生的蘋果應用程式,被安裝到 /Application
目錄。安裝時會建立 /usr/local/bin
目錄下的 docker
、docker-compose
、docker-machine
符號連結,這些符號連結指向 ~/Library/Group Containers/group.com.docker/bin
目錄下的各類檔案,而 ~/Library/Group Containers/group.com.docker/bin
的檔案實際上也是符號連結,他們指向 /Applications/Docker.app/Contents/Resources/bin
目錄下的實際二進位制檔案。
-
Docker for Mac 使用通過 Hypervisor.framework 提供的輕量級的 xhyve 虛擬化技術
-
Docker for Mac 不使用
docker-machine
管理虛擬機器 -
Docker for Mac 不通過 TCP 埠通訊,反而使用
/var/tmp/docker.sock
套接字檔案通訊(實際上是將/var/tmp
目錄掛載到了虛擬機器中,虛擬機器在其中生成套接字檔案) -
由於使用了 xhyve 虛擬機器,所以可以模擬不同架構的處理器,這樣開發者就直接能在 Mac 上使用 Docker 使用諸多平臺的映象檔案,比如 arm 等。
為了能主機虛擬機器共享檔案,Docker 使用 osxfs 作為全新的檔案共享方案,在很多方面都有全新的特性,比如在檔案許可權、名稱空間、檔案所有者、檔案系統事件、掛載點、符號連結、檔案型別、擴充套件屬性等方面都有了全新的內容,並且,所有產生的日誌都能通過 syslog 查詢,非常方便。不過現在依舊存在許多問題,比如沒有設定 docker daemon 各項引數的介面。如果需要設定 registry-mirror 則必須手動使用 pinata set daemon
命令設定 daemon.json 內容。