1. 程式人生 > >Docker for Windows安裝與Linux+PHP開發環境搭建(一)

Docker for Windows安裝與Linux+PHP開發環境搭建(一)

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功能。如下圖:

Enable Intel Virtual Technology

對於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

如果螢幕提示如下圖,則表明當前計算機處理器支援硬體虛擬化並已經啟用。

Hardware-Assisted Virtualization Detection

安裝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。

Desktop Iconset

開啟Boot2Docker終端後,如果系統出現使用者賬戶控制(User Account Control)提示,請選擇“是(Yes)”,以確保虛擬機器VirtualBox 完成一些計算機配置的更改。若無提示,一般無需設定。

注:使用者賬戶控制(UAC)是Windows Vista的一個新增的安全功能。它可以防止惡意軟體獲取特權,就算使用者是以管理員帳戶登入也可以起到保護作用。可在控制面板修改UAC,以Win7旗艦版為例是:控制面板(Control Panel ) → 所有控制面板項(All Control Panel Items) → 使用者賬戶(User Account) → 更改使用者賬戶控制設定(Change User Account Control setting)。

UAC Setting

終端需要一定初始化時間來啟動Boot2Docker,執行Docker執行所需的環境變數bash指令碼,如果成功啟動,會出現一$提示符。

Boot2docker Start

使用boot2docker ssh命令可以進入VM。稍後需要用到該命令進行一些基礎配置。

boot2docker ssh

現在可以直接使用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 為例:

docker run container

容器就是一個簡化版的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為追加內容到檔案,視情況使用。

insecure-registry-setting

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,點選“設定”-“共享資料夾”,在“固定分配”選單右鍵“新增共享資料夾”,如圖:

VitualBox ShareFolder

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-sharefloder

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 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

PHPINFO-demo

舉例,僅根據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。

下一篇會分享介紹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部落格,轉載請註明出處,謝謝!