我们正尝试转向 Docker 进行部署。我们的架构需要有一个 redis、一个 mongodb 和几个基于 nodejs 和 java 的 Docker 容器。
所以我的问题是,如果假设 redis/mongodb docker 容器崩溃,我们是否会丢失它拥有的所有数据?
我们想要隔离,但同时我们不希望由于故障/崩溃而丢失数据。这甚至有可能通过 Docker 实现吗?还是这里不相关?
如有任何帮助或意见,我们将不胜感激。
谢谢
最佳答案
答案是:是的——如果容器崩溃以至于无法恢复/重启,数据就会消失。但是,通常容器可以重新启动并继续 - 在这种情况下数据不会丢失。
例如- docker 文档中的以下序列说明了容器启动的工作方式。请注意,在容器被移除之前,数据不会丢失。
# Start a new container
$ JOB=$(sudo docker run -d ubuntu /bin/sh -c "while true; do echo Hello world; sleep 1; done")
# Stop the container
$ sudo docker stop $JOB
# Start the container
$ sudo docker start $JOB
# Restart the container
$ sudo docker restart $JOB
# SIGKILL a container
$ sudo docker kill $JOB
# Remove a container
$ sudo docker stop $JOB # Container must be stopped to remove it
$ sudo docker rm $JOB
每当您执行 docker run
命令时,您都会启动一个包含新数据的新容器。数据基于您提供的图像并且该数据是一致的(当然除非您重建图像)。
那么,您应该如何设置 docker 以保持您的数据完整无缺?我认为一个好的方法是将重要数据保存在 volume
中。卷只是保存数据的外部文件夹(即来自主机系统的文件夹),即使您重新安装整个 docker 守护进程,这些数据也不会丢失。
例子:
docker run -v /some/local/dir:/some/dir/in/redis-container my/redis
这会将主机文件夹 /some/local/dir
挂载为正在运行的容器中的文件夹 /some/dir/in/redis-container
。如果例如redis
将其数据存储在您准备好去的那个文件夹中,并且可以在重启/崩溃时幸存下来。
有关 docker 卷的更多信息,请查看 docs .另一篇很棒的文章也来自 docker 网站,Managing Data in Containers .
编辑:评论后我澄清了答案 - 如果容器无法重新启动(完全崩溃),数据将丢失。
关于node.js - 当 docker 容器崩溃时数据会发生什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27701263/