在Windows環境下使用docker


Widows下的Docker工具有兩個:Docker Toolbox,和Docker Desktop,其中后者是在win10下才能使用的,提供了更強大的功能。由於我個人的電腦是win7環境,用的就是docker toolbox。

Windows的docker的原理是:利用虛擬機虛擬一個linux,win7下是virtualbox, win10下是hyperv,然后在這個虛擬機中跑docker。其實在linux上也有這種方式,具體可以參考docker-machine,工作模式如下。

  1. 將docker分為docker client和docker server兩部分
  2. docker client通過docker-machine命令在docker server中創建docker虛擬機
  3. docker client將docker命令關聯到docker虛擬機上,此時docker命令就是直接下發到相應的docker虛擬機了

對於docker toolbox來說,docker client對應的是本機,而docker server對應的則是虛擬機了。不過docker machine本身是一個比較靈活的管理方式,可docker server可以是虛擬機,可以是實體機,也可以是雲服務器。

PS:現在windows也有原生可以跑win32程序的docker了,具體可以參考這篇文章:BUILD AND RUN YOUR FIRST DOCKER WINDOWS SERVER CONTAINER

 

創建虛擬機

創建虛擬機最簡單的命令形式為

  docker-machine create myvm

創建完成后,就在VirtualBox中增加了一個虛擬機。它會使用一個Boot2Docker的鏡像,這是一個專門優化的linux版本,體積較小,方便發布。不過第一次創建的時候貌似會遠程下載該鏡像,雖然不大,但最好還是使用相應不可說的工具。  

除了這個最基礎的命令外,也可以在創建的時候指定一些其它參數,如內存、磁盤空間、cpu個數等。具體請參看docker-machine命令行。對於已經創建好的虛擬機,如果要修改其參數,也可以直接在VirtualBox中修改。(一個比較常見的操作就是移動虛擬磁盤的存儲位置)

 

查看虛擬機

常見好虛擬機后,可以通過docker-machine env命令查看虛擬機基本環境信息。

    > docker-machine env myvm
    SET DOCKER_TLS_VERIFY=1
    SET DOCKER_HOST=tcp://192.168.99.100:2376
    SET DOCKER_CERT_PATH=C:\Users\XXX\.docker\machine\machines\myvm
    SET DOCKER_MACHINE_NAME=myvm
    SET COMPOSE_CONVERT_WINDOWS_PATHS=true
    REM Run this command to configure your shell:
    REM @FOR /f "tokens=*" %i IN ('docker-machine env myvm') DO @%i

 

關聯虛擬機

常見好虛擬機后,docker命令就直接關聯到虛擬機中了。一個問題是,如何知道docker命令關聯到那個虛擬機的。我們可以通過docker-machine ls命令查看當前docker虛擬機狀態。

    > docker-machine ls
    NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
    default * virtualbox Running tcp://192.168.99.102:2376 v18.09.2
    myvm - virtualbox Running tcp://192.168.99.100:2376 v18.09.2

可以看出,當前活躍的是名為default的虛擬機。

那么,我們如何修改活躍的虛擬機呢,實際上docker-toolbox會在系統中設置一堆環境變量:

    DOCKER_HOST=tcp://192.168.99.102:2376
    DOCKER_MACHINE_NAME=default
    DOCKER_TLS_VERIFY=1
    DOCKER_TOOLBOX_INSTALL_PATH=C:\Program Files\Docker Toolbox

docker工具是通過這些環境變量判斷當前活躍的虛擬機的。也就是說,只要修改該環境變量參數即可切換虛擬機。敏銳的人可能會發現這個和docker-machine env中的輸出非常類似,並且docker-machine env中最后還告訴你了如何應用這些環境變量。

    REM Run this command to configure your shell:
    REM @FOR /f "tokens=*" %i IN ('docker-machine env myvm') DO @%i

根據其提示,直接使用@FOR /f "tokens=*" %i IN ('docker-machine env myvm') DO @%i命令即可。

關聯好虛擬機后,剩下的使用方式就和本地docker使用一樣了。

 

虛擬機命令行

創建好虛擬機后,也可以通過docker-machine ssh myvm命令進入其虛擬機命令行,從而進行虛擬機相關操作。

不過這個命令行只有zsh,有的終端下會出現亂碼(默認的控制台就有亂碼),此時可以通過使用cmder等終端來解決。

 

設置國內鏡像源

設置國內鏡像源相信是廣大國內用戶必不可少的一步,對於Boot2Docker這個linux的設置方式如下:

    docker-machine ssh default
    sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=https://registry.docker-cn.com |g" /var/lib/boot2docker/profile
    exit
    docker-machine restart default

 

設置共享文件夾

很多時候,我們想讓docker的數據文件夾寫入本地windows的文件系統。解決方案比較簡單:由於dock server是在virtualbox的虛擬機,只需要首先掛在一個共享文件夾,然后啟動docker的時候,將其寫入那個共享文件夾在虛擬機中的路徑即可。

其實docker toolbox本身也想到了這一點,默認就將C:\Users給共享給virtualbox了,映射成了文件夾/c/Users。不過這種方式往往不符合我們的使用習慣,這個時候需要自己在virtualbox中建文件夾了。(估計virtualbox也有建共享文件夾的api,如果能用命令行的話就方便些,后期找到了再補充)

 

修改默認docker虛擬機的位置

docker虛擬機默認創建在c盤,有的有潔癖的人還是不是很習慣的,想自定義其存儲位置。docker toolbox 沒有提供手動設置的方式,但我們可以通過修改配置項的方式來實現我們的目的。

  1. 在Windows的系統環境添加MACHINE_STORAGE_PATH ,指向自定義虛擬機的位置,如D:\VM\machines
  2. 復制boot2docker.iso到虛擬機的位置同級目錄cache上(D:\VM\cache),如果不是最新的話需要下載最新。
  3. 停止現有的所有虛擬機,移動至新位置,重新啟動虛擬機

 

參考文章

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM