.NET 猿自從認識了小鯨魚,感受功力大增。上篇《docker4dotnet #1 前世此生&世界你好》中給你們介紹瞭如何在Windows上面配置Docker for Windows和Docker Tools for Visual Studio來使用docker協助.NET Core應用的開發,這篇咱們來看看如何建立和管理容器化主機。linux
所謂容器化主機Dockerized Host,就是安裝了docker engine的主機,可使用docker工具進行管理。使用docker來協助開發,咱們至少須要本地和雲端的容器化主機,本地用於開發,測試,打包;雲端的用於生產環境發佈。使用容器化主機咱們能夠將全部的環境標準化,也便是使用統一的docker工具來完成容器在不一樣環境中的遷移(搬運),真正將容器化開發的優點發揮出來。git
使用docker發佈應用與以往的應用發佈方式有很大不一樣,從上圖中能夠看出。github
在不一樣的環境中統一使用容器化主機就是向着容器化開發演進的第一步,也是大幅下降自動化系統複雜程度的第一步。web
今天給你們介紹一下docker工具集中用來管理容器化主機的工具 docker-machine。上一篇文章中咱們提到 Docker for Windows 實際上是在 Hyper-V 中建立了一臺運行着 docker daemon 守護程序的 linux vm 來接收 windows 命令行中運行的 docker 指令的,在你第一次啓動 docker for windows 的過程當中, docker-machine 工具完成了這個 vm 的初始化工做。docker
這個初始化的操做很簡單,若是你已經安裝了 docker for windows,能夠打開命令行(注意:必定要用管理員權限),而後鍵入以下命令;shell
docker-machine create --driver hyperv {machine-name}
這樣,docker-machine 就完成了在你本地的hyper-v上初始化一臺能夠運行容器的vm(通常稱爲Dockerized host 容器化主機)的工做了。npm
注:在以上過程當中若是docker-machine沒法在本地找到boot2docker.iso這個文件的話,會從網絡上下載,這個過程會很慢,我已經將這個文件上傳到了 d4dtools 的網站盤中,請在公衆號中輸入 d4dtools 獲取。windows
下載後放入當前用戶的~\.docker\machine\cache\ 這個目錄便可。安全
完成初始化後,若是你但願讓docker命令直接對這個新的主機進行操做,能夠運行下面的命令。服務器
@FOR /f "tokens=*" %i IN ('docker-machine env {machine-name}') DO @%i
注意將{machine-name}替換成你本身的容器化主機名稱,這個命令會設置如下三個環境變量
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}
完成後若是運行 docker 命令,那麼你所使用的就是新的容器化主機了。
上面的命令中你會注意到 –driver hyperv 這個參數,docker 提供了不少驅動可讓你在不一樣的環境中一鍵建立容器化主機,這些環境包括:
– Virtual Box (virtualbox)
– Hyper-V (hyperv)
– Azure (azure)
– Aws (amazonec2)
– VMware Fusion (vmwarefusion)
– VMware vCloud Air (vmwarevcloudair)
– Vmware vSphere (vmwarevshpere)
– …
括號中的內容就是驅動的命令參數,完整的列表能夠訪問:
https://docs.docker.com/machine/reference/create
另外,阿里雲也提供了driver,不過並不在 docker 官方列表中
https://github.com/denverdino/docker-machine-driver-aliyunecs
小編測試瞭如下幾個環境
Azure 國際版命令:
docker-machine create --driver azure --azure-subscription-id {sub-id} --azure-open-port 80 {machine-name}
Azure 世紀互聯版命令:
docker-machine create --driver azure --azure-environment "AzureChinaCloud" --azure-subscription-id {sub-id} --azure-open-port 80 --azure-location "ChinaNorth" {machine-name}
AWS 國際版命令:
docker-machine create --driver amazonec2 --amazonec2-region "ap-northeast-1" --amazonec2-vpc-id {vpc-id} {machine-name}
這些命令均可以提供豐富的參數來控制主機的操做系統鏡像,主機配置大小,網絡鏈接,主機位置等。你們能夠經過如下命令獲取這些參數的詳情:
docker-machine create --driver {driver-name}
這些主機建立好之後,若是要列出全部綁定到你本身環境上主機,能夠運行:
docker-machine ls
若是你須要直接登錄到主機上進行操做,能夠 運行:
docker-machine ssh {machine-name}
由於docker-machine在建立主機的過程當中已經自動完成了public key的生成和配置,你無須輸入用戶名和密碼就能夠ssh進入主機進行操做,全部這些public key的證書文件都存放在 ~\.docker\machine的目錄下面。
注:由於網絡的緣由,這些操做有可能失敗。若是遇到這種狀況,先進入雲平臺的控制檯查看相關的資源是否都建立成功呢了,若是已經資源已經在那裏了。嘗試運行:
docker-machine regenerate-certs {machine-name}
這樣會強制宿主機的 docker deamon 重啓,通常來講能夠解決問題。
使用docker-machine這個工具,你能夠完成容器化主機的建立,啓動,關閉等主要操做;而沒必要經過雲提供商的控制檯來完成,也就是說你本地的docker環境就變成中對於全部開發,測試和生產環境的控制檯;經過docker所提供的命令,你能夠完成從應用打包,環境建立,發佈部署的整個過程。固然,若是你的團隊比較大,其中的一些步驟仍是須要藉助自動化系統來完成,這樣才能完成代碼的集成和團隊協同,安全性控制和集羣環境的編排也是須要考慮的問題。這些,咱們將在後續的文章中給你們提供解決方案。
到了這裏,小編到以爲沒啥可說的了,docker的發佈實在是簡單!簡單!簡單!重要事情說三遍。
進入你的應用目錄調用那個 dockertask.ps1 腳本,就能夠完成應用的打包和image上傳操做
.\DockerTask.ps1 -Build -Environment Release -Machine {machine-name}
而後運行
docker images
就能夠看到已經上傳到你的目標宿主機上面的 images,這時就能夠運行 docker run 了 (注意:要確保你正確配置了 宿主機的環境變量)
docker run -p 80:80 username/webapp01:latest
注:這個過程當中你可能會碰到docker版本不匹配的問題
你能夠安裝 docker version manager 這個工具,而後使用如下命令來獲取使用正確版本
dvm install {version}
dvm use {version}安裝命令(Poweshell):
Invoke-WebRequest https://download.getcarina.com/dvm/latest/install.ps1 -UseBasicParsing | Invoke-Expression
到這裏,咱們就完成了本地和雲端的docker環境的建立,並進行了最簡單的應用部署。你能夠看到,docker 提供了一套簡單易用的工具和部署方式,讓咱們的應用開發,調試和打包部署都變的很是快捷。下一篇中咱們將介紹如何使用macOS環境完成.net core應用的建立,調試和docker打包部署過程。
請關注微信公衆號 【devopshub】,獲取更多關於DevOps研發運維一體化的信息