通过Openstack + novadocker创建有存储功能的docker
来源:互联网 发布:c语言中log怎么表示 编辑:程序博客网 时间:2024/06/01 09:10
一. 实现的功能
创建带存储功能的 docker。所谓“存储”,就是把 docker 内的某个目录挂在到 host 上的某个目录下。在本实验中,将 docker 根目录下的一个文件夹,挂在到 host 中。
具体说明:通过修改 nova 代码,使得既可以创建普通的 docker( 不带存储 ),也可以创建带存储的 docker。
本实验通过不同的创建docker方法来区分docker是否需要存储,如果在dashboard上点击创建Instance时,选择Boot From Image,那么创建出来的docker是不带存储的,如果选择Boot from Image( create a new volume )那么创建出来的docker是带有存储的。
二. 具体做法
nova 部分:
当页面上发出创建虚拟机的请求时,这个请求最后会到某个 compute 节点上的 nova/manage.py 中的 _build_instance 函数,我们只需改变这里的逻辑即可。代码( nova/manage.py ):
device_type = request_spec['block_device_mapping'][0]['device_type']
if device_type: #当在页面上创建普通 docker 时会触发这里 block_device_info = {}else:# 当在页面上创建外挂存储的 docker 时会触发这里 block_device_info = {'need-storage':request_spec['block_device_mapping'][0]['device_name'], #need-storage 参数是页面上的 device name 'storage-size':request_spec['block_device_mapping'][0]['volume_size']} #storage-size 参数是页面上的 volume size
novadocker部分:
代码( driver.py ):
# Does the docker wanted storage?if block_device_info.get('need-storage', None): #带存储 self._start_storage_container(instance, block_device_info) #函数_start_storage_container 是新添加的else: #没有存储 self._start_container(instance, network_info) _start_storage_container 函数 ( driver.py )
def _start_storage_container(self, instance, block_device_info): container_id = self._find_container_by_name(instance['name']).get('id') #获取 container_id( 非常重要 ) if not container_id: return self.docker.start_storage_container(container_id, block_device_info)
代码( client.py ):
def start_storage_container(self, container_id, block_device_info): host_dir = '/mnt/docker-volumes/' + container_id utils.execute('mkdir', '-p', host_dir) docker_dir = '/' + block_device_info.get('need-storage', 'data') dir_param = host_dir + ':' + docker_dir + ':rw' data = { 'Binds': [ dir_param ] } resp = self.make_request( 'POST', 'containers/{0}/start'.format(container_id), body=jsonutils.dumps(data))
return (resp.code == 200 or resp.code == 204)
这样一来,我们创建出来的docker就带有“存储”了,其实,所谓“存储”,我理解的就是可以在docker内部某个文件夹内进行的IO操作反映到HOST中,这样的话,即使docker关闭或者删除了,它的数据还是存在的。
0 0
- 通过Openstack + novadocker创建有存储功能的docker
- Docker Registry对接Openstack Swift存储后端
- docker与openstack的关系
- 通过JDBC创建Oracle的存储过程
- 创建一个有对话框功能的窗口
- OpenStack 的resize功能
- 如何创建一个有密码保护的私有Docker Registry
- mysql 通过存储过程批量更新数据(注意操作用户需要有mysql的创建临时表权限)
- docker的存储使用
- docker的存储
- docker中部署openstack的验证
- [docker]openstack的nova-docker插件安装试用
- OpenStack之Nova的功能
- openstack的临时存储后端
- OpenStack Nova 的存储管理
- Openstack 部署总结之:通过qemu-kvm创建唯一SID的windows 2003 镜像
- docker创建私有仓库及存储image
- unity3d中通过代码实现创建一堵墙的功能
- 自定义缓存图片
- qt2010设置
- 通过LeakDiag查看内存泄漏
- Hdu1178Heritage from father
- iOS开发常用的开源类库
- 通过Openstack + novadocker创建有存储功能的docker
- centos 下安装ati显卡驱动方法
- mysql 创建视图
- CSS颜色代码大全视图参照表!
- 常见错误2
- HttpServletRequest调用getRemoteAddr获取IP返回0:0:0:0:0:0:0:1的问题
- 如何中断JAVA线程
- 多线程同步的条件变量相关函数
- C语言中的fprintf函数