Docker 1.9.0及以上版本
使用卷API
docker volume create --name hello
docker run -d -v hello:/container/path/for/volume container_image my_command
这意味着必须放弃纯数据容器模式,转而使用新卷。
实际上,卷API只是实现数据容器模式的一种更好的方式。
如果你用-v volume_name:/container/fs/path创建一个容器,Docker会自动为你创建一个命名卷,它可以:
通过docker卷ls列出
通过docker卷inspect volume_name进行识别
备份为普通目录
通过——volumes-from连接像以前一样备份
新的卷API增加了一个有用的命令,可以让你识别悬挂的卷:
docker volume ls -f dangling=true
然后通过它的名字删除它:
docker volume rm <volume name>
正如@mpugach在评论中强调的那样,你可以用一行漂亮的语句摆脱所有悬浮的卷:
docker volume rm $(docker volume ls -f dangling=true -q)
# Or using 1.13.x
docker volume prune
码头工人1.8。X及以下
最适合生产的方法似乎是使用仅数据容器。
仅数据容器在一个基本映像上运行,实际上除了公开一个数据卷外什么也不做。
然后你可以运行任何其他容器来访问数据容器卷:
docker run --volumes-from data-container some-other-container command-to-execute
在这里,您可以很好地了解如何安排不同的容器。
这里有一个关于容量如何工作的很好的见解。
在这篇博客文章中,对所谓的容器作为体积模式进行了很好的描述,阐明了只有数据容器的主要观点。
Docker文档现在有了容器的volume/s模式的权威描述。
下面是Docker 1.8的备份/恢复过程。X及以下。
备份:
sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
——rm:当容器退出时将其移除
——volumes-from DATA:附加到DATA容器共享的卷上
-v $(pwd):/backup:将当前目录挂载到容器中;将tar文件写入
Busybox:一个简单的小映像-适合快速维护
Tar CVF /backup/backup. Tar /data:将/data目录下的所有文件创建一个未压缩的Tar文件
恢复:
# Create a new data container
$ sudo docker run -v /data -name DATA2 busybox true
# untar the backup files into the new container᾿s data volume
$ sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
data/
data/sven.txt
# Compare to the original container
$ sudo docker run --rm --volumes-from DATA -v `pwd`:/backup busybox ls /data
sven.txt
这里有一篇来自优秀的Brian Goff的文章,解释了为什么容器和数据容器使用相同的图像是好的。