【博文推薦】故事才剛剛開始——當Azure遇上Docker
本博文出自51CTO博主技術不宅 的博客,有任何問題請進入博主頁面互動討論! |
容器技術現(xiàn)在發(fā)展的如火如荼,包括微軟也會在下一代操作系統(tǒng)中提供原生支持,個人認為微軟的優(yōu)勢在于其擁有成熟的集群工作環(huán)境(Nano Server)以及成熟的管理平臺(System Center),除此之外還有一系列圍繞容器的生態(tài)鏈,比如自動化(PowerShell DSC),比如監(jiān)控,比如生命周期管理等等。當然目前如果想在Win平臺上體驗容器的話,除了Docker提供的boot2docker,最“土”的辦法 就是在Hyper-V里創(chuàng)建一臺Linux虛擬機,然后去部署并使用Docker環(huán)境。那么還有沒有一些方便快捷的方法呢?或者對于開源平臺的運維人員來 說,可否在公有云中可以快速的交付出一個Docker環(huán)境來,其實這正是Azure目前所支持的。說到這里就不得不提一下Docker的架構:
Docker 是C/S架構的,主要由client、daemon、registry構成,其中registry用于管理鏡像(image),而container則是 生于鏡像之上,更多有關docker的基礎概念我就不在這里耍大刀了,畢竟也是才接觸容器沒多久:) 這里主要關注一下client(客戶端)與daemon(服務端也叫守護進程),daemon用來接收從client發(fā)來的指令然后進行處理,所以說通常 都是在本地調用(通過unix socket),當然docker是支持遠程調用的(通過TLS),也就是我本地只要有docker client(可以簡單理解client就是docker.exe,或者是你直觀看到的那個CLI console)就能夠向遠程的daemon端(可以簡單理解daemon就是docker的后臺服務進程)發(fā)起指令,比如pull或build一個鏡 像,構建自己的dockerfile等等所有操作。
想 在Azure上體驗docker daemon模式就需要用到azure vm擴展,之前博文提到過幾類實用的擴展程序,比如BGinfo,比如DSC等等,這次就會提到Docker extension,目前在azure global版本的新門戶中(預覽版)可以看到,當然要想在azure上快速的獲取一個docker daemon交付還是需要一些準備工作的,首先要有一臺支持docker相應版本的虛擬機,這里以目前流行的也是推薦的ubuntu 14.04 LTS為例,我在創(chuàng)建虛擬機時使用了SSH公鑰認證方式(出于安全性和便捷性考慮建議大家選擇這種方式),如下圖:
新門戶還是比較炫的,但是內容太多難免讓人需要花時間去適應,可以看到當前ubuntu虛擬機正在創(chuàng)建中,如下圖:
這臺叫做dockertemp的ubuntu虛擬機創(chuàng)建好之后,可以快速的瀏覽相關信息,比如dns名稱,IP地址信息等等,如下圖:
通過本地的xshell登陸之后確認版本為14.04.2 LTS,接下來就該在這臺機器上準備docker daemon環(huán)境了
#p#
一般來講,可以在這臺機器上完全手動的去安裝docker,然后修改docker的啟動方式是daemon模式,并指定tls所需的證書,不過為了省事或者 是面向新手,Azure的docker擴展程序就是來幫助你完成這些工作,不過前面提到因為遠程調用不再使用unix socket而是基于tls加密所以還需要證書,下圖中是我另外一臺vm已經配置好的截圖,在~/.docker目錄下有六個.pem文件是我們接下來要 創(chuàng)建的,說白了是“三對密鑰”,它們分別是ca密鑰對(ca-key.pem/ca.pem),服務器密鑰對(server-key.pem /server-cert.pem)以及客戶端密鑰對(key.pem/cert.pem);所有的證書準備工作可以完全參考docker官方說明文檔來 操作,鏈接:http://docs.docker.com/articles/https/
回到剛才創(chuàng)建好的dockertemp這臺虛擬機,一步一步來創(chuàng)建所需要的證書和密鑰文件,使用openssl生成ca證書,并且注意FQDN要與dockertemp這臺虛擬機所在的云服務名稱一致,如下圖:
接下來準備服務器證書,期間需要生成一個請求文件,創(chuàng)建如下圖:
最后是客戶端證書,如下圖:
由于目前Azure只認base64編碼,因此要把服務端的三個證書格式轉換一下,它們分別是ca.pem/server-cert.pem/server-key.pem,剩下三個key用來本地docker client使用,如下圖:
把需要上傳到Azure的三個證書下載到本地,也可以全部下載,如下圖:
上文中對TLS加密認證所需要的文件進行了準備,接下來就是傻瓜的下一步下一步了~首先對dockertemp這臺虛擬機安裝docker擴展,如下圖:
可以看到幾個可用擴展,新門戶中很多操作都可以通過圖形化界面來進行方便了許多,這里可以看到docker擴展的作用,它會安裝docker daemon服務并接受來自遠程client的請求,如下圖:
#p#
此時需要提供相應的證書,這里把剛才下載的證書ca64.pem/server-cert64.pem/server-key64.pem上傳,然后 Azure提供了默認的daemon模式端口4243,如果有需要可以在這里修改,確認無誤后就能夠進行擴展程序的安裝了,如下圖:
等待一會時間會獲得成功提示,新門戶的通知中心還是比較美觀的,如下圖:
接下來還需要手動為dockertemp這臺虛擬機開發(fā)一個4243的端點(端口映射),如下圖:
此時回到虛擬機詳情,查看擴展程序狀態(tài),當前的docker extension status顯示success,如下圖:
到此為止Azure上的docker daemon模式就啟用了,只要你本地有docker client并配合一致的密鑰對就可以使用TLS加密認證與云端的docker daemon進行交互了,我在本地先把client需要的證書下載(不需要轉換成base64),如下圖:
我的客戶端就用boot2docker來演示,從桌面或者開始菜單啟動boot2docker start,此時它就是client,如下圖顯示默認的證書存放路徑是紅框部分,那么我就把上文中下載的三個證書拷貝到這里
#p#
此時還需要注意DOCKER_TLS_VERIFY是否為“1”,若不是的話用export修改一下即可,另外還要使用export指定HOST路徑,這里就是我Azure上dockertemp的云服務名稱加端口,如下圖:
配置好之后直接運行docker info,顯示的是Azure上dockertemp(基本A1規(guī)格)的信息,1顆vCPU,1.7GB內存,且名稱確認無誤,證明當前成功的連接上了遠端docker daemon,如下圖:
接下來就直接給daemon發(fā)號施令吧,例如可以search一下鏡像名稱,如下圖:
或者干脆pull一個ubunut鏡像到本地,如下圖:
#p#
這里我做一個非常非常簡單的demo,從本地通過TLS連接Azure上的daemon并創(chuàng)建一個分布式的容器應用(這里以大家耳熟能詳?shù)膚ordpress為例);首先下載兩個鏡像,分別是wordpress與mysql,如下圖:
基于mysql創(chuàng)建一個容器,名為mysql_wordpress,指定mysql的root密碼,并使用-d作為后臺常駐運行;另外再基于 wordpress鏡像創(chuàng)建一個容器名為wordpress_demo,使用--link參數(shù)鏈接到已存在的mysql_wordpress容器,并將容 器內部80端口映射到外部,同樣使用-d做后臺運行,完成之后通過docker ps顯示兩個容器正常運行,如下圖:
接下來將dockertemp虛擬機創(chuàng)建一個新端點,就是把80端口發(fā)布出來以便可以從外部訪問這個wordpress站點,如下圖:
然后~~~~打開瀏覽器訪問云服務名稱(DNS)dockertemp.cloudapp.net,可以正常顯示wordpress初始化配置頁面了,這樣就完成了一個容器應用的部署,真的是so easy :)
綜上所述,要想在Azure上使用docker服務,其實就是微軟幫我們自動化實現(xiàn)了docker daemon模式的部署和啟用,但是在過程中我們需要手動的準備證書文件和端口映射,熟悉一遍之后感覺還是比較簡單的,當然了~Azure遇上 Docker,故事才剛剛開始。