Flocker浅析与Docker插件(3)
来源:互联网 发布:芒果tv有Mac 版吗 编辑:程序博客网 时间:2024/06/06 21:05
..
声明:
本博客欢迎转发,但请保留原作者信息!
博客地址:http://blog.csdn.net/halcyonbaby
新浪微博:@寻觅神迹
内容系本人学习、研究和总结,如有雷同,实属荣幸!
写一个简单的docker volume Plugin
该插件只是个例子,卷实际上是host上的目录,但是由插件进行管理。
代码中使用了calavera写的docker volume plugin框架。
需要完成的只是上章所说的docker volume plugin的5个接口。
样例代码-创建一个叫fakeVol的plugin
package mainimport ( "flag" "fmt" "log" "os" "path/filepath" "sync" "github.com/calavera/dkvolume")var ( root = flag.String("root", "/var/lib/docker/fakevol", "fake volumes root directory"))type fakeVolDriver struct { root string m *sync.Mutex volumes map[string]string}func newFakeVolDriver(root string) fakeVolDriver { d := fakeVolDriver{ root: root, volumes: map[string]string{}, m: &sync.Mutex{}, } return d}func (d fakeVolDriver) Create(r dkvolume.Request) dkvolume.Response { log.Printf("Creating volume %s\n", r.Name) d.m.Lock() defer d.m.Unlock() volPath := filepath.Join(d.root, r.Name) if _, err := os.Stat(volPath); os.IsNotExist(err) { os.Mkdir(volPath, 0755) d.volumes[r.Name] = volPath } return dkvolume.Response{}}func (d fakeVolDriver) Remove(r dkvolume.Request) dkvolume.Response { log.Printf("Removing volume %s\n", r.Name) d.m.Lock() defer d.m.Unlock() if _, err := os.Stat(d.volumes[r.Name]); os.IsNotExist(err) { os.Remove(d.volumes[r.Name]) delete(d.volumes, r.Name) } return dkvolume.Response{}}func (d fakeVolDriver) Path(r dkvolume.Request) dkvolume.Response { return dkvolume.Response{Mountpoint: d.volumes[r.Name]}}func (d fakeVolDriver) Mount(r dkvolume.Request) dkvolume.Response { return dkvolume.Response{Mountpoint: d.volumes[r.Name]}}func (d fakeVolDriver) Unmount(r dkvolume.Request) dkvolume.Response { return dkvolume.Response{}}func main() { flag.Parse() d := newFakeVolDriver(*root) h := dkvolume.NewHandler(d) fmt.Println(h.ServeUnix("root", "fakeVol"))}
运行、使用plugin管理容器的volume
备注:
由于volume plugin是docker的实验特性。因此正式的release中并未包含。需要使用编译了实验特性的版本。
可以在https://experimental.docker.com/builds/Linux/x86_64/docker-latest
下载。
[root@localhost fake-volume]# ./fake-volume[root@localhost fake-volume]# ls /run/docker/plugins/fakeVol.sock/run/docker/plugins/fakeVol.sock[root@localhost temp]# docker run -it --rm -v test:/test --volume-driver=fakeVol busybox:latest /bin/sh/ # ls /test// # touch /test/a.txt/ # echo "hello docker plugin" > /test/a.txt[root@localhost calavera]# cat /var/lib/docker/fakevol/test/a.txthello docker plugin
0 0
- Flocker浅析与Docker插件(3)
- Flocker浅析与Docker插件(1)
- Flocker浅析与Docker插件(2)
- Can flocker share volume between docker containers?
- Walkthrough: Docker Volumes vs Docker Volumes with Flocker
- 虚拟机与Docker的不同浅析
- 实例解析Docker数据卷+数据卷容器+flocker数据共享+DockerHub操作
- Docker入门学习(3)----Docker架构与常用命令总结
- 浅析flannel与docker结合的机制和原理
- Wordpress(WP) 插件机制浅析
- docker插件之docker-plugin实现slave的动态扩容与缩容
- 1.7 Docker与微服务-使用Maven插件构建Docker镜像
- 浅析Docker的网络模式
- 使用插件扩展Docker
- docker 插件开发案例
- docker卷插件--convoy
- docker pull命令实现与镜像存储(3)
- flocker resptapi curl 访问方法
- visual studio 2015对C/C++标准的支持情况
- 百度地图JavaScript API开发叠加行政区划图
- Linux常见命令汇总
- 错误代码: 1066 Not unique table/alias: 'c'
- Dependence Inversion Principle
- Flocker浅析与Docker插件(3)
- socket基本函数
- Spring的AOP小例子,以及遇到的相关ADVICE代码不起作用为题
- 【mybatis】mybatis数据源源码剖析(JNDI、POOLED、UNPOOLED)
- 大菲薄那次数
- TNS-12535错误处理
- poj 3109 离散化+扫描线+树状数组
- 回文数zigzag
- UVA_11258_StringPartition