[Docker] 在 Mac 上使用原生的 Docker for Mac 操作 container

[Docker] 在 Mac 上使用原生的 Docker for Mac 操作 container

Docker 的演進算蠻快速的,從一開始在 Mac 上可以用 boot2docker

後來用 Docker Machine 取代了 boot2docker

而最近 Docker 推出了 Docker for Mac/Windows 的 Beta 版,

最大的好處就是不再需要 VirtualBox 來建立一個 VM,才能使用 container 了~

 

1. 移除已安裝的 Docker Machine

根據 Docker for Mac vs. Docker Toolbox 的說明,

其實 Docker for Mac 和 Docker Machine 是可以並存的,

不過既然有原生版本的 Docker,實在不想再留著 Docker Machine 做出來的 VM…

 

先用 docker-machine ls 看一下 Docker Machine 建立出來的 VM:

testuser@localhost ~ $ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL   SWARM
default            virtualbox   Stopped
dev                virtualbox   Stopped

 

接著用 docker-machine rm 將所有的 VM 都砍掉:

testuser@localhost ~ $ docker-machine rm dev
Successfully removed dev
testuser@localhost ~ $ docker-machine rm default
Successfully removed default

 

都砍完了之後,就可以將 Docker Machine 移掉了,

這邊要看你原本 Docker Machine 是如何安裝的,用相對應的移除方式,

像我當初是用 Homebrew Cask 安裝 dockertoolbox,

因此同樣用 brew cask zap 來移除掉它:

brew cask zap dockertoolbox

 

2. 安裝 Docker for Mac

因為之前有在 Docker Hub 上註冊會員,同時也有登記成為 Docker for Mac 的 Beta tester,

因此這次的 Private Beta Test 就有收到通知,

可以到 Docker for Mac and Docker for Windows 網頁,

點選 Get Docker for Mac 連結來下載 Docker.dmg 安裝~

 

在 Docker.dmg 上點兩下開啟安裝程式,首先將 Docker.app 拖移到 Applications 目錄下:

Screen Shot 2016-05-20 at 4.40.28 PM

 

接著輸入一個測試序號,測試序號會附在 Beta test 的通知信上,

不知道序號的人… 可能可以點 I don’t have a token 看看 (我沒試過),

如果不能用的話,就還是去登記成為 Docker Beta tester 吧:

Screen Shot 2016-05-20 at 4.42.07 PM

Screen Shot 2016-05-20 at 4.42.17 PM

 

接著會需要輸入 Mac 管理者的密碼來允許 Docker 做一些系統設定:

Screen Shot 2016-05-20 at 4.42.24 PM

 

最後就安裝完成囉:

Screen Shot 2016-05-20 at 4.42.36 PM

 

安裝好 Docker for Mac 之後,可以在 /usr/local/bin 下面,

看到新建立出來的 docker, docker-compose, docker-machine 這幾個 symbolic link,

都指向剛剛裝好的 Docker for Mac:

lrwxr-xr-x  1 testuser  staff  68 May 20 19:32 docker@ -> /Users/testuser/Library/Group Containers/group.com.docker/bin/docker
lrwxr-xr-x  1 testuser  staff  76 May 20 19:32 docker-compose@ -> /Users/testuser/Library/Group Containers/group.com.docker/bin/docker-compose
lrwxr-xr-x  1 testuser  staff  76 May 20 19:32 docker-machine@ -> /Users/testuser/Library/Group Containers/group.com.docker/bin/docker-machine

 

3. 在 Terminal 中執行 Docker 指令

立刻執行一個 Docker 指令試試吧~

用 ubuntu 這個映像檔做出一個 container,並在裡面執行 echo “Hello World”,

很順利的成功了,而且 Docker for Mac 不像 Docker Machine 要先設定好環境變數,

可以直接執行 docker 指令,這點方便許多:

testuser@localhost ~ $ docker run -it ubuntu echo "Hello World"
Unable to find image 'ubuntu:latest' locally
latest: Pulling from library/ubuntu
6d28225f8d96: Pull complete
166102ec41af: Pull complete
d09bfba2bd6a: Pull complete
c80dad39a6c0: Pull complete
a3ed95caeb02: Pull complete
Digest: sha256:5718d664299eb1db14d87db7bfa6945b28879a67b74f36da3e34f5914866b71c
Status: Downloaded newer image for ubuntu:latest
Hello World

 

4. 查看 Docker for Mac 產生出來的 syslog

Docker for Mac 安裝好之後,會在上方常駐列上,

出現一個 Docker for Mac 的圖示,點下它可以看到下面的視窗:

Screen Shot 2016-05-20 at 4.43.04 PM

 

點下 Logs 的話,會教你怎麼看 Docker 吐出來的 syslog:

Screen Shot 2016-05-20 at 4.52.58 PM

 

下面是我節錄部分在我 Mac 上關於 Docker 的 syslog,可以看到它提供了不少資訊,

像是版本、啟動了哪些 process、建立了什麼 socket,

而且也看到它執行了 com.docker.hyperkit 這個參數列看起來很像 QEMU 的東東:

