Docker for Mac 初體驗

山河永寂發表於2016-05-11

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 工具箱會將 dockerdocker-composedocker-machine 安裝到 /usr/local/bin 目錄下,同時安裝 VirtualBox。工具箱通過 docker-machine 虛擬化一個 Linux 環境,這個環境執行 boot2docker 系統,其中包含了一個 Docker Engine 並且使用主機 $HOME/.docker/machine/machines/default 上存放的證書通訊。
在使用 dockerdocker-compose 命令之前,必須要使用 eval $(docker-machine env default) 命令初始化各類環境變數用於告知 docker 命令如何與虛擬機器內的 Docker Daemon 通訊

Docker for Mac

Docker for Mac 是一個原生的蘋果應用程式,被安裝到 /Application 目錄。安裝時會建立 /usr/local/bin 目錄下的 dockerdocker-composedocker-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 內容。

相關文章