数据卷(volume)是存在于一个或多个容器中的特定文件或者文件夹
特点:
1,volume在容器创建时就会初始化,在容器运行时就可以使用其中的文件。
2,volume能在不同的容器之间共享和重用。
3,对volume中数据的操作会马上生效。
4,对volume中数据的操作不会影响到镜像本身。
5,volume的生存周期独立于容器的生存周期,即使删除容器,volume仍然会存在,没有任何容器使用的volume也不会被Docker删除。
1,从容器挂着volume
在使用docker run或docker create创建新容器时,可以使用-v标签为容器添加volume,例如
docker run -d -P —name web -v /webapp training/webapp python app.py
通过docker inspect可以查看相应的挂载信息
Source表示宿主机的文件路径,Destination表示容器的文件路径,RW表示读写权限
注:如果进行中不存在/webapp文件夹,容器启动会将创建一个名为/webapp的空文件夹;反之,如果镜像中存在,这个文件夹中的内容将全部被复制到宿主机中对应的文件夹中,并且根据容器中的文件为宿主机中的文件设置合适的权限和所有者。
2,从宿主机挂着volume
在创建容器的时候可以挂载一个主机上特定的目录到容器中:
docker run -d -P —name web -v /src/webapp:/opt/webapp training/webapp python app.py
将宿主机中的/src/webapp文件夹作为一个volume挂载到容器中的/opt/webapp。文件夹必须使用绝对路径,如果宿主机中不存在/src/webapp,将创建一个空文件夹。在/src/webapp文件夹中的所以文件或文件夹都可以在容器的opt/webapp文件夹下被访问。如果镜像中原本存在/opt/webapp文件夹,该文件夹下原有的内容将被删除,以保持与宿主机中的文件夹一致。
将宿主机上面的单个文件挂载到容器中:
docker run -d -P —name web -v /src/file:/opt/file training/webapp python app.py
将宿主机中的/src/file文件座位一个volume挂载到容器中的/opt/file。文件必须使用绝对路径,如果主机中不存在/src/file,则挂载失败。挂载后文件内容与宿主机中的文件一致,也就是说如果容器中原本存在/opt/file,文件的原有内容将被抹去。
设置只读权限
docker run -d -P —name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py
指定容器只能读取该文件夹或者文件,不能写入。
3,volume整合第三方存储插件
docker run -d -P —volume-driver=flocker -v my-named-volume:/opt/webapp —name web training/webapp python app.py
使用—volume-driver挂载一个flocker,使用flocker插件将 voluemname 挂载到容器的 /data 目录。
docker volume create -d flocker -o size=20GB my-named-volume
通过flocker插件创建一个名字为my-named-volume空间为20G的存储。
docker run -d -P -v my-named-volume:/opt/webapp —name web training/webapp python app.py
4,共享volume
