新聞中心
.NET 猿自從認(rèn)識(shí)了小鯨魚(yú),感覺(jué)功力大增。上篇《docker4dotnet #1 前世今生 & 世界你好》中給大家介紹了如何在Windows上面配置Docker for Windows和Docker Tools for Visual Studio來(lái)使用docker協(xié)助.NET Core應(yīng)用的開(kāi)發(fā),這篇我們來(lái)看看如何創(chuàng)建和管理容器化主機(jī)。

我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、彭澤ssl等。為上千家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的彭澤網(wǎng)站制作公司
所謂容器化主機(jī)Dockerized Host,就是安裝了docker engine的主機(jī),可以使用docker工具進(jìn)行管理。使用docker來(lái)協(xié)助開(kāi)發(fā),我們至少需要本地和云端的容器化主機(jī),本地用于開(kāi)發(fā),測(cè)試,打包;云端的用于生產(chǎn)環(huán)境發(fā)布。使用容器化主機(jī)我們可以將所有的環(huán)境標(biāo)準(zhǔn)化,也即是使用統(tǒng)一的docker工具來(lái)完成容器在不同環(huán)境中的遷移(搬運(yùn)),真正將容器化開(kāi)發(fā)的優(yōu)勢(shì)發(fā)揮出來(lái)。
使用docker發(fā)布應(yīng)用與以往的應(yīng)用發(fā)布方式有很大不同,從上圖中可以看出。
- 因?yàn)閼?yīng)用本身與依賴(lài),應(yīng)用服務(wù)器和操作系統(tǒng)都是分離的;我們?cè)谧詣?dòng)化過(guò)程中就必須處理各種不同的場(chǎng)景,難以標(biāo)準(zhǔn)化;而使用容器技術(shù),我們就可以將自動(dòng)化簡(jiǎn)化為對(duì)容器的搬運(yùn)。
- 各種依賴(lài)的解決都集中在開(kāi)發(fā)環(huán)境中完成,常見(jiàn)的npm,nexus, nuget等工具都是開(kāi)發(fā)人員很熟悉的,這些依賴(lài)的獲取都可以由開(kāi)發(fā)人員自己解決,在后續(xù)的自動(dòng)化中無(wú)需再次處理。
- 僅從自動(dòng)化的復(fù)雜程度來(lái)說(shuō),你可以很明顯的看出傳統(tǒng)開(kāi)發(fā)中自動(dòng)化會(huì)變成各種復(fù)雜情況的匯聚點(diǎn),這就是為什么做CI/CD需要如此復(fù)雜的工具;如果再考慮不同種類(lèi)的工具,如:Jenkins/TeamCity/Travis,Chef/Puppet等,這個(gè)環(huán)境會(huì)變的非常難以控制和維護(hù)。
- 以往我們必須給不同的應(yīng)用創(chuàng)建不同的運(yùn)行環(huán)境,而且這個(gè)環(huán)境必須從操作系統(tǒng)開(kāi)始一層層搭建;使用容器話(huà)之后,不同類(lèi)型的應(yīng)用可以運(yùn)行在統(tǒng)一的操作系統(tǒng)層之上,大大提高了資源利用率和靈活性。
在不同的環(huán)境中統(tǒng)一使用容器化主機(jī)就是向著容器化開(kāi)發(fā)演進(jìn)的***步,也是大幅降低自動(dòng)化系統(tǒng)復(fù)雜程度的***步。
創(chuàng)建容器化主機(jī)
今天給大家介紹一下docker工具集中用來(lái)管理容器化主機(jī)的工具 docker-machine。上一篇文章中我們提到 Docker for Windows 其實(shí)是在 Hyper-V 中創(chuàng)建了一臺(tái)運(yùn)行著 docker daemon 守護(hù)程序的 linux vm 來(lái)接收 windows 命令行中運(yùn)行的 docker 指令的,在你***次啟動(dòng) docker for windows 的過(guò)程中, docker-machine 工具完成了這個(gè) vm 的初始化工作。
這個(gè)初始化的操作很簡(jiǎn)單,如果你已經(jīng)安裝了 docker for windows,可以打開(kāi)命令行(注意:一定要用管理員權(quán)限),然后鍵入如下命令;
- docker-machine create --driver hyperv {machine-name}
這樣,docker-machine 就完成了在你本地的hyper-v上初始化一臺(tái)可以運(yùn)行容器的vm(一般稱(chēng)為Dockerized host 容器化主機(jī))的工作了。
注:在以上過(guò)程中如果docker-machine無(wú)法在本地找到boot2docker.iso這個(gè)文件的話(huà),會(huì)從網(wǎng)絡(luò)上下載,這個(gè)過(guò)程會(huì)很慢,我已經(jīng)將這個(gè)文件上傳到了 d4dtools 的網(wǎng)站盤(pán)中,請(qǐng)?jiān)诠娞?hào)中輸入 d4dtools 獲取。
下載后放入當(dāng)前用戶(hù)的~\.docker\machine\cache\ 這個(gè)目錄即可。
完成初始化后,如果你希望讓docker命令直接對(duì)這個(gè)新的主機(jī)進(jìn)行操作,可以運(yùn)行下面的命令。
- @FOR /f "tokens=*" %i IN ('docker-machine env {machine-name}') DO @%i
注意將{machine-name}替換成你自己的容器化主機(jī)名稱(chēng),這個(gè)命令會(huì)設(shè)置以下三個(gè)環(huán)境變量
- SET DOCKER_TLS_VERIFY=1
- SET DOCKER_HOST=tcp://xxx.xxx.xxx.xxx:2376
- SET DOCKER_CERT_PATH=C:\Users\LeiXu\.docker\machine\machines\{machine-name}
- SET DOCKER_MACHINE_NAME={machine-name}
完成后如果運(yùn)行 docker 命令,那么你所使用的就是新的容器化主機(jī)了。
Docker-Machine 的環(huán)境驅(qū)動(dòng)
上面的命令中你會(huì)注意到 –driver hyperv 這個(gè)參數(shù),docker 提供了很多驅(qū)動(dòng)可以讓你在不同的環(huán)境中一鍵創(chuàng)建容器化主機(jī),這些環(huán)境包括:
– Virtual Box (virtualbox)
– Hyper-V (hyperv)
– Azure (azure)
– Aws (amazonec2)
– VMware Fusion (vmwarefusion)
– VMware vCloud Air (vmwarevcloudair)
– Vmware vSphere (vmwarevshpere)
– …
括號(hào)中的內(nèi)容就是驅(qū)動(dòng)的命令參數(shù),完整的列表可以訪(fǎng)問(wèn):
https://docs.docker.com/machine/reference/create
另外,阿里云也提供了driver,不過(guò)并不再 docker 官方列表中
https://github.com/denverdino/docker-machine-driver-aliyunecs
小編測(cè)試了以下幾個(gè)環(huán)境
Azure 國(guó)際版命令:
- docker-machine create --driver azure --azure-subscription-id {sub-id} --azure-open-port 80 {machine-name}
Azure 世紀(jì)互聯(lián)版命令:
- docker-machine create --driver azure --azure-environment "AzureChinaCloud" --azure-subscription-id {sub-id} --azure-open-port 80 --azure-location "ChinaNorth" {machine-name}
AWS 國(guó)際版命令:
- docker-machine create --driver amazonec2 --amazonec2-region "ap-northeast-1" --amazonec2-vpc-id {vpc-id} {machine-name}
這些命令都可以提供豐富的參數(shù)來(lái)控制主機(jī)的操作系統(tǒng)鏡像,主機(jī)配置大小,網(wǎng)絡(luò)連接,主機(jī)位置等。大家可以通過(guò)以下命令獲取這些參數(shù)的詳情:
- docker-machine create --driver {driver-name}
這些主機(jī)創(chuàng)建好以后,如果要列出所有綁定到你自己環(huán)境上主機(jī),可以運(yùn)行:
- docker-machine ls
如果你需要直接登陸到主機(jī)上進(jìn)行操作,可以 運(yùn)行:
- docker-machine ssh {machine-name}
因?yàn)閐ocker-machine在創(chuàng)建主機(jī)的過(guò)程中已經(jīng)自動(dòng)完成了public key的生成和配置,你無(wú)須輸入用戶(hù)名和密碼就可以ssh進(jìn)入主機(jī)進(jìn)行操作,所有這些public key的證書(shū)文件都存放在 ~\.docker\machine的目錄下面。
注:因?yàn)榫W(wǎng)絡(luò)的原因,這些操作有可能失敗。如果遇到這種情況,先進(jìn)入云平臺(tái)的控制臺(tái)查看相關(guān)的資源是否都創(chuàng)建成功呢了,如果已經(jīng)資源已經(jīng)在那里了。嘗試運(yùn)行:
- docker-machine regenerate-certs {machine-name}
這樣會(huì)強(qiáng)制宿主機(jī)的 docker deamon 重啟,一般來(lái)說(shuō)可以解決問(wèn)題。
使用docker-machine這個(gè)工具,你可以完成容器化主機(jī)的創(chuàng)建,啟動(dòng),關(guān)閉等主要操作;而不必通過(guò)云提供商的控制臺(tái)來(lái)完成,也就是說(shuō)你本地的docker環(huán)境就變成中對(duì)于所有開(kāi)發(fā),測(cè)試和生產(chǎn)環(huán)境的控制臺(tái);通過(guò)docker所提供的命令,你可以完成從應(yīng)用打包,環(huán)境創(chuàng)建,發(fā)布部署的整個(gè)過(guò)程。當(dāng)然,如果你的團(tuán)隊(duì)比較大,其中的一些步驟還是需要借助自動(dòng)化系統(tǒng)來(lái)完成,這樣才能完成代碼的集成和團(tuán)隊(duì)協(xié)同,安全性控制和集群環(huán)境的編排也是需要考慮的問(wèn)題。這些,我們將在后續(xù)的文章中給大家提供解決方案。
將應(yīng)用發(fā)布到云端
到了這里,小編到覺(jué)得沒(méi)啥可說(shuō)的了,docker的發(fā)布實(shí)在是簡(jiǎn)單!簡(jiǎn)單!簡(jiǎn)單!重要事情說(shuō)三遍。
進(jìn)入你的應(yīng)用目錄調(diào)用那個(gè) dockertask.ps1 腳本,就可以完成應(yīng)用的打包和image上傳操作
- .\DockerTask.ps1 -Build -Environment Release -Machine {machine-name}
然后運(yùn)行
- docker images
就可以看到已經(jīng)上傳到你的目標(biāo)宿主機(jī)上面的 images,這時(shí)就可以運(yùn)行 docker run 了 (注意:要確保你正確配置了 宿主機(jī)的環(huán)境變量)
- docker run -p 80:80 username/webapp01:latest
注:這個(gè)過(guò)程中你可能會(huì)碰到docker版本不匹配的問(wèn)題
你可以安裝 docker version manager 這個(gè)工具,然后使用以下命令來(lái)獲取使用正確版本
dvm install {version}
dvm use {version}
安裝命令(Poweshell):
- Invoke-WebRequest https://download.getcarina.com/dvm/latest/install.ps1 -UseBasicParsing | Invoke-Expression
小結(jié)
到這里,我們就完成了本地和云端的docker環(huán)境的創(chuàng)建,并進(jìn)行了最簡(jiǎn)單的應(yīng)用部署。你可以看到,docker 提供了一套簡(jiǎn)單易用的工具和部署方式,讓我們的應(yīng)用開(kāi)發(fā),調(diào)試和打包部署都變的非??旖?。下一篇中我們將介紹如何使用macOS環(huán)境完成.net core應(yīng)用的創(chuàng)建,調(diào)試和docker打包部署過(guò)程。
【本文為專(zhuān)欄作者“徐磊”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)作者微信公眾號(hào)devopshub獲取授權(quán)】
名稱(chēng)欄目:docker4dotnet#2容器化主機(jī)
網(wǎng)站地址:http://m.5511xx.com/article/dpppdej.html


咨詢(xún)
建站咨詢(xún)
