OpenStack將提供對(duì)Docker的支持
最近來(lái)自Docker官方網(wǎng)站的文章提到,從OpenStack Icehouse開始,Docker將與Heat集成。 而最早在OpenStack Havana 版本中,Docker 已經(jīng)作為 Nova driver方式與OpenStack集成。本文將首先簡(jiǎn)單介紹Docker,然后介紹其與OpenStack 的集成。
Dock可以用來(lái):
- 自動(dòng)化打包和部署任何應(yīng)用
- 創(chuàng)建一個(gè)輕量級(jí)私有PaaS云
- 搭建開發(fā)測(cè)試環(huán)境
- 部署可擴(kuò)展的Web應(yīng)用
Docker 發(fā)展迅速, 它的貢獻(xiàn)者PaaS云提供商 https://dotcloud.com 2014年1月份獲得了B輪1500萬(wàn)美元融資,Docker社區(qū)也比較活躍,Docker中文社區(qū)最近也在國(guó)內(nèi)多個(gè)城市相繼成功舉行Docker meet up。關(guān)于docker更多詳細(xì)介紹詳見(jiàn) http://www.openstack.cn/p828.html
Docker與Nova集成
在OpenStack Havana版本中,Docker通過(guò)在Nova中以driver的形式與OpenStack的集成,這種實(shí)現(xiàn)把Docker容器當(dāng)作虛擬機(jī)來(lái)使用。代碼鏈接為 https://github.com/openstack/nova/tree/stable/havana/nova/virt/docker
但在香港OpenStack設(shè)計(jì)峰會(huì)上決定從Nova項(xiàng)目移出Docker driver,放入StackForge項(xiàng)目開發(fā)。Openstack的每個(gè)項(xiàng)目起初都在StackForge 培育,然后申請(qǐng)進(jìn)入Incubated項(xiàng)目,考察期滿且通過(guò)技術(shù)委員會(huì)投票正式成為Openstack集成項(xiàng)目。OpenStack 項(xiàng)目中Docker driver的主要維護(hù)者給出的解釋是:“關(guān)于這個(gè)driver我們已經(jīng)收到積極的反饋,缺少與Cinder、Neutron的集成是我們面臨的障礙,在 StackForge中,允許我們快速迭代開發(fā),持續(xù)集成新功能,以便在OpenStack Juno 版本中重新引入” 所以從Icehouse版本開始,Docker driver 代碼樹為https://github.com/stackforge/nova-docker
下面是Nova Docker driver 與OpenStack集成流程圖。
Nova Docker driver 嵌入一個(gè)微小的HTTP 客戶端 與 Docker內(nèi)部REST API 通信,使用HTTP API 來(lái)控制Docker容器與獲得容器信息。通過(guò)配置Glance,Docker 就能從Glance獲得跟上傳鏡像。關(guān)于Docker與Nova集成詳細(xì)配置方法,請(qǐng)?jiān)斠?jiàn)https://wiki.openstack.org/wiki/Docker
Docker與Heat集成
在OpenStack中,社區(qū)更傾向于使 用Heat來(lái)協(xié)調(diào)使用Docker,而不是在Nova中把它當(dāng)作一種hypervisor 使用。 Nova Docker driver這種方式有些缺點(diǎn),例如,標(biāo)準(zhǔn)的API 擴(kuò)展使用虛擬機(jī)特有的功能,但這些功能對(duì)于Docker并不適用,而且把Docker當(dāng)作虛擬機(jī)來(lái)使用,Nova很難利用Docker有用的功能,例如連接容器(主要指Docker容器間通信),基于以上的原因,Heat是更好的選項(xiàng)。
Heat在OpenStack 中提供資源協(xié)調(diào)功能,與AWS 的 CloudFormation 兼容,允許用戶上傳描述資源的模版。使用Heat的插件機(jī)制,用戶可以基于傳統(tǒng)OpenStack部署方式部署跟管理Docker容器。Heat 插件已經(jīng)被OpenStack 社區(qū)接受,將包含在Icehouse版本中。代碼鏈接為https://github.com/openstack/heat/tree/master/contrib/docker
下面的例子顯示如何使用Heat來(lái)協(xié)調(diào)使用Docker:
- description: Single compute instance running cirros in a Docker container.
- resources:
- my_instance:
- type: OS::Nova::Server
- properties:
- key_name: ewindisch_key
- image: ubuntu-precise
- flavor: m1.large
- user_data: #include https://get.docker.io
- my_docker_container:
- type: DockerInc::Docker::Container
- docker_endpoint: { get_attr: [my_instance, first_address] }
- image: cirros
在上面的例子里,我們只需要添加更多類似”my_docker_container“的片段,就可以創(chuàng)建多個(gè)容器并把它們連接起來(lái),它們將不受限于OpenStack API,可以充分利用Docker Remote API。
結(jié)束語(yǔ)
Docker相對(duì)于虛擬機(jī)由較高的資源利用率,可以秒級(jí)部署, 跨平臺(tái)打包部署應(yīng)用。在眾多PaaS平臺(tái)產(chǎn)品中發(fā)展迅速,獲得社區(qū)認(rèn)可與支持,與多個(gè)知名項(xiàng)目合作集成。 而與Heat項(xiàng)目的集成,為打通IaaS,PaaS 平臺(tái)提供了很好的途徑。期待Docker在OpenStack Juno版本中與OpenStack Heat項(xiàng)目的更好集成。
作者:@郭長(zhǎng)波, EasyStack工程師