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