停止与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选项。 这意味着您的容器会在重新启动虚拟机后自动重启。 当你持续保存你的数据时,你的数据库在重启之前或之后都没有什么区别。