我理解数据库的docker镜像通常将数据存储在卷上。并且可以安装此卷。
我试图用一些默认数据创建一个docker容器。
如果您没有指定音量会怎样?数据是否只存储在docker-image上?这有空间问题吗?我想知道我是否可以将默认的docker数据目录复制到docker镜像作为构建它的一部分。
或者如果你在本地运行mongo并创建一个本地卷然后将该卷作为构建的一部分挂载到mongo容器会发生什么?这是可能的,还是只能在运行docker容器时指定挂载?如果我将mongo映像部署到docker hub,它会将数据存储在卷中吗?
答案 0 :(得分:0)
(写给发生这种情况的任何人) 由于代码的访问要求通常与数据不同,并且版本控制应说明开发过程,而不是对某些数据库更改进行备份,因此通常的建议是将数据与源代码分开。 Docker教程集中在local backup上,与这种范例作斗争可能会很困难。
是,可以在构建过程中将任何数据复制到映像中。只要MongoDB配置指向数据库文件复制到的目录,它将在启动时看到数据。 但是,对数据库所做的任何更改将仅保存在正在运行的容器中,并且在删除数据库时会丢失(除非您从该容器中创建另一个映像)。通常,它们将保存到数据目录,但是在run
上安装数据卷将替换该位置上的映像。
How to Back Up Your Data Volumes to Docker Hub提供了一种折衷方案,可将数据映像与应用程序映像分离。首先,它扩展了本地备份过程,以创建一个数据容器,然后将该容器转换为映像并推送它:
docker run --rm --volumes-from data-container-backup --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /folderToBackup
docker run -d -v $(pwd):/backup --name data-backup ubuntu /bin/sh -c "cd / && tar xvf /backup/backup.tar
docker commit data-backup repo/data-backup:$VERSION
docker push repo/data-backup:$VERSION
然后,您可以使用--volumes-from运行另一个容器,该容器将数据容器中的文件夹用作数据卷。
docker run -v /folderToBackup --entrypoint "bin/sh" --name data-container repo/data-backup:${VERSION}
docker run --volumes-from=data-container repo/whatEver
(您的图片名称,容器名称和路径会有所不同)