想用好Docker,你不能錯過這些

花肉醬發表於2016-11-23

Docker 引起了交付方式的變革,從交付程式碼和文件變成交付Docker映象乃至交付編排模板。

容器服務讓我們可以專注應用本身功能的開發,而無需關注基礎設施、應用部署、管理等等一大堆棘手的問題。


越來越多的公司開始考慮使用Docker的方式部署和管理應用,以降低運維的成本。

同時,阿里雲容器服務團隊正在積極的推進國內Docker的發展,阿里雲在雲棲大會上宣佈和Docker公司戰略合作,將為Docker Hub提供中國運營的基礎服務


說易行難,真正開始的時候又不知道具體該做什麼,會遇到哪些坑?

日前,阿里雲容器服務團隊進行了一次線上的圓桌互動,以下是提煉和總結


來自使用者的總結:

個人理解:具體到 Docker 技術在測試領域的應用,可以體現在:

1)快速搭建相容性測試環境

從Docker的映象與容器技術特點可以預見,當被測應用要求在各類Web伺服器、中介軟體、資料庫的組合環境中得到充分驗證時,可以快速地利用基礎Docker映象建立各類容器,裝載相應的技術元件並快速啟動執行,測試人員省去了大量花在測試環境搭建上的時間。

2)快速搭建複雜分散式測試環境

Docker的輕量虛擬化特點決定了它可以在一臺機器上(甚至是測試人員的一臺膝上型電腦上)輕鬆搭建出成百上千個分散式節點的容器環境,從而模擬以前需要耗費大量時間和機器資源才能搭建出來的分散式複雜測試環境。

3)持續整合

Docker可以快速建立和撤銷容器,在持續整合的環境中,可以頻繁和快速地進行部署和驗證工作

精彩問答:

– hyper_x問:如何平滑遷移到Docker ?合適的容器排程管理平臺有推薦嗎?多主機跨容器通訊及效能問題怎麼處理?容器的監控及故障遷移恢復怎麼操作?

– 專家答:

遷移docker的時候,建議“慢慢來”,先把一些邊緣的、無狀態的應用放在容器裡執行,核心服務先不動,穩定之後再逐漸開始遷移重要應用。

遷移過程中,可能會涉及到對應用訪問模式的改造,在條件允許的情況下,比如業務壓力不是這麼大,可以做一些改造。比如兩個應用原來是部署在一臺機器上,通過unix domain socket通訊,切換到Docker之後,推薦每個容器只跑一個應用,但是在過渡期,做一個大映象,裡面放兩個應用也不是不可以


容器管理方面,目前主要三個方面:k8s, swarm和mesos,很難說哪個更好,您可以都嘗試下。阿里雲的容器服務採用的是swarm的模式,整合了阿里雲的一些基礎服務:日誌、監控、儲存等,在排程等方面做了很多優化,你也可以使用看看。

容器跨主機通訊,Docker本身提供了overlay network,也有一些開源的軟體 Flannel calico,按照底層網路模式分,overlay flannel weave等是vxlan的方式,需要對packet封裝和解封,效能上差一些,calico 使用 BGP 協議直接路由,但是對底層的網路模型要求較高。容器服務提供了針對阿里雲的VPC的 Docker 外掛,容器之間的資料包不需要封裝操作,效能幾乎和VPC內兩臺ecs通訊效能一樣。

故障遷移和恢復,這個在容器服務中是原生支援的。監控方面可以參考下我們的幫助文件: https://help.aliyun.com/document_detail/32471.html


– rg小恆問:

1.Docker的方便我覺得是敏捷交付以及持續整合,在對叢集宿主機的資源利用上比虛擬主機方便一些,譬如容器遷移比vm遷移方便,我想問一下容器對於資源利用比直接跑在vm上是不是要好一些。

2.假如我的應用是基於tomcat的,掛載volume是用宿主機的磁碟好一些還是用nas,釋出新版本(譬如更換war包)有什麼好的方法,是我手動去替換volume裡邊的war包還是觸發自動構建重新起一個tomcat容器,如果我只是想替換tomcat應用容器中的某些jsp檔案呢
3.用阿雲的容器服務的時候,叢集預設會有etcd容器還是需要自己起一個

4.容器的監控是用阿雲的監控即可還是需要自己另尋他路,譬如用谷歌的cadvisor等


– 專家答:

更細粒度的資源管理可以提高資源利用率,從物理機到虛擬機器再到容器,資源的粒度在不斷細化。一臺VM上啟動多個容器能更充分的利用VM的資源,配合雲服務和自動排程等手段,可以進一步提供資源利用率和降低資源成本。

docker推崇的做法是不可變基礎架構,變更的是映象而不是容器內的檔案,所以每次釋出,要用新的war包構建一個新映象,再用新映象啟動應用。即使不說容器,在Java Web開發裡也不建議在生產環境裡熱更新JSP,生產環境要求的是可靠和高效能,替換jsp這種方式只能用在開發測試環境。

容器服務有etcd服務,但主要用於Docker daemon以及容器服務自身的agent,如果是您自己的業務上用到etcd,可以自己起一個。

監控方面,容器服務預設就支援了。您可以在控制檯頁面上檢視每個容器的實時監控資訊,這些資料也會自動同步到雲監控,不需要額外配置。另外如果您自己有監控系統,也可以通過配置把所有的監控資料傳送到您的監控系統裡。可以參考監控的文件:https://help.aliyun.com/document_detail/32471.html


– 使用者問:

有沒有映象製作的最佳實踐可以參考?

– 專家答:

使用 Dockerfile 製作映象,不要用 docker commit

Dockerfile放在一個專門的目錄裡,其中只包含製作映象所需的檔案(如果分離構建和映象製作,這裡只放構建後的包,不要放原始碼)。

必要的時候可以使用.dockerignore

減少層數量,Dockerfile 裡用 RUN 的時候,一個RUN後面跟多個命令,命令之間用&&分割

經常變化的內容放在 Dockerfile 的後面,前面不變的部分可以直接用 Cache,降低 Build 映象的時間。

更多內容歡迎關注 阿里雲容器服務官方頁面,https://www.aliyun.com/product/containerservice



相關文章