testuser@localhost ~ $ syslog -k Sender Docker
May 20 16:41:43 localhost Docker[20381] <Notice>: Application version: 1.11.1-beta12 (7528)
May 20 16:41:43 localhost Docker[20381] <Notice>: OSX Version: Version 10.11.5 (Build 15F34)
May 20 16:42:30 localhost Docker[20381] <Notice>: privileged installation of com.docker.vmnetd successful
May 20 16:42:30 localhost Docker[20445] <Notice>: com.docker.vmnetd starting
May 20 16:42:32 localhost Docker[20450] <Notice>: Starting com.docker.db, com.docker.osxfs, com.docker.slirp, com.docker.osx.hyperkit.linux, com.docker.driver.amd64-linux
May 20 16:42:32 localhost Docker[20450] <Notice>: Start com.docker.db (pid 20463)
May 20 16:42:32 localhost Docker[20450] <Notice>: Start com.docker.osxfs (pid 20464)
May 20 16:42:32 localhost Docker[20450] <Notice>: Start com.docker.slirp (pid 20466)
May 20 16:42:32 localhost Docker[20450] <Notice>: Start com.docker.osx.hyperkit.linux (pid 20467)
May 20 16:42:32 localhost Docker[20450] <Notice>: Start com.docker.driver.amd64-linux (pid 20468)
May 20 16:42:32 localhost Docker[20467] <Notice>: API server starting
May 20 16:42:32 localhost Docker[20467] <Notice>: socket path is: /Users/testuser/Library/Containers/com.docker.docker/Data/s20
May 20 16:42:35 localhost Docker[20468] <Notice>: hypervisor: native
May 20 16:42:35 localhost Docker[20468] <Notice>: filesystem: osxfs
May 20 16:42:35 localhost Docker[20464] <Notice>: Using protocol TwoThousand msize 16384
May 20 16:42:35 localhost Docker[20468] <Notice>: Hypervisor: native; BootProtocol: direct; UefiBootDisk: /Users/testuser/UefiBoot.qcow2
May 20 16:42:35 localhost Docker[20468] <Notice>: Launching: /Applications/Docker.app/Contents/MacOS/com.docker.hyperkit -A -m 2G -c 2 -u -s 0:0,hostbridge -s 31,lpc -s 2:0,virtio-ipc,uuid=ff9d03c6-7ab5-45aa-8f47-528fd862ada0,path=/Users/testuser/Library/Containers/com.docker.docker/Data/s50,macfile=/Users/testuser/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/mac.0 -s 3,virtio-blk,file:///Users/testuser/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2,format=qcow -s 4,virtio-9p,path=/Users/testuser/Library/Containers/com.docker.docker/Data/s40,tag=db -s 5,virtio-rnd -s 6,virtio-9p,path=/Users/testuser/Library/Containers/com.docker.docker/Data/s51,tag=port -s 7,virtio-sock,guest_cid=3,path=/Users/testuser/Library/Containers/com.docker.docker/Data,guest_forwards=2376;1525 -l com1,autopty=/Users/testuser/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/tty,log=/Users/testuser/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/console-ring -f kexec,/Applications/Docker.app/Contents/Resources/moby/vmlinuz64,/Applications/Docker.app/Contents/Resources/moby/initrd.img,earlyprintk=serial console=ttyS0 com.docker.driverDir="/Users/testuser/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux", com.docker.database="com.docker.driver.amd64-linux" -F /Users/testuser/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/hypervisor.pid
May 20 16:42:35 localhost Docker[20473] <Notice>: Starting xhyve
May 20 19:33:37 localhost Docker[908] <Notice>: osxfs tracing: OFF
May 20 19:33:57 localhost Docker[913] <Notice>: Docker is responding
May 20 19:33:57 localhost Docker[912] <Notice>: VM has started at 2016-05-20 19:33:57 +0800 CST
May 20 19:33:57 localhost Docker[802] <Notice>: dockerState = running

 

Log 上也提到了 xhyve 這個字眼,依照文件上的說明,

Docker for Mac 現在不需要在 VirtualBox 的 VM 裡跑 container 了,

但是是改用 xhyve 這個在 OS X 上的一個較輕量的 VM 軟體,

所以應該還是算是在 VM 裡跑 container 吧~

 

5. 設定 Docker for Mac

點下 Docker for Mac 圖示 > Settings,可以調整 Docker 是否要自動執行與更新:

Screen Shot 2016-05-20 at 4.53.54 PM

 

進階設定這邊可以調整配置給 container 用的 CPU 和記憶體數量:

Screen Shot 2016-05-20 at 4.54.02 PM

 

不過有點好奇的是,用 xhyve 建立出來的 VM 硬碟空間是不是有限制呢?

這個問題在 FAQ 裡並沒有提到 (對 xhyve 著墨不多),

會考慮這個問題是在想說,如果建立了一堆 container,勢必會占據掉 VM 的空間,

如果因為 VM 的硬碟空間限制,導致不能建立更多的 container 的話,就有點尷尬了…

不過這問題等遇到了再來查查看也不遲 😛

   

6. 使用 Kitematic 管理 Docker container

點下 Docker for Mac 圖示 > Dashboard,會出現安裝 Kitematic 的詢問視窗:

Screen Shot 2016-05-20 at 4.43.38 PM

 

如果按下 Download Kitematic 按鈕的話,會下載一個 Kitematic-Mac.zip,

要自行解壓縮到 /Applications 目錄下去~

sudo unzip ~/Downloads/Kitematic-Mac.zip -d /Applications

 

執行剛安裝好的 Kitematic,可以發現它是一個 GUI 版的 Docker container 管理程式,

在左邊的 Container 列表中列出了目前我有的 container,

如果按一下 +NEW 按鈕,就可以在右邊的 Docker Hub 列表中搜尋想要的映像檔:

Screen Shot 2016-05-21 at 12.21.35 AM

 

點一下左邊的某一個 container,就可以做一些操作,

基本上就是用 docker 指令可以做到的動作的 GUI 版本,

像是查看 log、啟動或停止 container、以及做一些設定等等:

Screen Shot 2016-05-21 at 12.21.40 AM  

 

目前使用 Docker for Mac 感覺相當不錯,減少了需要執行 VirtualBox VM 這個動作,

覺得變得輕量方便許多,這樣在 Mac 上應用 Docker 技術也變得更可行囉~^^

 

(本頁面已被瀏覽過 3,314 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料