常见的使用场景是使用纯数据容器来持久化数据库、配置文件或者数据文件等。官方的文档上有详细的解释。例如:web
$ docker run --name dbdata postgres echo "Data-only container for postgres"
该命令将会建立一个已经包含在Dockerfile里定义过Volume的postgres镜像,运行echo命令而后退出。当咱们运行docker ps命令时,echo能够帮助咱们识别某镜像的用途。咱们能够用-volumes-from命令来识别其它容器的Volume:docker
$ docker run -d --volumes-from dbdata --name db1 postgres
使用数据容器的两个注意点:shell
不要运行数据容器,这纯粹是在浪费资源。数据库
不要为了数据容器而使用“最小的镜像”,如busybox或scratch,只使用数据库镜像自己就能够了。你已经拥有该镜像,因此并不须要占用额外的空间。ubuntu
若是要受权一个容器访问另外一个容器的Volume,咱们可使用-volumes-from参数来执行docker runbash
#sudo docker run --volumes-from dbdata -v $(pwd):/backup--name worker ubuntu tar cvf /backup/backup.tar /dbdata
首先利用ubuntu镜像建立一个容器worker.使用—volumes-from dbdata参数来让容器挂载dbdata容器的数据卷;使用 –v $(pwd):/backup参数来挂载本机的当前目录到worker容器的/backup目录
Woker容器启动后,执行tar命令将/dbdata压缩到/backup/backup.tar,这样就到物理机的当前目录了app
在用docker run命令的时候,使用-v标记能够在容器内建立一个数据卷。屡次使用-v标记能够建立多个数据卷。
下面使用training/webapp镜像建立一个Web容器,并建立一个数据卷挂载到容器的/we-bapp目录:
$ sudo docker run -d -P --name web -v /webapp training/webapp
注意 -P是容许外部访问容器须要暴露的端口。webapp
查看该数据卷在主机上的存储目录post
docker inspect -f {{.Volumes}} your-container-name
这种应该是在主机/var/lib/docker目录底下随机命名的一个目录去挂载,若是是在mac上,则该目录在visualbox上面。code
这个是在dockerfile中VOLUME没法作到的
)使用-v标记也能够指定挂载一个本地的已有目录到容器中去做为数据卷:
$ sudo docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp
上面的命令加载主机的/src/webapp目录到容器的/opt/webapp目录
挂载一个本地主机文件做为数据卷-v标记也能够从主机挂载单个文件到容器中做为数据卷:
$ sudo docker run --rm -it -v ~/.bash_history:/.bash_history ubuntu /bin/bash这样就能够记录在容器输入过的命令历史了。