停止与MongoDB泊坞窗的虚拟机,而不会丢失数据
我已经在AWS EC2上的一个虚拟机上安装了官方的MongoDB docker映像,并且数据库上已经有数据。 如果我停止虚拟机(为了节省开支),我会丢失数据库中包含的所有数据吗? 我怎样才能在这些情况下坚持下去?
有多种select来实现这一点,但最常见的两种方法是:
- 在主机上创build一个目录来挂载数据
- 创build一个docker卷来安装数据
1)在主机系统的适当卷上创build一个数据目录,例如/my/own/datadir
。 像这样开始你的mongo容器:
$ docker run --name some-mongo -v /my/own/datadir:/data/db -d mongo:tag
该命令的-v /my/own/datadir:/data/db
部分在容器内将基础主机系统的/my/own/datadir
目录挂载为/data/db
,其中默认情况下MongoDB将其数据文件。
请注意,启用了SELinux的主机系统上的用户可能会遇到问题。 目前的解决方法是将相关的SELinux策略types分配给新的数据目录,以便允许容器访问它:
$ chcon -Rt svirt_sandbox_file_t /my/own/datadir
这个的来源是图像的官方文档 。
2)另一种可能性是使用docker卷。
$ docker volume create my-volume
这将在文件夹/var/lib/docker/volumes/my-volume
创build一个docker /var/lib/docker/volumes/my-volume
。 现在你可以开始你的容器:
docker run --name some-mongo -v my-volume:/data/db -d mongo:tag
所有的数据将被存储在my-volume
所以在/var/lib/docker/my-volume
文件夹中。 所以,即使你删除你的容器,并创build一个新的mongo容器与这个卷链接,你的数据将被加载到新的容器。
在执行初始--restart=always
docker run
命令时,也可以使用--restart=always
选项。 这意味着您的容器会在重新启动虚拟机后自动重启。 当你持续保存你的数据时,你的数据库在重启之前或之后都没有什么区别。