Docker Machine創(chuàng)建Azure虛擬主機(jī)
搭建環(huán)境向來(lái)是一個(gè)重復(fù)造輪子的過(guò)程,Docker Machine 則把用戶(hù)搭建 Docker 環(huán)境的各種方案匯集在了一起。筆者在《Docker Machine 簡(jiǎn)介》一文中演示了使用 Docker Machine 在本地的 vSphere 主機(jī)中安裝 Docker 環(huán)境。但是在云計(jì)算大爆炸的今天,真正讓我們頭疼的可能是五花八門(mén)的 IaaS 平臺(tái)!這才是 Docker Machine 真正發(fā)揮威力的地方。
Docker Machine 把與平臺(tái)相關(guān)的部分封裝到了不同的驅(qū)動(dòng)中。只要為某個(gè) IaaS 平臺(tái)提供了驅(qū)動(dòng)程序,Docker Machine 就能夠支持該平臺(tái)上的操作。像 Azure、AWS、GCE、DigitalOcean 等大的廠(chǎng)商早已被支持。本文將以 Azure 為例介紹使用 Docker Machine 在 IaaS 上創(chuàng)建并管理 Docker 虛擬主機(jī)。
如果您還不了解 Docker Machine ,請(qǐng)先移步筆者的前兩篇文章補(bǔ)充相關(guān)知識(shí):《Docker Machine 簡(jiǎn)介》、《Docker Machine 詳解》。
準(zhǔn)備
我們的目標(biāo)是通過(guò) Docker Machine 在 Azure 上面創(chuàng)建一臺(tái)安裝了 Docker 的虛擬主機(jī)。因?yàn)?Azure 上的所有資源都必須通過(guò)訂閱賬號(hào)才能授權(quán)使用,所以我們首先得準(zhǔn)備一個(gè) Azure 的訂閱賬號(hào)。國(guó)內(nèi)的 Azure 一直在搞一元試用的活動(dòng),趕快去申請(qǐng)一個(gè)吧!
Azure 建議我們把資源通過(guò) resource group 組織起來(lái)。為了演示方便,我們新創(chuàng)建一個(gè)名為 nickcontainer 的 resource group 存放將要?jiǎng)?chuàng)建的虛機(jī):
此時(shí) resource group 中還沒(méi)有任何內(nèi)容。
創(chuàng)建云端虛機(jī)
使用 Docker Machine,一個(gè) create 命令就能搞定:
docker-machine create \ --driver azure \ --azure-environment AzurePublicCloud \ --azure-subscription-id xxxxxxxxxxxxxxxxxxxxxxxxxx \ --azure-location "East Asia" \ --azure-size Standard_A0 \ --azure-image canonical:UbuntuServer:16.04.0-LTS:latest \ --azure-ssh-user nick \ --azure-resource-group nickcontainer \ --azure-availability-set testvmtiggeras \ testvmtigger
使用國(guó)內(nèi) Azure 的用戶(hù)請(qǐng)把參數(shù) --azure-environment AzurePublicCloud 修改為 --azure-environment AzureChinaCloud。
執(zhí)行上面的命令,首先會(huì)驗(yàn)證我們是否有權(quán)限訪(fǎng)問(wèn) Azure 進(jìn)行操作:
這時(shí)執(zhí)行流程停住了,上圖的輸出中說(shuō)的很明確,需要在瀏覽器中訪(fǎng)問(wèn) https://aka.ms/devicelogin,然后輸入一個(gè)驗(yàn)證碼:
填入驗(yàn)證碼并繼續(xù):
在此處輸入你的訂閱賬號(hào)和密碼就可以進(jìn)完成身份驗(yàn)證了:
此時(shí)身份認(rèn)證過(guò)程已經(jīng)完成,可以關(guān)掉瀏覽器了。回到剛才的命令行,發(fā)現(xiàn)又接著往下執(zhí)行了。整個(gè)過(guò)程大概需要幾分鐘,直到輸出下面的內(nèi)容:
讓我們看看虛機(jī) testvmtigger 的狀態(tài):
已經(jīng)處于 "Runing" 狀態(tài),連上 Docker daemon 試試:
可以看到服務(wù)器端的版本是 17.05.0-ce,遠(yuǎn)高于本地客戶(hù)端的版本。
再讓我們回到 Azure 的 portal 上,看看 resource group 中新創(chuàng)建了哪些內(nèi)容:
一看嚇一跳,怎么這么多東西?其實(shí)玩過(guò) Azure 虛機(jī)的同學(xué)都知道,當(dāng)我們創(chuàng)建一臺(tái)虛機(jī)的同時(shí)會(huì)創(chuàng)建這臺(tái)虛機(jī)依賴(lài)的所有資源,比如存儲(chǔ)、虛擬網(wǎng)絡(luò)、網(wǎng)絡(luò)安全組、可用性集合、網(wǎng)卡、公有IP地址等等。這里我們只關(guān)心兩點(diǎn)(上圖中的紅框框)就足夠了:第一,虛機(jī)被成功創(chuàng)建了;第二,所有資源的區(qū)域都在東亞。
經(jīng)過(guò)一輪檢查,我們可以確定 create 命令很好的完成了任務(wù):在 Azure 上創(chuàng)建了虛機(jī),并且安裝了 Docker 環(huán)境。下面我們解釋一下 create 命令中主要的幾個(gè)參數(shù)。
參數(shù)詳解
--driver azure
driver 參數(shù)告訴 Docker Machine 我們操作的對(duì)象在 Azure 云上,需要使用 Azure 相關(guān)的接口來(lái)進(jìn)行操作。
--azure-environment AzurePublicCloud
其實(shí)存在多套相互獨(dú)立的 Azure 云環(huán)境,比如國(guó)內(nèi)的。所以需要用這個(gè)參數(shù)來(lái)指定具體的 Azure 云環(huán)境。默認(rèn)值是 AzurePublicCloud,指向我們說(shuō)的 Azure 國(guó)際版。連接國(guó)內(nèi)版需要指定為 AzureChinaCloud。
--azure-subscription-id xxxxxxxxxxxxxxxxxxxxxxxxxx
這個(gè)是與你賬號(hào)關(guān)聯(lián)的訂閱 ID,Azure 內(nèi)部的操作都是依賴(lài)于這個(gè) ID 的。
--azure-location "East Asia"
Azure 在全球各地部署了很多的數(shù)據(jù)中心,我們可以通過(guò) location 指定創(chuàng)建的資源所在的位置。這個(gè)位置當(dāng)然是越靠近用戶(hù)越好,國(guó)內(nèi)的國(guó)際版用戶(hù)選擇東亞稍微好一點(diǎn)。
--azure-size Standard_A0
Azuer 根據(jù)不同的 size(其實(shí)就是配置)對(duì)虛擬機(jī)進(jìn)行收費(fèi),demo 中選擇的 Standard_A0 大概是這個(gè)樣子:
雖然配置不高,但作為 demo 來(lái)說(shuō)已經(jīng)足夠用了。MS 提供了非常豐富的 size 可供選擇,如果你要?jiǎng)?chuàng)建生產(chǎn)環(huán)境的虛機(jī)實(shí)例,可能需要選擇每個(gè)月幾十到幾百美金的實(shí)例。
--azure-image canonical:UbuntuServer:16.04.0-LTS:latest
對(duì)于生產(chǎn)環(huán)境來(lái)說(shuō),虛機(jī)的鏡像是至關(guān)重要的。Demo 中使用了 ubuntu server 16.04 的鏡像,當(dāng)然我們可以在這里指定 Azure 支持的任何虛擬機(jī)鏡像。這點(diǎn)可比只能使用 boot2docker 的驅(qū)動(dòng)強(qiáng)多了!
--azure-ssh-user nick
可以通過(guò) SSH 登錄到虛擬機(jī)中的用戶(hù),讓我們?cè)囈幌拢?/p>
直接以用戶(hù) nick 登錄成功了,其實(shí) Docker Machine 已經(jīng)為這個(gè)用戶(hù)配置了通過(guò)秘鑰登錄的相關(guān)信息。
--azure-resource-group nickcontainer
新創(chuàng)建的資源所屬的 resource group。
清除資源
Docker Machine 不僅可以創(chuàng)建虛機(jī),還可以管理虛機(jī)。所謂的管理,僅僅是能夠 stop、start 和 restart 嗎?答案是可以有更多的功能,但是需要相關(guān)驅(qū)動(dòng)的支持。比如 rm 命令,對(duì)于 azure 驅(qū)動(dòng)來(lái)說(shuō),它是可以把剛才創(chuàng)建那一坨東西幾乎全部干掉的!執(zhí)行下面的命令:
$ docker-machine rm testvmtigger
這是一個(gè)很危險(xiǎn)的操作,所以會(huì)有一個(gè)確認(rèn)執(zhí)行的步驟,然后就真的把 Azure 上的資源給干掉了(除了存儲(chǔ)部分):
雖然筆者覺(jué)得這真的是一個(gè)很強(qiáng)很酷的功能,但還是要警告自己和同學(xué)們:一定要慎用!
總結(jié)
云服務(wù)為我們打開(kāi)了一扇新的大門(mén),當(dāng)然對(duì)運(yùn)維人員來(lái)說(shuō)也帶來(lái)了諸多的挑戰(zhàn)。如何選擇對(duì)云端操作友好的工具就成了我們提升效率的重要途徑。就 Docker 操作來(lái)說(shuō),Docker Machine 在這個(gè)方向上做了很好的嘗試。真心的希望這個(gè)工具能夠不斷的完善,成為運(yùn)維人員手中的一把利劍。
相關(guān)文章
使用Docker搭建Django,Nginx,R,Python部署環(huán)境的方法
本篇文章主要介紹了使用Docker搭建Django,Nginx,R,Python部署環(huán)境的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-02-02Docker方式啟動(dòng)tomcat訪(fǎng)問(wèn)首頁(yè)出現(xiàn)404錯(cuò)誤
這篇文章主要介紹了Docker方式啟動(dòng)tomcat訪(fǎng)問(wèn)首頁(yè)出現(xiàn)404錯(cuò)誤。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Docker Registry搭建私有鏡像倉(cāng)庫(kù)的實(shí)現(xiàn)方法
這篇文章主要介紹了Docker Registry搭建私有鏡像倉(cāng)庫(kù)的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10如何修改 docker 容器的啟動(dòng)參數(shù)
工作中我們經(jīng)常遇到docker容器運(yùn)行一段時(shí)間后,因?yàn)楦鞣N原因需要調(diào)整啟動(dòng)參數(shù)的情況,這篇文章主要介紹了如何修改 docker 容器的啟動(dòng)參數(shù),需要的朋友可以參考下2023-09-09Docker部署SpringBoot應(yīng)用的實(shí)現(xiàn)步驟
本文主要介紹了Docker部署SpringBoot應(yīng)用,Docker可以巧妙的解決函數(shù)庫(kù)、依賴(lài)沖突問(wèn)題,具有一定的參考價(jià)值,感興趣的可以了解一下2021-11-11使用docker在linux環(huán)境中部署springboot包的教程
這篇文章主要介紹了使用docker在linux環(huán)境中部署springboot包,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03