Docker容器卷详解

1 容器卷是什么?

卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System提供一些用于持续存储或共享数据的特性:
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷

  1. 一句话:有点类似我们Redis里面的rdb和aof文件
  2. 将docker容器内的数据保存进宿主机的磁盘中
  3. 运行一个带有容器卷存储功能的容器实例
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录      镜像名

如果是CentOS7安全模块会比之前系统版本加强,不安全的会先禁止,所以目录挂载的情况被默认为不安全的行为,
在SELinux里面挂载目录被禁止掉了,如果要开启,我们一般使用–privileged=true命令,扩大容器的权限解决挂载目录没有权限的问题,也即使用该参数,container内的root拥有真正的root权限,否则,container内的root只是外部的一个普通用户权限。

2 容器卷能干什么?

将运用与运行的环境打包镜像,run后形成容器实例运行 ,但是我们对数据的要求希望是持久化的

Docker容器产生的数据,如果不备份,那么当容器实例删除后,容器内的数据自然也就没有了。
为了能保存数据在docker中我们使用卷。

特点:

  1. 数据卷可在容器之间共享或重用数据。
  2. 卷中的更改可以直接实时生效。
  3. 数据卷中的更改不会包含在镜像的更新中。
  4. 数据卷的生命周期一直持续到没有容器使用它为止。

3 数据卷案例

3.1 宿主vs容器之间映射添加容器卷

命令:

docker run -it --privileged=true -v /tmp/host_data:/tmp/docker_data --name=u1  ubuntu

在这里插入图片描述
切换到/tmp/docker_data目录,新建dockerin.txt

root@c3f3656b2baf:/# cd /tmp/docker_data/
root@c3f3656b2baf:/tmp/docker_data# ls
root@c3f3656b2baf:/tmp/docker_data# touch dockerin.txt
root@c3f3656b2baf:/tmp/docker_data# ls
dockerin.txt

在这里插入图片描述
回到宿主机 cd /tmp/host_data/目录,查看dockerin.txt文件已经同步

[root@iZbp10sz66ubwpbh2bw9jbZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS         PORTS     NAMES
c3f3656b2baf   ubuntu    "bash"        2 minutes ago   Up 2 minutes             u1
0a5a6970ab62   ubuntu    "/bin/bash"   6 days ago      Up 6 days                musing_khayyam
54bfcf1ae416   ubuntu    "/bin/bash"   8 days ago      Up 8 days                hungry_maxwell
[root@iZbp10sz66ubwpbh2bw9jbZ ~]# cd /tmp/host_data/
[root@iZbp10sz66ubwpbh2bw9jbZ host_data]# ls
dockerin.txt

在这里插入图片描述
在主机新建hostin.txt文件

[root@iZbp10sz66ubwpbh2bw9jbZ host_data]# touch hostin.txt
[root@iZbp10sz66ubwpbh2bw9jbZ host_data]# ls
dockerin.txt  hostin.txt
[root@iZbp10sz66ubwpbh2bw9jbZ host_data]# 

在这里插入图片描述
在docker容器内查看

root@c3f3656b2baf:/tmp/docker_data# ls
dockerin.txt  hostin.txt
root@c3f3656b2baf:/tmp/docker_data# 

3.2 查看数据卷是否挂载成功

docker inspect 容器ID
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/tmp/host_data",
                "Destination": "/tmp/docker_data",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

3.3 容器和宿主机之间数据共享

  1. docker修改,主机同步获得
  2. 主机修改,docker同步获得
  3. docker容器stop,主机修改,docker容器重启看数据是否同步。

3.4 读写规则映射添加说明

3.4.1 读写(默认)

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:rw      镜像名

3.4.2 只读

docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录:ro      镜像名

ro = read only

3.5 卷的继承和共享

docker run -it  --privileged=true --volumes-from 父类  --name u2 ubuntu
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东北亚大中华区首席搬砖工具人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值