OpenStack將提供對Docker的支援

發表於2014-04-23
最近來自Docker官方網站的文章提到,從OpenStack Icehouse開始,Docker將與Heat整合。 而最早在OpenStack Havana 版本中,Docker 已經作為 Nova driver方式與OpenStack整合。本文將首先簡單介紹Docker,然後介紹其與OpenStack 的整合。

Docker 簡介

Docker 是一個開源的應用容器引擎,可以自動化地部署應用到可移植的的容器中,這些容器獨立於硬體、語言、框架、打包系統。一個標準的Docker容器包含一個軟體元件及其所有的依賴 ——二進位制檔案,庫,配置檔案,指令碼等等。Docker擴充套件了LXC,使用高層的API,提供輕量虛擬化解決方案來實現程式間隔離。可以執行在任何支援 cgroups跟AUFS 的 64位Linux核心上。

docker
Dock可以用來:

  • 自動化打包和部署任何應用
  • 建立一個輕量級私有PaaS雲
  • 搭建開發測試環境
  • 部署可擴充套件的Web應用

Docker 發展迅速, 它的貢獻者PaaS雲提供商 https://dotcloud.com 2014年1月份獲得了B輪1500萬美元融資,Docker社群(https://www.docker.io/)也比較活躍,Docker中文社群(http://www.dockboard.org/)最近也在國內多個城市相繼成功舉行Docker meet up。關於docker更多詳細介紹詳見 http://www.openstack.cn/p828.html 

Docker與Nova整合

在OpenStack Havana版本中,Docker透過在Nova中以driver的形式與OpenStack的整合,這種實現把Docker容器當作虛擬機器來使用。程式碼連結為 https://github.com/openstack/nova/tree/stable/havana/nova/virt/docker

但在香港OpenStack設計峰會上決定從Nova專案移出Docker driver,放入StackForge專案開發。Openstack的每個專案起初都在StackForge 培育,然後申請進入Incubated專案,考察期滿且透過技術委員會投票正式成為Openstack整合專案。OpenStack 專案中Docker driver的主要維護者給出的解釋是:“關於這個driver我們已經收到積極的反饋,缺少與Cinder、Neutron的整合是我們面臨的障礙,在 StackForge中,允許我們快速迭代開發,持續整合新功能,以便在OpenStack Juno 版本中重新引入”  所以從Icehouse版本開始,Docker driver 程式碼樹為https://github.com/stackforge/nova-docker

下面是Nova Docker driver 與OpenStack整合流程圖。

dockerintegration
nova docker driver

Nova Docker driver 嵌入一個微小的HTTP 客戶端 與 Docker內部REST API 通訊,使用HTTP API 來控制Docker容器與獲得容器資訊。透過配置Glance,Docker 就能從Glance獲得跟上傳映象。關於Docker與Nova整合詳細配置方法,請詳見https://wiki.openstack.org/wiki/Docker

Docker與Heat整合

在OpenStack中,社群更傾向於使 用Heat來協調使用Docker,而不是在Nova中把它當作一種hypervisor 使用。 Nova Docker driver這種方式有些缺點,例如,標準的API 擴充套件使用虛擬機器特有的功能,但這些功能對於Docker並不適用,而且把Docker當作虛擬機器來使用,Nova很難利用Docker有用的功能,例如連線容器(主要指Docker容器間通訊),基於以上的原因,Heat是更好的選項。

Heat在OpenStack 中提供資源協調功能,與AWS 的 CloudFormation 相容,允許使用者上傳描述資源的模版。使用Heat的外掛機制,使用者可以基於傳統OpenStack部署方式部署跟管理Docker容器。Heat 外掛已經被OpenStack 社群接受,將包含在Icehouse版本中。程式碼連結為https://github.com/openstack/heat/tree/master/contrib/docker

下面的例子顯示如何使用Heat來協調使用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

 

dockerheat

heat docker plugin

在上面的例子裡,我們只需要新增更多類似”my_docker_container“的片段,就可以建立多個容器並把它們連線起來,它們將不受限於OpenStack API,可以充分利用Docker Remote API。 

結束語

Docker相對於虛擬機器由較高的資源利用率,可以秒級部署, 跨平臺打包部署應用。在眾多PaaS平臺產品中發展迅速,獲得社群認可與支援,與多個知名專案合作整合。 而與Heat專案的整合,為打通IaaS,PaaS 平臺提供了很好的途徑。期待Docker在OpenStack Juno版本中與OpenStack Heat專案的更好整合。

作者@郭長波, EasyStack工程師

via : http://www.openstack.cn/p1423.html 

相關文章