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 数据存储的三种方式

docker数据的持久化存储_第1张图片
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机制呢?
下一篇再讨论。

你可能感兴趣的:(linux,docker,linux,容器)