分享

在OpenStack中通过Heat来使用Docker Containers

sstutu 发表于 2014-10-17 13:04:54 [显示全部楼层] 只看大图 回帖奖励 阅读模式 关闭右栏 2 46410

问题导读
1.如何验证Docker是否安装成功?
2.为Heat配置Docker plug-in包含哪些步骤?
3.在Heat中如何使用Docker?







Docker 是一个开源的Linux容器引擎,在过去的一年多以来得到了广泛的关注。Heat是OpenStack中服务编排工具可以方便的组装和集成各种 OpenStack服务,在2014年发布的IceHouse release 中,Docker 容器可以作为Heat资源在Heat template中使用,并利用Heat对Docker容器进行集成和连接。本文将通过一个简单的实例来介绍如何在Heat中使用Docker。


1. 安装DevStack

请参阅如下链接
http://devstack.org/guides/single-machine.html


2. 配置并测试Heat
请参阅如下链接
https://wiki.openstack.org/wiki/Heat/GettingStartedUsingDevstack


3. 安装 Docker
请参阅如下链接,注:本文内容是基于Ubuntu 13.10来书写的,可能要根据不同的Linux发行版对文中内容作简单调整。
http://docs.docker.io/installation/ubuntulinux/


验证Docker是否安装成功
  1. docker run -i -t ubuntu /bin/bash
复制代码


需要将刚才DevStack创建的non-root用户,比如"stack",添加为docker组成员,可以用non-root访问Docker命令。
如果如果在DevStack启动之后,安装Docker需要重启DevStack,否则相应的non-root用户没有Docker命令的访问权限



注意:
如果无法下载Container或非常缓慢,请在Host配置文件/etc/hosts中添加如下内容

  1. 54.234.135.251 get.docker.io     
  2. 54.234.135.251 cdn-registry-1.docker.io     
  3. 54.234.135.251 index.docker.io
复制代码



如果有proxy可以翻墙,请修改 /etc/default/docker 文件,取消注释 http_proxy 的部分,比如

  1. export http_proxy="http://proxyserver:port"
复制代码




然后重启docker服务

  1. sudo service docker restart
复制代码



4. 为Heat配置Docker plug-in

最新的DevStack安装已经包含了Heat以及Docker plugin,但是它还没有缺省加载,需要简单的配置来激活

首先安装Heat的Docker插件

  1. cd /opt/stack/heat/contrib/docker
  2. pip install -r requirements.txt
  3. mkdir -p /usr/lib/heat/
  4. ln -sf /opt/stack/heat/contrib/docker/docker/docker /usr/lib/heat/docker
复制代码




修改Heat配置文件 /etc/heat/heat.conf,取消注释的plugin_dirs部分(可选)

重启Heat引擎,来让加入的Docker插件生效
  1. screen -rd
复制代码


使用ctrl+a n查找到h-eng进程,ctrl+c中断并重启Heat-engine进程

更多细节请参照 https://github.com/openstack/heat/tree/master/contrib/docker/docker

5. 在Heat中使用Docker

我们会使用https://github.com/dotcloud/openstack-heat-docker提供的Wordpress作为示例。
但是其中的示例template已经无法使用IceHouse中的模板,我提供了一个更新过的模板,请保存为wordpress.yml

  1. heat_template_version: 2013-05-23
  2. description: "Heat template to deploy docker containers"
  3. parameters: {}
  4. resources:
  5.   Blog:
  6.     type: DockerInc::Docker::Container
  7.     properties:
  8.       image: samalba/wordpress
  9.       env:
  10.         -
  11.           str_replace:
  12.             template: DB_HOSTNAME=$DB_HOSTNAME
  13.             params:
  14.               $DB_HOSTNAME:
  15.                 get_attr:
  16.                   - Database
  17.                   - network_ip
  18.         -
  19.           str_replace:
  20.             template: DB_PORT=$DB_PORT
  21.             params:
  22.               $DB_PORT:
  23.                 get_attr:
  24.                   - Database
  25.                   - network_tcp_ports
  26.         -
  27.           str_replace:
  28.             template: DB_PASSWORD=$DB_PASSWORD
  29.             params:
  30.               $DB_PASSWORD:
  31.                 get_attr:
  32.                   - Database
  33.                   - logs_head
  34.   Database:
  35.     type: DockerInc::Docker::Container
  36.     properties:
  37.         image: samalba/mysql
  38. outputs:
  39.   BlogURL:
  40.     value:
  41.       str_replace:
  42.         template: http://$SERVER:$PORT/
  43.         params:
  44.           $SERVER:
  45.             get_attr:
  46.               - Blog
  47.               - network_ip
  48.           $PORT:
  49.             get_attr:
  50.               - Blog
  51.               - network_tcp_ports
  52.     description: Blog URL
复制代码







下载演示所需Container镜像,

  1. docker pull samalba/wordpress
  2. docker pull samalba/mysql
复制代码


然后使用上边的Heat模板创建相应的Heat Stack
  1. heat stack-create wordpress -f wordpress.yml
复制代码





如果一切正常执行结果如下
+--------------------------------------+------------+-----------------+----------------------+
| id                                   | stack_name | stack_status    | creation_time        |
+--------------------------------------+------------+-----------------+----------------------+
| 0b918df1-f320-45c4-aec8-8d1f55803b9d | wordpress  | CREATE_COMPLETE | 2014-05-14T11:46:43Z |
+--------------------------------------+------------+-----------------+----------------------+

Horizon中界面如下

1.png

2.png






由于目前Heat还不支持Port绑定,如果在其他机器上无法访问Docker网络,我们可以通过SSH隧道来实现端口转发,

ssh -f -L *:8080:172.17.0.3:80 stack@server -N     

然后在浏览器中使用http://server:8080来访问创建的博客应用

Docker Container资源的详细用法请参见
http://docs.openstack.org/developer/heat/template_guide/contrib.html#dockerinc-resource

总结
通过Heat可以方便的创建、连接Docker Container,提供了一个方便的方法来提供所需的软件能力,虽然目前功能有限,但是是一个有趣的方向可以进一步深入研究。







欢迎加入about云群425860289432264021 ,云计算爱好者群,关注about云腾讯认证空间

已有(2)人评论

跳转到指定楼层
diannao720 发表于 2015-4-24 16:17:10
根据你上边的步骤,出现以下错误。
heat.engine.resource ConnectionError: ('Connection aborted.', error(13, 'EACCES'))
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条