Docker CLI操作volume

来源:互联网 发布:mac 安装mysql tar.gz 编辑:程序博客网 时间:2024/05/29 12:45

实验环境docker-engine版本V1.13

根据v1.13版的docker文档,说明了volume的几个特点:

  1. 可以绕过文件系统,存在于一个或多个容器中
  2. 独立于容器的生命周期,并且在容器销毁以后,volume 不会被自动删除或是垃圾回收
  3. 分三类:
    • host volume:在宿主机上,可从容器内访问
    • named volume:docker管理volume位置,有名字
    • anonymous volume:docker管理volume位置,没有名字

docker volume命令有下面几个子命令:

1、docker volume create

最基本的,创建本地卷:

[root@localhost ~]# docker volume create hellohello[root@localhost ~]# docker volume lsDRIVER              VOLUME NAMElocal               hello

创建一个自定义参数的卷:

create命令可以创建一个卷,默认的driver是local ,它类似于linux中的mount命令,也可以挂上几个自定义的参数,如下:
type表示文件系统类型,device表示设备,o表示mount命令的参数,用,分隔不同的参数

[root@localhost ~]# docker volume create --driver local \    --opt type=tmpfs \    --opt device=tmpfs \    --opt o=size=100m,uid=1000 \    foo[root@localhost ~]# docker volume lsDRIVER              VOLUME NAMElocal               foo

运行一个容器并挂载这个卷

[root@localhost ~]# docker run -it --rm -v foo:/opt/foo busybox /bin/shUnable to find image 'busybox:latest' locallylatest: Pulling from library/busybox1cae461a1479: Pull complete Digest: sha256:c79345819a6882c31b41bc771d9a94fc52872fa651b36771fbe0c8461d7ee558Status: Downloaded newer image for busybox:latest/ # cd opt//opt # ls -ltotal 0drwxrwxrwt    2 1000     root            40 May 11 17:57 foo

可以看到,卷已经挂载了,并且uid设置为了1000

创建一个网络目录作为卷:

[root@localhost /]# docker volume create --driver=local \    --opt type=nfs \    --opt o=addr=192.168.0.105,rw \    --opt device=:/opt/test \    foofoo

查看卷foo的详细信息:

[root@localhost /]# docker volume inspect foo[    {        "Driver": "local",        "Labels": {},        "Mountpoint": "/var/lib/docker/volumes/foo/_data",        "Name": "foo",        "Options": {            "device": ":/opt/test",            "o": "addr=192.168.0.105,rw",            "type": "nfs"        },        "Scope": "local"    }]

运行一个容器测试卷的情况:

[root@localhost /]# docker run -it --rm -v foo:/opt/foo busybox /bin/sh/ # cd /opt/foo/opt/foo # lshahaha

可以看到,在/opt/foo目录中有网络卷中创建的文件,挂载成功。

2、docker volume inspect

这个命令比较简单,只有一个参数--format, -f这也是docker中各种inspect命令中相同的特点,栏目1中已经使用过这个命令,这里加入参数指定要查看的项:

[root@localhost /]# docker volume inspect --format '{{ .Mountpoint }}' foo/var/lib/docker/volumes/foo/_data

对比栏目1中的结果,这里显示的特定的输出。

3、docker volume ls

这个命令也比较简单,和inspect类似,可以通过--format, -f指定输出的格式,由于volume有下表中的几个属性,所以可以根据他们进行定制输出:

属性 描述 Driver 卷驱动 Labels 标签 Mountpoint 宿主机挂载点 Name 名称 Options 挂载参数 Scope 作用域

如下命令定制输出的信息:

[root@localhost /]# docker volume ls --format "{{.Name}}: {{.Driver}}"foo: localfoo1: localfoo2: local


--quiet, -q命令可以简洁的只输出volume名,方便作为参数输入到别的命令中去。

[root@localhost /]# docker volume ls --quietfoofoo1foo2

4、docker volume prune

删除所有没用的volume,危险操作,慎用!

5、docker volume rm

删除指定的volume

[root@localhost /]# docker volume rm foo2foo2