Docker是什麼?
簡單得來說,Docker是一個由GO語言寫的程式啟動並執行“容器”(Linux containers, LXCs); 目前雲端服務的基石是作業系統層級的隔離,在同一台物理伺服器上虛擬出多個主機。Docker則實現了一種應用程式層級的隔離; 它改變我們基本的開發、操作單元,由直接操作虛擬機器主機(VM),轉換到操作程式啟動並執行“容器”上來。
Docker的好處
Docker的優點:運行快、部署敏捷、靈活、輕量、開源免費。
Boot2Docker是一個專為Docker而設計的輕量級Linux發行包,解決Windows或者OS X使用者不能安裝Docker的問題。Boot2Docker完全運行於記憶體中,24M大小,啟動僅5-6秒。Boot2Docker需要運行在 VirtualBox中。
Docker for Windows的安裝使用步驟
檢查系統版本與硬體虛擬化
首先,檢查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進行開啟。
進入BIOS的方法:在電腦開機啟動中,當螢幕下方出現“Press DEL to enter SETUP”提示時,立即按“Del”鍵就能進入BIOS設定程式。有些類型的BIOS,則需要在開啟啟動Logo畫面按F2或F10鍵進入,具體根據工具提示操作就可以。
舉例,找到Intel Virtual Technology設定項,將Disabled更改為Enabled。然後儲存退出,即可開啟VT功能。如:
對於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
接下來需要安裝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-worldUnable to find image 'hello-world:latest' locallyPulling repository hello-world91c95931e552: Download complete a8219747be10: Download complete Status: Downloaded newer image for hello-world:latestHello 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 fromthe Docker Hub. (Assuming it was not already locally available.) 3. The Docker daemon created anew container from that image which runs the executable that produces the output you are currently reading. 4. The Docker daemon streamed that output tothe Docker client, which sent itto your terminal.To try something more ambitious, you can run an Ubuntu container with: $ docker run -it ubuntu bashFor 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:2376export DOCKER_CERT_PATH=/c/Users/Administrator/.boot2docker/certs/boot2docker-vmexport DOCKER_TLS_VERIFY=1
執行後輸入export 查看是否寫入成功。
若要使得Windows自身的CMD中也可以操作Docker命令,在cmd中鍵入以下命令:
set DOCKER_HOST=tcp://192.168.59.103:2376set DOCKER_CERT_PATH=C:/Users/Administrator/.boot2docker/certs/boot2docker-vmset 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 sshsudo 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 pidsudo /etc/init.d/docker restart
最後通過ps -ef |grep docker命令再檢查一遍進程號和已耗用時間,保證docker重啟成功。
ps -ef |grep dockerexit
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 sshsudo 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 sshsudo mount -t vboxsf your-other-share-name /some/mount/location
或
boot2docker sshmount -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 00
或
your-other-share-name /some/mount/location vboxsf defaults 00
這樣就能夠自動掛載了(需要安裝用戶端增強包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-p8000:80-p2222: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-p8000:80-p2222:22--name php -v//f//projects//phpdev:/var/www/html local.registry.com:5000/php
然後,通過docker ps 命令,可以查看當前運行中的容器。
$ boot2docker.exe ip192.168.59.103
我們可以通過ssh進入到當前php容器,也可使用XShell等SSH工具串連。
SSH登入命令為:
ssh -p 2222 root@192.168.59.103
註: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,命令如下
$dockerrun-it--rm--namecentos--volume=/datalocal.registry.com:5000/centos/bin/bash
注意:在Git Bash需要用雙斜線,執行
$dockerrun-it--rm--namecentos--volume=//datalocal.registry.com:5000/centos//bin//bash
將宿主機目錄掛載到資料卷,命令如下:
$ docker run -it--rm --name centos -v /c/Users/phpdev:/datalocal.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。
下一篇會分享介紹docker安裝使用中常見錯誤的處理方法。
參考文章:
http://docs.docker.com/userguide/ “docker官方文檔-使用者指南”
https://github.com/boot2docker/boot2docker “Boot2docker官方文檔”
http://blog.pavelsklenar.com/5-useful-docker-tip-and-tricks-on-windows/
本文來自於CSDN部落格,轉載請註明出處,謝謝!
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
以上就介紹了Docker for Windows安裝與Linux+PHP開發環境搭建(一),包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。