【发布时间】:2014-10-20 14:13:23
【问题描述】:
使用 docker 持久化容器数据的最佳方式是什么?我希望能够保留一些数据并在重新启动容器时能够将它们取回。我读过这个有趣的post,但它并没有完全回答我的问题。
据我所知,我只有一个选择:
docker run -v /home/host/app:/home/container/app
这会将计数器文件夹挂载到主机上。
还有其他选择吗?仅供参考,我不使用链接容器(--link)
【问题讨论】:
标签: docker
使用 docker 持久化容器数据的最佳方式是什么?我希望能够保留一些数据并在重新启动容器时能够将它们取回。我读过这个有趣的post,但它并没有完全回答我的问题。
据我所知,我只有一个选择:
docker run -v /home/host/app:/home/container/app
这会将计数器文件夹挂载到主机上。
还有其他选择吗?仅供参考,我不使用链接容器(--link)
【问题讨论】:
标签: docker
使用卷是处理要从容器中保留的数据的最佳方式。使用-v 标志效果很好,您不应该遇到这个问题。
您还可以在Dockerfile 中使用VOLUME 指令,这意味着您不必在运行时添加任何更多选项,但是它们与特定容器紧密耦合,您需要使用docker start,而不是 docker run 来获取数据(或者当然是 -v 到过去创建的卷,可能在 /var/ 某处)。
处理卷的一种常见方法是创建一个data volume container,其卷由-v 定义,然后在创建应用容器时,使用--volumes-from 标志。这将使您的新容器使用与您使用-v 的容器(您的数据卷容器)相同的卷。当然,这似乎是您将问题转移到其他地方。
这使得在多个容器上共享卷变得非常简单。也许您有一个容器用于您的应用程序,另一个用于 logstash。
【讨论】:
创建一个卷容器:-v 的这种格式创建一个卷,例如目录/var/lib/docker/volume/d3b0d5b781b7f92771b7342824c9f136c883af321a6e9fbe9740e18b93f29b69
这仍然是一个绑定挂载的 /container/path/vol
docker run -v /foo/bar/vol --name volbox ubuntu
我现在可以使用这个容器作为我的卷。
docker run --volumes-from volbox --name foobox ubuntu /bin/bash
root@foobox# ls /container/path/vol
现在,如果我分发这两个容器,它们就会正常工作。该卷将始终可供 foobox 使用,无论它部署到哪个主机。
如果你不希望你的存储在 /var/lib/docker/volumes...
我建议你看看 Michael Crosby 的一些优秀帖子 https://docs.docker.com/userguide/dockervolumes/ 和码头工人文档 https://docs.docker.com/userguide/dockervolumes/
【讨论】: