Docker数据管理

本文详细介绍了Docker中数据管理的两种主要方式:数据卷(Volumes)和挂载主机目录(Bindmounts)。数据卷是独立于容器的持久化存储,不受容器生命周期影响,可用于数据共享、备份和迁移。创建、查看和删除数据卷的命令也进行了说明。挂载主机目录则允许直接将宿主机目录与容器内部目录关联,实现数据交互。同时提到了-v和--mount参数的使用方法,以及如何设置只读权限。
摘要由CSDN通过智能技术生成

Docker数据管理

Docker在容器中管理数据主要有两种方式:

  • 数据卷(Volumes)

  • 挂载主机目录(Bind mounts)

数据卷

Docker的镜像是由多个只读的文件系统叠加在一起形成的。当我们在我启动一个容器的时候,Docker会加载这些只读层并在这些只读层的上面(栈顶)增加一个读写层。这时如果修改正在运行的容器中已有的文件,那么这个文件将会从只读层复制到读写层。该文件的只读版本还在,只是被上面读写层的该文件的副本隐藏。当删除Docker,或者重新启动时,之前的更改将会消失。在Docker中,只读层及在顶部的读写层的组合被称为Union File System(联合文件系统)。

所以为了实现容器与主机之间、容器与容器之间共享文件,容器中数据的持久化(数据持久化即数据不随着Container的结束而结束),将容器中的数据备份、迁移、恢复等,Docker加入了数据卷(volumes)机制。简单的讲,简单的说就是绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。

数据卷的特性:

  • 数据卷存在于宿主机的文件系统中,独立于容器,和容器的生命周期是分离的。
  • 数据卷可以是目录也可以是文件,容器可以利用数据卷与宿主机进行数据共享,实现了荣期间的数据共享和交换。
  • 容器启动初始化时,如果容器使用的镜像包含了数据,这些数据会拷贝到数据卷中。
  • 容器对数据卷的修改是实时进行的。
  • 数据卷的变化不会影响镜像的更新。数据卷是独立于联合文件系统,镜像是基于联合文件系统。镜像与数据卷之间不会相互影响。

创建一个数据卷

docker volume create volumesName

注意: volumesName指数据卷的名字

查看所有的数据卷:

docker volume ls

在这里插入图片描述
查看指定数据卷的详细信息:

docker volume inspect volumesName

在这里插入图片描述
删除数据卷:

docker volume rm volumesName

无主的数据卷可能会占据很多空间,要清理请使用以下命令:

docker volume prune

在这里插入图片描述

Docker挂载容器数据卷

Docker有bind mountsVolumes、和tepfs mounts三种方式挂载数据卷 ,还有就是共享其他容器的数据卷,其中tmpfs是一种基于内存的临时文件系统。tepfs mounts数据不会存储在磁盘上。此文章笔者只讲述bind mounts方法。
启动一个挂载数据卷的容器:

bind mounts方式挂载数据卷的两种方式:

  • 使用-v参数挂载
docker run --name xxxx -p 宿主机端口:docker端口 -v 宿主机目录:docker目录 -it imagename /bin/bash

注意:宿主机目录和Docker目录必须是绝对路径
imagename为镜像名

  • 使用--mount参数挂载
docker run --name xxxx -p 宿主机端口:docker端口 --mount   
type:volume,source=xxx,target=/xxx 宿主机目录:docker目录 -it imagename /bin/bash
  • type选项,其可以是bind,volume,或tmpfs。本文只讨论数据卷,因此类型始终是volume。
  • source选项。对于命名数据卷,这是数据卷的名称。对于匿名数据卷,省略此字段。可以指定为source /src。
  • 将destination文件或目录安装在容器中的路径作为其值。可以指定为destination,dst或target。
  • readonly选项(如果存在)导致绑定装入以只读方式装入容器中。
  • volume-opt选项可以多次指定,它采用由选项名称及其值组成的键值对。

注意:使用-v参数时如果本地目录不存在Docker会自动为你创建一个文件夹。使用–mount参数时如果本地目录不存在,Docker会报错。Docker挂载主机目录的默认权限是读写,用户也可以通过增加readonly指定为只读。

挂载主机目录

docker run -it --name XXXX -v /宿主机目录:/docker目录 -it imagename /bin/bash

注意:--mount 标记也可以从主机挂载单个文件到容器中

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

麻瓜与AI奇遇记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值