如何在 Docker 中处理持久存储(例如数据库)

2024-02-07

人们如何处理 Docker 容器的持久存储?

我目前正在使用这种方法:构建图像,例如对于 PostgreSQL,然后使用以下命令启动容器

docker run --volumes-from c0dbc34fd631 -d app_name/postgres

恕我直言,这有一个缺点,我永远不能(意外)删除容器“c0dbc34fd631”。

另一个想法是将主机卷“-v”挂载到容器中,但是,userid容器内的内容不一定匹配userid来自主机,然后权限可能会混乱。

注意:代替--volumes-from 'cryptic_id'你也可以使用--volumes-from my-data-container where my-data-container是您分配给纯数据容器的名称,例如docker run --name my-data-container ...(参见已接受的答案)


Docker 1.9.0 及以上版本

Use 卷API https://docs.docker.com/engine/reference/commandline/volume_create/

docker volume create --name hello
docker run -d -v hello:/container/path/for/volume container_image my_command

这意味着必须放弃纯数据容器模式,转而使用新卷。

实际上,卷 API 只是实现数据容器模式的更好方法。

如果您创建一个带有-v volume_name:/container/fs/pathDocker 会自动为您创建一个命名卷,它可以:

  1. 通过以下方式列出docker volume ls
  2. 可以通过以下方式识别docker volume inspect volume_name
  3. 备份为普通目录
  4. 像以前一样通过--volumes-from联系

新的卷 API 添加了一个有用的命令,可让您识别悬空卷:

docker volume ls -f dangling=true

然后通过其名称将其删除:

docker volume rm <volume name>

正如 @mpugach 在评论中强调的那样,您可以用一句漂亮的话摆脱所有悬空的卷:

docker volume rm $(docker volume ls -f dangling=true -q)
# Or using 1.13.x
docker volume prune

Docker 1.8.x 及以下版本

似乎最适合生产的方法是使用仅数据容器.

仅数据容器在准系统映像上运行,实际上除了公开数据卷之外不执行任何操作。

然后您可以运行任何其他容器来访问数据容器卷:

docker run --volumes-from data-container some-other-container command-to-execute
  • Here http://www.offermann.us/2013/12/tiny-docker-pieces-loosely-joined.html您可以很好地了解如何排列不同的容器。
  • Here http://crosbymichael.com/advanced-docker-volumes.html对卷的工作原理有很好的了解。

In 这篇博文 http://container42.com/2013/12/16/persistent-volumes-with-docker-container-as-volume-pattern/有一个很好的描述所谓的容器作为体积模式这澄清了要点仅数据容器.

Docker 文档现在有了关于以下内容的明确描述:容器体积/秒图案。 https://docs.docker.com/engine/userguide/dockervolumes/

以下是 Docker 1.8.x 及以下版本的备份/恢复过程。

BACKUP:

sudo docker run --rm --volumes-from DATA -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data
  • --rm:容器退出时将其移除
  • --volumes-from DATA:附加到 DATA 容器共享的卷
  • -v $(pwd):/backup:将当前目录绑定挂载到容器中;将 tar 文件写入
  • busybox:一个更简单的小镜像 - 有利于快速维护
  • tar cvf /backup/backup.tar /data:创建 /data 目录中所有文件的未压缩 tar 文件

RESTORE:

# Create a new data container
$ sudo docker run -v /data -name DATA2 busybox true
# untar the backup files into the new container᾿s data volume
$ sudo docker run --rm --volumes-from DATA2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
data/
data/sven.txt
# Compare to the original container
$ sudo docker run --rm --volumes-from DATA -v `pwd`:/backup busybox ls /data
sven.txt

这是一个不错的文章来自优秀的 Brian Goff http://container42.com/2014/11/18/data-only-container-madness/解释为什么容器和数据容器使用相同的图像是好的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Docker 中处理持久存储(例如数据库) 的相关文章

随机推荐