docker数据的持久化存储

引述

Volumes are the preferred mechanism for persisting data generated by and used by Docker containers. While bind mounts are dependent on the directory structure and OS of the host machine, volumes are completely managed by Docker.

docker 数据存储的三种方式

请添加图片描述
volumes:存于主机文件系统中的某个区域,由Docker管理(/var/lib/docker/volumes/ on linux)。非Docker进程不应该修改这些数据。卷通常是更好的选择,因为卷不会增加使用它的容器的大小,并且卷的内容存在于给定容器的生命周期之外,换句话说就是容器删除,卷并不会被删除。
bind mount:存于主机文件系统中的任意位置。非Docker进程可以修改这些数据
tmpfs mount(Linux中):存于内存中(注意,并不是持久化到磁盘)。如果容器生成非持久状态数据,请考虑使用 tmpfs 挂载以避免将数据永久存储在任何地方,并通过避免写入容器的可写层来提高容器的性能。

小结:
volumes和bind mount都可以将数据持久的保存到硬盘。

docker数据存储的示例

voulmes

  1. 创建卷
$ docker volume create vol-test

2.列出卷

$ docker volume ls
DRIVER    VOLUME NAME
local     vol-test

3.检查卷

$ docker volume inspect vol-test
[
    {
        "CreatedAt": "2021-12-17T10:35:20+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/vol-test/_data",
        "Name": "vol-test",
        "Options": {},
        "Scope": "local"
    }
]

4.删除卷

$ docker volume rm vol-test
vol-test

容器使用volume

可以使用-v或者–mount选项挂载卷,但是如果启动的是服务时,只能使用–mount选项

$ docker run -it \
  --name vol \
  -v vol-test:/data\
  gnaygnil/loongnix-loongarch64:20-RC2-v1 /bin/bash

验证卷是否已正确创建和挂载

$ docker inspect vol

显示的Mounts部分:

"Mounts": [
            {
                "Type": "volume",
                "Name": "vol-test",
                "Source": "/var/lib/docker/volumes/vol-test/_data",
                "Destination": "/data",
                "Driver": "local",
                "Mode": "z",
                "RW": true,
                "Propagation": ""
            }
        ],

bind mount

此方式可以将主机的目录挂载到容器中

$ docker run -it \
  --name bind_mount \
  -v /home/loongson:/data\
  gnaygnil/loongnix-loongarch64:20-RC2-v1 /bin/bash

验证bin mount是否已正确创建和挂载

$ docker inspect bind_mount

显示的Mounts部分:

"Mounts": [
            {
                "Type": "bind",
                "Source": "/home/loongson",
                "Destination": "/data",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

弊端

docker容器数据的持久化存储有局限性,比如容器中运行wps,无法做到用户想将文档存放到任意位置。
调研Flatpak发现,其使用了一种portal机制,可以在sandbox中打开外部的文件,那么docker中是否可以采用portal机制呢?
下一篇再讨论。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值