在 OS X 上,透過 boot2docker 使用 docker 的 data volume
Use docker data volume on OS X
Docker 1.3 在 2014-10-16 釋出。其中,在方便性上最讓人注目的更新,除了 exec 指令以外,就是 boot2docker 在 Mac OS X 資料夾分享功能的改進,本文主要是針對後者去做講述。
前言
由於 Docker 只支持 Linux 作業系統,倘若要於 OS X 使用 Docker ,會使用 boot2docker 這個工具,在 VirtualBox 上建立一個 boot2docker-vm 的映像檔。然後,透過這個 Linux VM 去操作 Docker。
但是,在 Docker 1.3 之前,因為 boot2docker 的映像檔沒有支援 VirtualBox Guest Additions ,所以無法使用 Virtualbox 分享資料夾的功能,將 OS X 的資料夾掛載到虛擬機器裡。因此必須另外自行製作有支援該 VirtualBox Guest Additions 的映像檔(或是下載別人做好的),然後設定 Virtual Box ,把 OS X 的資料夾自動掛載到虛擬機器裡。
不過,隨著 Docker 1.3 釋出,boot2docker 也一併將這個功能引入。使用者可以直接透過 boot2docker 的映像檔使用這功能,而且它會自動把 /Users
資料夾掛載到虛擬機器裡,不需要另外設定!
下圖是在 OS X 上,使用 boot2docker 建立 data volume 的示意圖,希望能幫助各位了解運作原理。
前置作業
在開始前,必須先安裝或更新 docker 和 boot2docker 到 1.30 以上的版本,更新的方法在我前一篇文章 Upgrade Docker and Boot2docker on OS X 已經說明了,可以參考看看,這邊就不多贅述。
接著在 Terminal 下 $ boot2docker ssh 'ls -al /Users'
的指令,確認是否已經成功掛載。如果成功,應該會出現 /Users
的目錄。
$ boot2docker ssh 'ls -al /Users'
drwxr-xr-x 1 docker staff 204 Mar 29 2014 .
drwxr-xr-x 17 root root 400 Oct 31 10:29 ..
-rw-r--r-- 1 docker staff 0 Aug 25 2013 .localized
drwxrwxrwx 1 docker staff 306 Oct 18 04:08 Shared
drwxr-xr-x 1 docker staff 3774 Oct 31 17:52 user5566
Data Volume
本文利用 ubuntu 的 images 去做建立 data volume 的示範。開始前,再次強調,因為 boot2docker 只有把 OS X 的 /Users
資料夾掛載到虛擬機上,所以 data volume 的 host 資料夾必須在 /Users
底下。
首先
把想建立 data volume 的資料夾與檔案準備好。
$ mkdir ~/docker-volume/test
$ touch ~/docker-volume/test/volume-test.md
$ ls -al ~/docker-volume/test
total 0
drwxr-xr-x 3 user5566 staff 102 11 1 02:01 .
drwxr-xr-x 3 user5566 staff 102 11 1 02:01 ..
-rw-r--r-- 1 user5566 staff 0 11 1 02:01 volume-test.md
接著
建立一個 Container 。
並且,將剛才建立的資料夾,透過 data volume 掛載到 /volume_test
的位置。並且確認是否成功。
# 建立 Container
$ docker run -it -v ~/docker-volume/test:/volume_test ubuntu:latest /bin/bash
root@d0d097097657:/#
# 測試 data volume 是否成功
root@d0d097097657:/# ls -al /volume_test/
total 4
drwxr-xr-x 1 1000 staff 102 Oct 31 2014 ./
drwxr-xr-x 50 root root 4096 Oct 31 17:51 ../
-rw-r--r-- 1 1000 staff 0 Oct 31 2014 volume-test.md
最後
在 OS X 和 Container 中,都建立一個檔案,以測試同步與否。
# OS X
$ touch ~/docker-volume/test/file-from-osx.md
# Container
root@d0d097097657:/# touch /volume_test/file-from-container.md
看起來是成功了,歡呼囉!
# OS X 確認
$ ls -al ~/docker-volume/test
total 0
drwxr-xr-x 5 user5566 staff 170B 11 1 02:12 .
drwxr-xr-x 3 user5566 staff 102B 11 1 02:01 ..
-rw-r--r-- 1 user5566 staff 0B 11 1 01:58 file-from-container.md
-rw-r--r-- 1 user5566 staff 0B 11 1 02:12 file-from-osx.md
-rw-r--r-- 1 user5566 staff 0B 11 1 02:01 volume-test.md
# Container 確認
root@d0d097097657:/# ls -al /volume_test/
total 4
drwxr-xr-x 1 1000 staff 170 Oct 31 2014 .
drwxr-xr-x 50 root root 4096 Oct 31 17:51 ..
-rw-r--r-- 1 1000 staff 0 Oct 31 17:58 file-from-container.md
-rw-r--r-- 1 1000 staff 0 Oct 31 2014 file-from-osx.md
-rw-r--r-- 1 1000 staff 0 Oct 31 2014 volume-test.md
後記
Data Volume 是 docker 在應用 LXC 時,一個非常重要的功能。在初學 Docker 前,因為不懂 boot2docker 的運作原理,在這功能鬼打牆好多次,都無法成功。後來知道原理後,卻覺得在 OS X 實作這功能太麻煩了,改用 VPS 直接用 Linux 去玩 Docker 。還好,現在 boot2docker 已經做好這件事了,讓我們可以更快樂的在 OS X 上面玩 Docker ,尤其是進行開發啦!(rock)
剛好,這塊是我在 PHPConf 演講 裡,只有稍微帶過的部分,希望這篇文章能補足當時因為時間關係,而沒講明的部分。在之後,我也會把握空閒時間,多寫幾篇有關 Docker 的文章,補足演講的缺口,希望大家會喜歡。 =D
最後,祝各位在 OS X 上,愜意地 Docker 囉!
Reference