簡單得來說,Docker是一個由GO語言寫的程序運行的“容器”(Linux containers, LXCs); 目前雲服務的基石是操作系統級別的隔離,在同一台物理服務器上虛擬出多個主機。Docker則實現了一種應用程序級別的隔離; 它改變我們基本的開發、操作單元,由直接操作虛擬主機(VM),轉換到操作程序運行的“容器”上來。
Docker的優點:運行快、部署敏捷、靈活、輕量、開源免費。
Boot2Docker是一個專為Docker而設計的輕量級Linux發行包,解決Windows或者OS X用戶不能安裝Docker的問題。Boot2Docker完全運行於內存中,24M大小,啟動僅5-6秒。Boot2Docker需要運行在 VirtualBox中。
首先,檢查Windows操作系統版本號
Boot2Docker的運行,要求操作系統至少為Windows 7.1,8/8.1。實測Windows 7 旗艦版(Windows 7 Ultimate)也支持。
其次,需要確保你的系統支持硬件虛擬化,且虛擬化為已啟用狀態。
開啟虛擬化技術支持,需幾個方面的條件支持:芯片組自身支持、BIOS提供支持、處理器自身支持、操作系統支持。
操作系統方面,主流操作系統均支持VMM管理,因此無需考慮。而芯片組方面,從Intel 945(除上網本外)時代開始均已經支持,因此也無需考慮。CPU方面,可以通過Intel官方網站進行查詢或者第三方檢測軟件進行判斷。因此,更多的是查看BIOS方面是否支持。
對於Windows 8/8.1系統,打開任務管理器-“性能”選項卡-CPU,可以看到虛擬化的開啟狀態。如下圖:
如果為“未啟用”狀態,需要到主板BIOS進行開啟。<喎?http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPr34yOtCSU9TtcS3vbeoo7rU2rzGy+O7+r+qu/rG9Lav1tCjrLWxxsHEu8/Ct72z9s/WJmxkcXVvO1ByZXNzIERFTCB0byBlbnRlciBTRVRVUCZyZHF1bzvM4cq+yrGjrMGivLSwtCZsZHF1bztEZWwmcmRxdW87vPy+zcTcvfjI60JJT1PJ6NbDs8zQ8qGj09DQqcDg0M21xEJJT1OjrNTy0OjSqtTav6rG9Mb0tq9Mb2dvu63D5rC0RjK78kYxMLz8vfjI66Osvt/M5bj5vt3GwcS7zOHKvrLZ1/e+zb/J0tShozwvcD4NCjxwPr7ZwP2jrNXStb1JbnRlbCBWaXJ0dWFsIFRlY2hub2xvZ3nJ6NbDz+6jrL2rRGlzYWJsZWS4/LjEzqpFbmFibGVkoaPIu7rzsaO05s3Ls/ajrLy0v8m/qsb0VlS5psTcoaPI58/CzbyjujwvcD4NCjxwPjxpbWcgYWx0PQ=="Enable Intel Virtual Technology" src="http://www.2cto.com/uploadfile/Collfiles/20150829/2015082909414245.png" title="\" />
對於Windows 7系統,需要安裝微軟的硬件虛擬化檢測工具(Microsoft? Hardware-Assisted Virtualization Detection Tool)來判斷處理器是否支持虛擬化,以及虛擬化是否已開啟。下載安裝HAV detection tool,檢測結果遵照屏幕提示,然後參考HAV Detection Tool User Guide 進行下一步操作。
下載地址:
HAV Detection Tool
http://download.microsoft.com/download/1/9/F/19FD407F-A7E9-4393-A845-D0B1F539678E/havdetectiontool.exe
HAV Detection Tool User Guide
http://download.microsoft.com/download/1/9/F/19FD407F-A7E9-4393-A845-D0B1F539678E/HAV%20Detection%20Tool%20-%20User%20Guide.mht
如果屏幕提示如下圖,則表明當前計算機處理器支持硬件虛擬化並已經啟用。
接下來需要安裝Boot2Docker與一些輔助性軟件。具體包括:
Docker Client for Windows
Boot2Docker management tool and ISO
Oracle VM VirtualBox
Git MSYS-git UNIX tools
首先點擊下載Boot2Docker for Windows。
下載地址:
https://s3.amazonaws.com/github-cloud/releases/18047765/825908bc-15b8-11e5-96cb-9a42a043cc39.exe?response-content-disposition=attachment%3B%20filename%3Ddocker-install.exe&response-content-type=application/octet-stream&AWSAccessKeyId=AKIAISTNZFOVBIJMK3TQ&Expires=1437386585&Signature=wM%2BTTYN4yqc8fhh7WAEeZw7A5cE%3D
接著雙擊已下載的docker-install.exe安裝文件,開始安裝。安裝過程最好提前關閉計算機的相關安全軟件。
官方下載速度比較慢,可以嘗試到國內的DaoCloud下載http://get.daocloud.io/
安裝完成後啟動Boot2Docker。
打開Boot2Docker終端後,如果系統出現用戶賬戶控制(User Account Control)提示,請選擇“是(Yes)”,以確保虛擬機VirtualBox 完成一些計算機配置的更改。若無提示,一般無需設置。
注:用戶賬戶控制(UAC)是Windows Vista的一個新增的安全功能。它可以防止惡意軟件獲取特權,就算用戶是以管理員帳戶登錄也可以起到保護作用。可在控制面板修改UAC,以Win7旗艦版為例是:控制面板(Control Panel ) → 所有控制面板項(All Control Panel Items) → 用戶賬戶(User Account) → 更改用戶賬戶控制設置(Change User Account Control setting)。
終端需要一定初始化時間來啟動Boot2Docker,執行Docker運行所需的環境變量bash腳本,如果成功啟動,會出現一$提示符。
使用boot2docker ssh命令可以進入VM。稍後需要用到該命令進行一些基礎配置。
現在可以直接使用docker命令了。
在終端執行命令docker run hello-world,回車。若運行正常,會輸出如下內容:
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
Pulling repository hello-world
91c95931e552: Download complete
a8219747be10: Download complete
Status: Downloaded newer image for hello-world:latest
Hello from Docker.
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(Assuming it was not already locally available.)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
For more examples and ideas, visit:
http://docs.docker.com/userguide/
了解容器與鏡像
以命令docker run hello-world 為例:
容器就是一個簡化版的Linux操作系統,鏡像就是裝載到容器中的軟件集合,此命令執行後,Docker會按照順序發生以下行為:
a. 檢查是否已安裝hello-world鏡像
b. 若未安裝,則從Docker遠程倉庫(Docker Hub)下載該鏡像
c. 加載該鏡像到容器中,並運行。
創建Doker PHP容器,啟用PHP開發環境
Docker Hub中有個人開發者提供的鏡像,也有公司、組織結構上傳的官方鏡像,你可以使用Docker Hub的鏡像,也可以使用自己本地私有的鏡像(如local.registry.com:5000/php)。以PHP開發環境的搭建為例,繼續說明Docker命令的使用方法。
這裡使用的是自建私有鏡像(已經集成Linux+PHP+Apache),私有鏡像地址為:172.16.100.71:5000/php
1、設置Windows系統、boot2docker VM的host
a. 設置Windows系統本地host
設置Windows系統本地host主要是為方便在CMD命令提示符中進行操作。若是在Git Bash中操作則可以選擇略過Windows系統本地host設置。
位置:C:\Windows\System32\drivers\etc\hosts
在文件中增加一行 172.16.100.71 local.registry.com
b. 設置boot2docker虛擬機的host
通過boot2docker ssh命令進入虛擬機,然後執行命令:
sudo vi /etc/hosts
在文件中增加一行: 172.16.100.71 local.registry.com
exit
也可使用組合命令:
boot2docker ssh "echo $'172.16.100.71 local.registry.com' | sudo tee -a /etc/hosts"
2、檢查設置環境變量
在Git Bash中輸入:
export
查看是否已自動設置環境變量:DOCKER_HOST,DOCKER_CERT_PATH,DOCKER_TLS_VERIFY
boot2docker shellinit 可以顯示Docker客戶端的環境變量,所以可使用以下命令自動設置環境變量
eval "$(boot2docker shellinit)"
若此命令不能成功設置,需要輸入以下命令手動添加:
export DOCKER_HOST=tcp://192.168.59.103:2376
export DOCKER_CERT_PATH=/c/Users/Administrator/.boot2docker/certs/boot2docker-vm
export DOCKER_TLS_VERIFY=1
執行後輸入export 查看是否寫入成功。
若要使得Windows自身的CMD中也可以操作Docker命令,在cmd中鍵入以下命令:
set DOCKER_HOST=tcp://192.168.59.103:2376
set DOCKER_CERT_PATH=C:/Users/Administrator/.boot2docker/certs/boot2docker-vm
set DOCKER_TLS_VERIFY=1
執行後輸入set 查看是否寫入成功。
不過通過set命令設置的環境變量是臨時有效的,當關閉cmd命令行窗口後就不再起作用。
永久性環境變量的設置方法是:“計算機-屬性-高級系統設置-高級-環境變量”,新建上述三個系統變量並填寫對應值。設置完成後重新打開CMD即可生效。
另外,如果想在CMD要運行boot2docker ssh等命令,還需要設置Git相關的環境變量。方法是:
set PATH=%PATH%;"C:\Program Files (x86)\Git\bin"
永久環境變量設置方法同上,在系統變量PATH字段追加以下目錄(具體目錄根據自己Git安裝目錄進行添加)
;C:\Program Files (x86)\Git\bin;
然後重新啟動cmd即生效。
3、設置–insecure-registry選項
從docker 1.3.1開始,連接不安全的私有鏡像,默認是不允許的。現在我們要下載自建的私有鏡像,需要通過以下方式設置:
boot2docker ssh
sudo vi /var/lib/boot2docker/profile
增加一行
EXTRA_ARGS="--insecure-registry local.registry.com:5000"
保存,然後重啟docker服務:
sudo /etc/init.d/docker restart
也可以在Git Bash合並操作:
boot2docker ssh "echo $'EXTRA_ARGS=\"--insecure-registry local.registry.com:5000\"' | sudo tee -a /var/lib/boot2docker/profile && sudo /etc/init.d/docker restart"
說明:local.registry.com:5000這樣的私有鏡像地址也可用IP地址代替。
tee命令參數 -a為追加內容到文件,視情況使用。
sudo /etc/init.d/docker restart命令有時會重啟失敗,所以我們可以通過以下命令觀察docker進程的信息:
ps -ef |grep docker
若docker主進程(/usr/local/bin/docker)PID比較小,且運行時間比較久,那麼說明沒有重啟成功。需要強制殺死該進程後再重啟。
sudo kill -9 pid
sudo /etc/init.d/docker restart
最後通過ps -ef |grep docker命令再檢查一遍進程號和運行時間,保證docker重啟成功。
ps -ef |grep docker
exit
4、將私有鏡像下載到本地
docker pull local.registry.com:5000/php
在鏡像運行前,先將其下載到本地,如果報錯,參照之前步驟或錯誤處理進行解決,解決後繼續執行後續步驟
5、檢查、設置虛擬機共享文件夾
VirtualBox默認將宿主機目錄C:\Users作為共享文件夾,並自動掛載到虛擬機c/Users路徑。所以一般情況下我們通常選擇將數據放在宿主機C:\Users目錄,然後通過docker命令掛載到容器。但作為Windows用戶,大家的C盤常作為系統盤,關鍵數據放在C盤是比較危險的,一旦Windows系統損壞無法啟動有可能造成數據丟失。
所以,我們想到:能不能自己添加其他盤符下的共享文件夾,掛載到容器?
當然可以!!!步驟有些繁瑣,繼續往下看。
經過嘗試,在C:\Users目錄創建指向其他盤符共享文件夾的快捷方式這個方法是行不通的。
下面是正確的操作步驟:
打開boot2docker虛擬機GUI,點擊“設置”-“共享文件夾”,在“固定分配”菜單右鍵“添加共享文件夾”,如圖:
a. 執行boot2docker ssh 進入虛擬機,先確定要掛載到的目錄,若目錄不存在需要手動創建:
boot2docker ssh
sudo mkdir -p /f/projects/phpdev
b. 創建要掛載到的目錄後,執行以下命令進行共享文件夾掛載。
sudo mount -t vboxsf f/projects/phpdev /f/projects/phpdev
或
sudo mount -t vboxsf -o uid=1000,gid=50 f/projects/phpdev /f/projects/phpdev
如下圖:
mount完成後退出, boot2docker ssh重新進入虛擬機,查看宿主機共享文件夾是否同步到掛載目錄。
從圖中可以看到,宿主機本地目錄F:\projects\phpdev下的文件/文件夾已經同步顯示到當前虛擬機掛載目錄下,即/f/projects/phpdev路徑下。
由於下文步驟六的docker容器是將/f/projects/phpdev掛載到容器Linux環境的/var/www/html路徑,這一步操作就是為了接下來步驟做准備。
我們一般情況下,為了保證數據安全性和完整性,不會在docker創建的容器環境中永久保存數據。常見的方法是將本地宿主機的文件系統映射到容器環境的文件系統,這樣能確保容器環境中生成的數據直接保存在用戶主機的磁盤,而不會由於容器損壞或未及時將容器持久化而造成數據丟失。
根據boot2docker官方(https://github.com/boot2docker/boot2docker)的描述,boot2docker內置了一個專門用於虛擬機文件夾共享的客戶端增強包(VirtualBox Guest Additions)。
若以下共享文件夾名稱存在,則該共享文件夾則自動掛載到以下位置:
Users 掛載到 /Users
/Users掛載到 /Users
c/Users掛載到 /c/Users
/c/Users掛載到 /c/Users
c:/Users掛載到 /c/Users
如果需要共享其他文件路徑,則需要執行以下命令:
boot2docker ssh
sudo mount -t vboxsf your-other-share-name /some/mount/location
或
boot2docker ssh
mount -t vboxsf -o uid=1000,gid=50 your-other-share-name /some/mount/location
注:Linux命令id可查看用戶的UID(對應/etc/passwd)和GID(對應/etc/group)
不過,如果重啟Windows,這些設置會被清除,需要再次進行掛載操作(當然,直接重啟boot2docker-vm同樣會清除所有配置數據)。如果你不想每一次都手動掛載,可以在/etc/fstab中添加一項
your-other-share-name /some/mount/location vboxsf rw,gid=100,uid=1000,auto 0 0
或
your-other-share-name /some/mount/location vboxsf defaults 0 0
這樣就能夠自動掛載了(需要安裝客戶端增強包VirtualBox Guest Additions)。
執行完手動掛載命令,正常情況下,/some/mount/location目錄下已經可以顯示共享文件夾的內容了。
由於boot2docker本身是虛擬機,docker也作為虛擬機環境,要使用docker run -v path1:path2成功掛載,實際需要進行兩步映射:共享文件夾先由宿主機掛載到boot2docker虛擬機,再由boot2docker虛擬機掛載到docker容器環境。
掛載前先建立掛載目錄:
sudo mkdir -p /some/mount/location
然後再執行上述mount掛載命令。
卸載共享文件夾,使用命令sudo umount -f /f/projects/phpdev
注意:
卸載共享文件夾需要先退出掛載目錄,再卸載,否則會報錯:
umount: can’t forcibly umount /f/projects/phpdev: No such file or directory
同時要注意卸載目錄一定要寫對,注意盤符F前的斜線/,如果要卸載的目錄沒有掛載過,則會報錯:
umount: can’t forcibly umount /f/projects/phpdev: Invalid argument
6、根據所提供鏡像,創建並運行一個容器
根據拉到本地的私有鏡像(Linux+Apache+PHP集成鏡像),創建並運行一個容器:
docker run -d -p 8000:80 -p 2222:22 --name php -v /f/projects/phpdev:/var/www/html local.registry.com:5000/php
其中80端口是HTTP/Nginx默認端口,22端口是Linux SSH默認端口。以後台運行方式,將宿主機本地目錄/f/projects/phpdev掛載到容器。
注意:
若在Windows系統的Git bash下執行會掛載失敗報錯,因為msysgit會將/c/Users這樣的目錄自動轉為c:\Users,所以需要使用雙斜線,Git bash中輸入命令為:
docker run -d -p 8000:80 -p 2222:22 --name php -v //f//projects//phpdev:/var/www/html local.registry.com:5000/php
然後,通過docker ps 命令,可以查看當前運行中的容器。
$ boot2docker.exe ip
192.168.59.103
我們可以通過ssh進入到當前php容器,也可使用XShell等SSH工具連接。
SSH登錄命令為:
ssh -p 2222 [email protected]
注:boot2docker ssh的賬號密碼為user/docker ,私有鏡像為root/hellonihao
SSH登錄後就可以看到我們熟悉的Linux目錄結構了。
如果本地沒有phpdev文件夾將會自動創建,在該目錄下新建個phpinfo.php測試文件,用於輸出php配置信息。
Docker的宿主機是boot2docker的虛擬機,因此需要使用虛擬機的ip進行訪問,獲取ip方式為boot2docker ip。
所以上述phpinfo.php文件訪問地址:192.168.59.103:8000/phpinfo.php
舉例,僅根據centos基礎鏡像建立一個容器,並建立一個數據卷/data,命令如下
$ docker run -it --rm --name centos --volume=/data local.registry.com:5000/centos /bin/bash
注意:在Git Bash需要用雙斜線,執行
$ docker run -it --rm --name centos --volume=//data local.registry.com:5000/ce
ntos //bin//bash
將宿主機目錄掛載到數據卷,命令如下:
$ docker run -it --rm --name centos -v /c/Users/phpdev:/data local.registry.com:5000/centos /bin/bash
注意:在Git Bash下需要用雙斜線,即:
$ docker run -it --rm --name centos -v //c//Users//phpdev:/data local.registry.com:5000/centos //bin//bash
附其他常用命令:
docker rm -f php
docker ps -l
docker images -a
docker rmi
docker stop
docker run
docker kill
以上是docker for Windows版本的安裝方法和docker使用步驟的介紹。如果有錯誤疏漏,歡迎留言指正,一起探討學習docker。