我知道使用docker时的一般智慧是将数据移出容器并改为使用卷。
但是我试图创建一个提供一键式完全容器化安装方法的系统,并且说“您应该首先在计算机上安装mongodb”不是一个选择。
所以当前的解决方案是将数据本身保存在容器中(例如MongoDB),但是我现在正在寻找不时备份容器自身快照的方法,以便我可以立即生成当一个容器掉落时从头开始创建一个相同的容器。
我该如何实现?
答案 0 :(得分:1)
如果您不想使用卷,则可以在特定时间使用docker commit --change "added some changes to my container" <container_id> repo/image:tag
新映像将包含当前容器的所有文件系统。
话虽如此,不使用音量有几个缺点:
默认情况下,在容器内创建的所有文件都存储在可写容器层上。这意味着:
当该容器不再运行时,数据不会持久保存,并且如果另一个进程需要它,可能很难从容器中取出数据。 容器的可写层与容器运行所在的主机紧密耦合。您无法轻松地将数据移动到其他地方。 写入容器的可写层需要存储驱动程序来管理文件系统。存储驱动程序使用Linux内核提供联合文件系统。与使用直接写入主机文件系统的数据卷相比,这种额外的抽象降低了性能。
因此,最好的选择是使用音量! 现在,您可以选择不同的种类:
虽然绑定挂载取决于主机的目录结构,但是卷完全由Docker管理。与绑定安装相比,卷具有几个优点:
与绑定安装相比,卷更易于备份或迁移。 您可以使用Docker CLI命令或Docker API管理卷。 卷在Linux和Windows容器上均可工作。 可以在多个容器之间更安全地共享卷。 卷驱动程序使您可以将卷存储在远程主机或云提供商上,以加密卷内容或添加其他功能。 可以通过容器预先填充新卷的内容。
阅读文档以更好地了解卷的功能:https://docs.docker.com/storage/volumes/
答案 1 :(得分:1)
您可以轻松导出和导入docker容器。
在tar文件中导出整个容器
docker export docker_container_name > latest.tar
导入Docker容器并运行它
cat exampleimage.tar | docker import - exampleimagelocal:new
有用的链接-Docker export Docker Import
如果要导出Docker映像,则
docker save -o image.tar Docker_Image_Name
导入Docker映像
docker load -i image.tar
然后运行docker映像。
我认为您可以通过上述操作来实现,主要是您需要使用第一种方法,导出docker容器并在需要时进行部署,它将包含您的旧数据。
答案 2 :(得分:0)
您可以使用docker commit。
使用docker commit
,您可以根据容器的更改来创建新图像。
从文档中,您可以做到涵盖用例:
将容器的文件更改或设置提交到 一个新的形象。这样,您可以通过运行 交互式外壳程序,或将工作数据集导出到另一台服务器。 通常,最好使用Dockerfiles在 文件化和可维护的方式。详细了解有效的图像名称和 标签。
提交操作将不包含卷中包含的任何数据 安装在容器内。
答案 3 :(得分:0)
您可以使用docker commit
从容器中拍摄快照。
有关更多信息,请参见此post。