[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
– 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 裡面就看的到:
嗯… 名稱就叫做 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 還是特意這麼做的了…