最近在研究虛擬化,容器和大數據,所以從Docker入手,下面介紹一下在Windows下怎么玩轉Docker。
Docker本身在Windows下有兩個軟件,一個就是Docker,另一個是Docker Toolbox。這里我選擇的是Docker Toolbox,為什么呢?參見官方文檔:
官方下載地址(推薦):https://blog.docker.com/2015/08/docker-toolbox/
從阿里雲下載的docker-toolbox-18.03.0-ce安裝完成后在啟動的時候報錯好多,官方下的19.03.1版本的啟動很順利
首先我們從官網下載最新版的Windows Docker Toolbox。安裝后會安裝一個VirtualBox虛擬機,一個Kitematic,這是GUI管理Docker的工具,沒有發布正式版,不推薦使用,另外還有就是我們在命令行下用到的docker-machine和docker命令了。
安裝
安裝過程很簡單,保持默認選項,直接【next】即可。VirualBox和Git如果已經安裝,也可以不選
安裝完成后,桌面上會多出3各圖標,如下。其中VirtualBox提供了linux虛擬機的運行環境,Docker Quickstart Terminal用於快速介入linux虛擬機,提供命令行交互,Kitematic是docker GUI很少用到。
安裝的時候要把Git For Windowns勾選起來,不然會出現圖下錯誤
或者參考這里解決https://blog.51cto.com/suyanzhu/2315322
啟動
添加環境變量MACHINE_STORAGE_PATH值為E:\VirtualBox VMs\Default
(虛擬機文件存儲的位置,放在E盤,默認在C盤下,避免C盤空間不足)把已經安裝的虛擬機文件轉移一個盤老是出錯,不是知道為什么,所以建議在創建default之前把我虛擬機文件目錄設置好。
第一次運行Docker Quickstart Terminal時會進行Docker環境的初始化,會在VirtualBox中自動創建名字為【default】的linux虛擬機,再此過程中會用到boot2docker.iso鏡像文件。默認情況下,啟動程序會從GitHub上下載此文件的最新版,但由於文件相對較大且速度不給力,多數情況下會下載失敗,造成Docker環境無法啟動,如下圖:
解決方法:
其實DockerToolbox安裝文件自帶了boot2docker.iso鏡像文件,位於安裝目錄下(如C:\Program Files\Docker Toolbox) ,將此文件拷至E:\VirtualBox VMs\Default\cache目錄下,然后重新啟動,結果還是出錯,然后在網絡斷開的情況下重新啟動,便可初始化成功。如下圖
其中 【192.168.99.100】是VirtualBox中名字為【default】虛擬機的ip地址。
鏡像加速
在國內使用Docker Hub的話就特別慢,為此,我們可以給Docker配置國內的加速地址。我看了一下,DaoCloud和阿里雲的鏡像加速還不錯,另外還有網易的蜂巢。選一個就行了。以DaoClound為例,注冊賬號,我用的加速地址是:https://alzgoonw.mirror.aliyuncs.com
然后到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訪問】
Docker Quickstart Terminal只適合用於初始化安裝default,后續管理docker建議還是用powershell
docker-machine 常用操作
#鏈接到default docker
docker-machine ssh default