问题导读
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是否安装成功
- 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中添加如下内容
- 54.234.135.251 get.docker.io
- 54.234.135.251 cdn-registry-1.docker.io
- 54.234.135.251 index.docker.io
复制代码
如果有proxy可以翻墙,请修改 /etc/default/docker 文件,取消注释 http_proxy 的部分,比如
- export http_proxy="http://proxyserver:port"
复制代码
然后重启docker服务
- sudo service docker restart
复制代码
4. 为Heat配置Docker plug-in
最新的DevStack安装已经包含了Heat以及Docker plugin,但是它还没有缺省加载,需要简单的配置来激活
首先安装Heat的Docker插件
- cd /opt/stack/heat/contrib/docker
- pip install -r requirements.txt
- mkdir -p /usr/lib/heat/
- ln -sf /opt/stack/heat/contrib/docker/docker/docker /usr/lib/heat/docker
复制代码
修改Heat配置文件 /etc/heat/heat.conf,取消注释的plugin_dirs部分(可选)
重启Heat引擎,来让加入的Docker插件生效
复制代码
使用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
- heat_template_version: 2013-05-23
- description: "Heat template to deploy docker containers"
-
- parameters: {}
-
- resources:
- Blog:
- type: DockerInc::Docker::Container
- properties:
- image: samalba/wordpress
- env:
- -
- str_replace:
- template: DB_HOSTNAME=$DB_HOSTNAME
- params:
- $DB_HOSTNAME:
- get_attr:
- - Database
- - network_ip
- -
- str_replace:
- template: DB_PORT=$DB_PORT
- params:
- $DB_PORT:
- get_attr:
- - Database
- - network_tcp_ports
- -
- str_replace:
- template: DB_PASSWORD=$DB_PASSWORD
- params:
- $DB_PASSWORD:
- get_attr:
- - Database
- - logs_head
- Database:
- type: DockerInc::Docker::Container
- properties:
- image: samalba/mysql
-
- outputs:
- BlogURL:
- value:
- str_replace:
- template: http://$SERVER:$PORT/
- params:
- $SERVER:
- get_attr:
- - Blog
- - network_ip
- $PORT:
- get_attr:
- - Blog
- - network_tcp_ports
- description: Blog URL
复制代码
下载演示所需Container镜像,
- docker pull samalba/wordpress
- docker pull samalba/mysql
复制代码
然后使用上边的Heat模板创建相应的Heat Stack
- 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中界面如下
由于目前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,提供了一个方便的方法来提供所需的软件能力,虽然目前功能有限,但是是一个有趣的方向可以进一步深入研究。
|