在Windows中玩轉Docker Toolbox

深藍發表於2016-11-29

最近在研究虛擬化,容器和大資料,所以從Docker入手,下面介紹一下在Windows下怎麼玩轉Docker。

Docker本身在Windows下有兩個軟體,一個就是Docker,另一個是Docker Toolbox。這裡我選擇的是Docker Toolbox,為什麼呢?參見官方文件:

https://blog.docker.com/2015/08/docker-toolbox/

首先我們從官網下載最新版的Windows Docker Toolbox。安裝後會安裝一個VirtualBox虛擬機器,一個Kitematic,這是GUI管理Docker的工具,沒有釋出正式版,不推薦使用,另外還有就是我們在命令列下用到的docker-machine和docker命令了。

基本使用

安裝完成Toolbox後會有一個Docker Quickstart Terminal的快捷方式,雙擊執行如果報錯,那可能是因為你已經安裝了Hyper-v,所以VirtualBox無法用64位的虛擬機器。需要解除安裝Hyper-v。

執行後會在Virtualbox中建立一個叫做default的虛擬機器,然後很有可能會卡在waiting for an IP的命令下,然後就死活不動了。我的做法是徹底放棄Docker Quickstart Terminal,根本不用這玩意兒,關掉,我們用PowerShell進行虛擬機器的管理。

開啟PowerShell,輸入:

docker-machine ls

我們可以看到我們當前的Docker虛擬機器的狀態。如果什麼都沒有的話,那麼我們可以使用以下命令建立一個Docker虛擬機器。

docker-machine create --driver=virtualbox default

建立完畢後,我們在用docker-machine ls確認我們的Docker虛擬機器在執行中。

然後使用以下命令獲得虛擬機器的環境變數:

docker-machine env default

然後再輸入:

docker-machine env default | Invoke-Expression

這樣我們就把當前的PowerShell和虛擬機器裡面的Docker Linux建立的連線,接下來就可以在PowerShell中使用docker命令了。

比如我們要檢視當前有哪些映象:

docker images

當前有哪些容器:

docker ps –a

其他各種docker命令我就不在這裡累述了。

Docker虛擬機器檔案地址修改

預設情況下,docker-machine建立的虛擬機器檔案,是儲存在C盤的C:\Users\使用者名稱\.docker\machine\machines\default 目錄下的,如果下載和使用的映象過多,那麼必然導致該資料夾膨脹過大,如果C盤比較吃緊,那麼我們就得考慮把該虛擬機器移到另一個盤上。具體操作如下:

1.使用docker-machine stop default停掉Docker的虛擬機器。

2.開啟VirtualBox,選擇“管理”選單下的“虛擬介質管理”,我們可以看到Docker虛擬機器用的虛擬硬碟的檔案disk。

3.選中“disk”,然後點選選單中的“複製”命令,根據嚮導,把當前的disk複製到另一個盤上面去。

4.回到VirtualBox主介面,右鍵“default”這個虛擬機器,選擇“設定”命令,在彈出的視窗中選擇“儲存”選項。

5.把disk從“控制器SATA”中刪除,然後重新新增我們剛才複製到另外一個磁碟上的那個檔案。

這是我設定好後的介面,可以看到我在步驟3複製的時候,複製到E:\VirtualBox\default\dockerdisk.vdi檔案去了。

image

6.確定,回到PowerShell,我們使用docker-machine start default就可以啟動新地址的Docker虛擬機器了。確保新磁碟的虛擬機器沒有問題。就可以把C盤那個disk檔案刪除了。

【注意:不要在Window中直接去複製貼上disk檔案,這樣會在步驟5的時候報錯的,報錯的內容如下,所以一定要在VirtualBox中去複製!】

Failed to open the hard disk file D:\Docker\boot2docker-vm\boot2docker-vm.vmdk. Cannot register the hard disk 'D:\Docker\boot2docker-vm\boot2docker-vm.vmdk' {9a4ed2ae-40f7-4445-8615-a59dccb2905c} because a hard disk C:\Users\使用者名稱\.docker\machine\machines\default\disk.vmdk' with UUID {9a4ed2ae-40f7-4445-8615-a59dccb2905c} already exists. Result Code: E_INVALIDARG (0x80070057) Component: VirtualBox Interface: IVirtualBox {fafa4e17-1ee2-4905-a10e-fe7c18bf5554} Callee RC: VBOX_E_OBJECT_NOT_FOUND (0x80BB0001)

映象加速

在國內使用Docker Hub的話就特別慢,為此,我們可以給Docker配置國內的加速地址。我看了一下,DaoCloud和阿里雲的映象加速還不錯,另外還有網易的蜂巢。選一個就行了。以DaoClound為例,註冊賬號,然後在https://www.daocloud.io/mirror 就可以看到DaoClound提供給您的映象加速的URL。然後到PowerShell中去依次執行:

docker-machine ssh default 
sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=加速地址 |g" /var/lib/boot2docker/profile 
exit 
docker-machine restart default

這樣重啟Docker後就可以用國內的映象來加速下載了。

試一下下載一個mysql看看快不快:

docker pull mysql

下載完映象,我們執行一個容器:

docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123 mysql:latest

接下來我們開啟windows下的mysql客戶端,伺服器地址填docker虛擬機器的IP地址,通過docker-machine env可以看到,我這裡是192.168.99.100,然後使用者名稱root,密碼123,這樣我們就可以連線到docker容器裡面的mysql了。

【注意,Docker容器是在VirtualBox的虛擬機器裡面,不是在Windows裡面,所以不能用127.0.0.1訪問】

相關文章