答案是:是 - 如果容器崩溃而无法恢复/重新启动,则数据将消失。但是,通常容器可以重新启动并继续 - 在这种情况下,数据不会丢失。
例如 - 来自 docker docs 的以下序列说明了容器启动的工作方式。请注意,在移除容器之前,此处的数据不会丢失。
# 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
Run Code Online (Sandbox Code Playgroud)
每当您执行docker run命令时,您都会使用新数据启动一个新容器。数据基于您提供的图像并且该数据是一致的(当然除非您重建图像)。
那么,您应该如何设置 docker 以保持数据完整?我认为一个好的方法是将重要数据安装在volume. 卷只是保存数据的外部文件夹(即来自主机系统的文件夹),即使您重新安装整个 docker 守护程序,这些数据也不会丢失。
例子:
docker run -v /some/local/dir:/some/dir/in/redis-container my/redis
Run Code Online (Sandbox Code Playgroud)
这会将主机文件夹安装/some/local/dir为/some/dir/in/redis-container正在运行的容器中的文件夹。例如,如果redis将它的数据存储在该文件夹中,您就可以开始使用并且重新启动/崩溃可以幸免于难。
有关 docker 卷的更多信息,请查看文档。另一篇很棒的文章也来自 docker 网站,Managing Data in Containers。
编辑:评论后我澄清了答案 - 如果容器无法重新启动(完全崩溃),数据就会丢失。
如果容器崩溃,您将不会丢失任何数据 - 至少不会超过常规应用程序崩溃.
容器本身不太可能崩溃(毕竟,它只是你的应用程序的信封).您在容器中运行的应用程序可能会崩溃,如果这样,他们的数据仍将在容器文件系统上.在这种情况下,您所要做的就是重新启动发生故障的容器.
你可能会失去一些东西的一种情况是你明确告诉Docker在它不再运行时移除容器(--rm选项).
如此说来,对于IO密集型应用,例如数据库,强烈建议主办多克尔数据卷,出于性能原因(码头工人体积是传统的文件系统,而容器默认文件系统是层的堆叠,并且将比较慢).
| 归档时间: |
|
| 查看次数: |
3770 次 |
| 最近记录: |