本文的案例結(jié)合了Docker的三大編排工具Docker Machine、Compose與Swarm,值得讀者們參閱。 Docker現(xiàn)在已經(jīng)推出了一些新的命令行工具,這些工具可以簡(jiǎn)單的編排(orchestration )Docker實(shí)例、集群以及容器管理。它們是:
這三種技術(shù)中,Swarm目前不適合在生產(chǎn)中使用,因此在這篇文章中我不會(huì)講關(guān)于它的太多細(xì)節(jié)。 Docker Machine對(duì)于直接下載預(yù)編譯的二進(jìn)制文件來(lái)說(shuō),我決定使用 Homebrew(OS X的管理包工具):這樣就安裝了docker-machine。 我已經(jīng)安裝了 VirtualBox,并且要?jiǎng)?chuàng)建一個(gè)叫“testing”的虛擬機(jī):
docker-machine使用幾個(gè)命令來(lái)幫助你連接到本地安裝的Docker客戶端:
我現(xiàn)在啟用了一個(gè)虛擬機(jī)并準(zhǔn)備使用Docker。 和其他新安裝的一樣,讓我們運(yùn)行一個(gè)“Hello World”:
最后,你可以使用docker-machie ssh machine-name命令SSH到虛擬機(jī):
太棒了,我現(xiàn)在有一個(gè)虛擬機(jī)運(yùn)行在我的電腦上,接下來(lái)呢? 設(shè)計(jì)docker-machine就是和以下公有和私有的云服務(wù)提供商(以后會(huì)添加更多)一起使用的。
讓我們使用docker-machine來(lái)啟用一個(gè)Digital Ocean的實(shí)例。你需要生成一個(gè)Personal Access Token。一旦用token啟用機(jī)子就會(huì)像下面所示一樣:
那么發(fā)生了什么呢?docker-machine訪問(wèn)我的Digital Ocean賬戶通過(guò)API并且啟用了以下配置的實(shí)例:
這些默認(rèn)的配置可以通過(guò)提供更多的選項(xiàng)被修改,運(yùn)行docker-machine create --help獲取幫助查看所有帶例子的選項(xiàng)。 一旦實(shí)例開啟,docker-machine通過(guò)SSH連接到安裝、配置以及開啟的最新的Docker上。 所以,我們現(xiàn)在有兩臺(tái)Machines,一個(gè)在本地,一個(gè)在Digital Ocean上。 讓我們?cè)俅芜\(yùn)行“Hello World”,但是這次使用剛才啟動(dòng)的那個(gè)實(shí)例:
并且SSH到那個(gè)機(jī)器中:
最終,你可以使用docker-mashie stop machine-name和docker-mashie rm machine-name來(lái)停止和移除machines。請(qǐng)注意當(dāng)使用rm時(shí),是不會(huì)提示你是否確定刪除。
總結(jié),以上就是docker-machie的總覽。正如你看到的,它確實(shí)很方便在很多不同的供應(yīng)商中來(lái)引導(dǎo)Docker服務(wù)實(shí)例,并且使用一個(gè)本地machine命令就可以操控他們。 Docker ComposeDocker開始充滿生機(jī)是因?yàn)橛辛薋ig, 這是我曾在以前的文章中寫到過(guò),當(dāng)前版本并沒(méi)有添加太多的新功能,但它開始奠定了與docker-swarm工作的基礎(chǔ),單擊 這里查看詳細(xì)日志。像docker-machine一樣,我使用Homebrew公式安裝docker-compose。
然后,使用docker-machine創(chuàng)建一個(gè)Docker服務(wù)實(shí)例:
因?yàn)閐ocker-compose不直接與docker-machine交互,我們需要告訴docker客戶端那些剛剛啟動(dòng)的服務(wù)器實(shí)例的詳細(xì)信息。 此命令注入所需Docker客戶端的環(huán)境變量來(lái)連接到服務(wù)實(shí)例,要看到他們,你只需運(yùn)行docker-machine env machine-name。 往后它就像Fig一樣,除了fig.yml文件現(xiàn)在應(yīng)該改為docker-compose.yml,在我以前的博文里有一個(gè)fig.yml文件描述:
它啟用兩個(gè)容器并且把它們連接到一起,還有在Nginx容器內(nèi)的/var/www/html被掛載到host的./web文件夾下。我準(zhǔn)備運(yùn)行docker-compose命令的文件夾的結(jié)構(gòu)是這樣的: 開始我要拉取需要啟用的鏡像,你可以忽略此部分。 現(xiàn)在鏡像已經(jīng)被拉取下來(lái),是時(shí)候開啟容器了: 我們現(xiàn)在有了兩個(gè)正在運(yùn)行的容器: 你也可以打開瀏覽器: 在我的例子中我看到PHPinfo()頁(yè)面,如下: 一旦容器開啟,你可以使用docker exec來(lái)連接到容器內(nèi)部:
最后你可以停止以及移除容器,當(dāng)然還有Docker實(shí)例: Docker Swarm在進(jìn)一步討論之前,先看下官方文檔的警告:警告:Swarm當(dāng)前是beta版本,因此后期可能會(huì)有變化。我們還不推薦在生產(chǎn)環(huán)境中使用。現(xiàn)在讓我們使用Homebrew來(lái)安裝docker-swarm:
因?yàn)槲覀円呀?jīng)安裝了docker-machine,我將要使用它在本地創(chuàng)建一個(gè)集群。首先,我們需要啟動(dòng)一個(gè)實(shí)例并運(yùn)行swarm容器:
正如你所見,當(dāng)容器啟動(dòng)時(shí),我得到了一個(gè)token:63e7a1adb607ce4db056a29b1f5d30cf,我將要用它來(lái)添加更多的節(jié)點(diǎn),但是首先我們需要?jiǎng)?chuàng)建一個(gè)Swarm master:
然后,我們需要連接Docker客戶端到Swarm上,這就需要將--swarm添加到$(docker-machine env machine-name)命令上: 現(xiàn)在讓我們添加另一個(gè)節(jié)點(diǎn):
我們現(xiàn)在有了2個(gè)節(jié)點(diǎn)的集群 - “swarm-master”: 使用docker info來(lái)獲取更多有關(guān)集群的信息: 太棒了,但這意味著什么? 讓我們拉取一些鏡像: 注意到我是如何在“swarm-master”上拉取redis鏡像以及在swarm-node-00上拉取mysql的,現(xiàn)在我可以保證容器只在有鏡像的那個(gè)節(jié)點(diǎn)上啟用:
另一個(gè)例子是使用節(jié)點(diǎn)的端口,讓我們?cè)趦蓚€(gè)節(jié)點(diǎn)上都拉取我的nginx-php鏡像: 現(xiàn)在,讓我們啟用一個(gè)容器并綁定到80端口。 再有: 你會(huì)說(shuō)這沒(méi)什么特別的???正常來(lái)說(shuō),當(dāng)試圖啟動(dòng)第二個(gè)容器時(shí),你會(huì)得到如下信息因?yàn)槟悴挥脤⑼粋€(gè)端口綁定到兩個(gè)容器上: 然而,在集群的情況下,因?yàn)镈ocker知道集群節(jié)點(diǎn)運(yùn)行的是什么以及哪些端口是在使用的。Docker可以簡(jiǎn)單地通過(guò)Swarm在“swarm-node-00”上啟動(dòng)容器并且它知道“swarm-master”已經(jīng)使用了80端口:
所有這一切都沒(méi)有提示或特殊的命令行,它的幫助僅僅是用它來(lái)做到這些。 正如你所看到的,docker-swarm仍然有非常大的發(fā)展?jié)摿?,但也有一些不如意的地方,如容器不能夠跨?jié)點(diǎn)通訊。然而,伴隨著 (他們使用Open vSwitch開發(fā)了一個(gè)基于軟件定義網(wǎng)絡(luò)解決方案的容器)的加入,我想用不了多長(zhǎng)時(shí)間這個(gè)問(wèn)題就能得到解決。 最后,讓我們刪除在運(yùn)行的實(shí)例: 就這樣吧,期待在未來(lái)的幾個(gè)月這些工具的更新,我也會(huì)進(jìn)一步跟進(jìn)。 原文:Docker Machine, Compose & Swarm (翻譯:田浩浩 校對(duì):李穎杰) 來(lái)自:http:///article/275 |
|