[Docker] 在 Mac 上改用 Docker Machine 取代 boot2docker

[Docker] 在 Mac 上改用 Docker Machine 取代 boot2docker

2016/05/21 更新:現在在 Mac 上有原生的 Docker for Mac 版本了,

不需要多個 Docker 版本的話,應該可以不用再裝 Docker Machine,

可以參考 在 Mac 上使用原生的 Docker for Mac 操作 container 這篇~

 

之前在 Mac 上使用 docker 時,得安裝 boot2docker

不過一陣子沒用,今天想來用一下時,

boot2docer up 的指令突然跟我說 boot2docker 已經 deprecated 了!!

WARNING: The 'boot2docker' command line interface is officially deprecated.
Please switch to Docker Machine (https://docs.docker.com/machine/) ASAP.
Docker Toolbox (https://docker.com/toolbox) is the recommended install method.

 

真是沒想到,才一陣子沒用,它就要被取代掉了…

訊息裡提到了 Docker Machine,又說 Docker Toolbox 是建議的安裝方式~

查了一下,Docker Toolbox 裡面包含了下面這些東西,感覺像是個超級懶人包~

  – Docker Client

  – Docker Machine

  – Docker Compose

  – Docker Kitematic

  – VirtualBox

 

1. 移除舊的 boot2docker

我之前的 boot2docker 只是拿來簡單測試,並沒有打算保留,

因此就不需要考慮 migrate 到新的 Docker Machine 上了,

直接用 boot2docker 指令將 VM 關機後砍掉 VM:

boot2docker poweroff
boot2docker delete

 

接著就可以移除 boot2docker…

因為我的 boot2docker 是用 Homebrew Cask 裝的,

因此移除也是使用相同的方式:

brew cask zap boot2docker

  

2. 安裝 Docker Toolbox

用 Homebrew Cask 來安裝這 toolbox,

如果先前就有安裝 VirtualBox 的話,要記得把 VirtualBox 完全關閉 (Cmd+Q) 喔~

brew cask install dockertoolbox

 

3. 使用 Docker Machine 建立 Docker 環境

剛裝好的 Docker Toolbox 裡面包含了一個 docker-machine 指令,

可以用來建立 docker 所需的環境~

下面的指令指定要用 VirtualBox 來建立一個名為 dev 的環境:

testuser@localhost ~ $ docker-machine create -d virtualbox dev
Creating VirtualBox VM...
Creating SSH key...
Starting VirtualBox VM...
Starting VM...
To see how to connect Docker to this machine, run: docker-machine env dev

 

在上例中,docker-machine 指令會幫你建立一個名叫 dev 的虛擬機器,

執行 docker-machine env dev 就可以看到 dev 環境的資訊:

testuser@localhost ~ $ docker-machine env dev
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.101:2376"
export DOCKER_CERT_PATH="/Users/testuser/.docker/machine/machines/dev"
export DOCKER_MACHINE_NAME="dev"
# Run this command to configure your shell: 
# eval "$(docker-machine env dev)"

 

要使用 docker 連到這個 VM 的話,要先執行那幾個 export 指令,

或是直接用它訊息裡面寫的 eval “$(docker-machine env dev)” 就行了:

eval "$(docker-machine env dev)"

 

執行上述指令設定好全域變數後,就可以使用正常的 docker 指令了 (像 docker ps -a)~

 

下面是觀察建立出來的 VM 的一些心得~

其實 Docker Toolbox 裝好之後,看起來就已經先設定好一個叫 default 的 VM,

當我建立 dev 的 VM 後,就會同時有 default 和 dev 兩個 VM跑起來,

這在 VirtualBox 裡面就看的到:

Screen Shot 2015-09-10 at 1.03.58 AM  

 

嗯… 名稱就叫做 default 和 dev… 有點醜…

建議在使用 docker-machine create 時,選一個好一點的名稱,

這樣在 VirtualBox 列表上,比較容易辨識出來這是給 docker 用的 VM~

 

用 docker-machine ls 也可以秀出目前已經建立出來的 docker VM,

以及哪一個 VM 目前是處於啟用 (active) 狀態:

testuser@localhost ~ $ docker-machine ls
NAME      ACTIVE   DRIVER       STATE     URL                         SWARM
default            virtualbox   Running   tcp://192.168.99.100:2376
dev       *        virtualbox   Running   tcp://192.168.99.101:2376

 

這邊有一點很有趣的是,docker-machine 怎麼知道哪一台是 active 的呢?

明明 default 和 dev 兩台 VM 都是開機的狀態…

實驗了一下,看來 docker-machine 是根據剛剛 export 出來的那幾個全域變數,

來得知目前 docker 指令會操作到的 VM 是哪一個,

因此要改變 active 對象的話,

就是執行 eval “$(docker-machine env <VM name>)” 就行了~

 

另外一個觀察到的點是,default 和其他自己建立出來的 VM,

基本上是相同的,但是 default 的 RAM 是給 2G,自己建立的是給 1G,

這邊還沒看文件,就不曉得是 bug 還是特意這麼做的了…

 

(本頁面已被瀏覽過 625 次)

發佈留言

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

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