csdn推荐
目录
1. Docker Volumes
使用存储卷进行存储持久化
特点 独立于容器生命周期:Volumes 存储的数据独立于容器生命周期,即使容器被删除,数据依然保留。管理便捷:Docker 提供了一些命令用于管理 Volumes,比如创建、删除、列出等。存储位置:Volumes 存储在 Docker 的管理目录下(通常是/var/lib/docker/volumes/),用户无需关心具体路径。支持跨平台:Volumes 在不同的操作系统和 Docker 环境中具有一致的行为。备份和恢复:Volumes 容易备份和恢复,因为它们独立于容器且由 Docker 管理。 示例
#创建 Volume:
[root@rockylinux docker]# docker volume create addvimubuntu
addvimubuntu
-----------------------------------------------------
#查看卷详细信息
[root@rockylinux docker]# docker volume inspect addvimubuntu
[
{
"CreatedAt": "2024-07-01T19:32:05+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/addvimubuntu/_data",
"Name": "addvimubuntu",
"Options": null,
"Scope": "local"
}
]
-----------------------------------------------------
#运行容器并挂载 Volume:
[root@rockylinux docker]# docker run -d -it --volume addvimubuntu:/opt --name vim_demo registry.cn-hangzhou.aliyuncs.com/fujiangdocker2022/addvimubuntu:v1 /bin/bash
root@0f3f450684ed:/opt# touch 1.txt
root@0f3f450684ed:/opt# echo 1.txt > 1.txt
root@0f3f450684ed:/opt# echo hello > 2.txt
[root@rockylinux _data]# pwd
/var/lib/docker/volumes/addvimubuntu/_data
[root@rockylinux _data]# ls
1.txt 2.txt
-----------------------------------------------------
#列出 Volumes:
docker volume ls/list
-----------------------------------------------------
#删除 Volume:
[root@rockylinux _data]# docker volume rm addvimubuntu
# 删除 Volume(需要先停止和删除相关容器)
docker stop
2. Bind Mounts
使用宿主机本地目录进行存储持久化
特点 直接使用宿主机目录:Bind Mounts 直接将宿主机的一个目录挂载到容器内的一个目录。高灵活性:可以选择任意的宿主机目录进行挂载。依赖于宿主机文件系统结构:由于直接使用宿主机的路径,Bind Mounts 的行为依赖于宿主机的文件系统结构和权限。性能更高:因为直接访问宿主机文件系统,性能可能会更高,特别是在高 I/O 场景下。需要更高的权限管理:由于直接访问宿主机目录,容易出现权限问题和安全风险。共享和重用,数据卷可以在容器之间共享或重用数据
容器数据卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过UnionFS,提供一些用于持续存储或共享数据。
特性:卷设计的目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
示例
docker run -it --privileged=true -v /宿主机绝对路径目录:/容器内目录 镜像名
Docker挂载主机目录,可能会出现报错:cannot open directory .: Perission denied。
解决方案:在命令中加入参数 --privileged=true。
CentOS7安全模块比之前系统版本加强,不安全的会先禁止,目录挂载的情况被默认为不安全的行为,在SELinux里面挂载目录被禁止掉了。如果要开启,一般使用 --privileged=true,扩大容器的权限解决挂载没有权限的问题。也即使用该参数,容器内的root才拥有真正的root权限,否则容器内的root只是外部的一个普通用户权限(不能读写)。
运行一个带有容器卷存储功能的容器实例:
docker run -it --privileged=true -v 宿主机绝对路径目录:容器内目录[rw | ro] 镜像名
可以使用docker inspect 容器id查看容器绑定的数据卷。
权限:
容器卷的继承:
# 启动一个容器
docker run -it --privileged=true /tmp/test:/tmp/docker --name u1 ubuntu /bin/bash
# 使用 --volumes-from 继承 u1的容器卷映射配置
docker run -it --privileged=true --volumes-from u1 --name u2 ubuntu
--volumes-from 父类
这个选项允许新的容器从另一个已经存在的容器(称为“父类”容器)中挂载卷。换句话说,新容器将继承“父类”容器的卷,并且可以访问这些卷中的数据
u2 容器将能够访问和使用 u1 容器中的 卷
继承的是挂载的规则,即使u1挂了也不会影响u2,容器之间独立。(u1恢复也不会影响)用于容器之间的共享
[root@rockylinux dockerdata]# docker run -it --privileged=true --volumes-from test3 --name test4 ubuntu
root@46c9ab85245e:/# cd /opt
root@46c9ab85245e:/opt# ls
fujiang.txt love.txt mount.test test.txt test3.txt
@ 对比总结
特性
Docker Volumes
Bind Mounts
存储位置
Docker 管理的存储位置(如 /var/lib/docker/volumes)
宿主机上的指定路径
独立于容器生命周期
是
否
管理便捷性
高(Docker 提供了专门的管理命令)
低(需要手动管理宿主机目录)
跨平台一致性
是
否(依赖于宿主机文件系统)
性能
较高
高(直接访问宿主机文件系统)
权限管理
简单
复杂(需管理宿主机文件系统的权限)
3. tmpfs Mounts
tmpfs Mounts 将数据存储在宿主机的内存中,而不是物理磁盘上。这种方法适用于需要快速访问且数据不需要持久化的场景,例如缓存。
docker run -d --tmpfs /path/in/container my_image
4. Docker Storage Plugins
Docker 允许使用第三方存储插件,以便与外部存储系统(如 NFS、Ceph、GlusterFS 等)集成。这些插件提供了更高级的存储功能,如分布式存储、数据冗余和高可用性。
安装存储插件后,可以像使用 Volumes 一样使用这些插件提供的存储。
docker volume create --driver my_volume
docker run -d -v my_volume:/path/in/container my_image
5. Kubernetes Persistent Volumes
在 Kubernetes 环境中,持久化存储通常使用 Persistent Volumes(PV)和 Persistent Volume Claims(PVC)来管理。PV 是集群中的存储资源,而 PVC 是用户对 PV 的请求。
定义 Persistent Volume(PV):
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
hostPath:
path: "/mnt/data"
定义 Persistent Volume Claim(PVC):
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
使用 PVC:
apiVersion: v1
kind: Pod
metadata:
name: my-pod
spec:
containers:
- name: my-container
image: my-image
volumeMounts:
- mountPath: "/path/in/container"
name: my-volume
volumes:
- name: my-volume
persistentVolumeClaim:
claimName: my-pvc
6. Network Attached Storage (NAS) 和 Storage Area Network (SAN)
在企业环境中,使用 NAS 或 SAN 设备提供集中化存储是常见的做法。这些设备可以通过 NFS、iSCSI 等协议与容器进行连接,实现数据的集中存储和管理。
在宿主机上挂载 NAS 或 SAN 存储,然后将其挂载到容器中:
mount -t nfs :/path/on/nas /mnt/nas
docker run -d -v /mnt/nas:/path/in/container my_image
文章来源:https://blog.csdn.net/qq_62311779/article/details/140115323
微信扫描下方的二维码阅读本文
暂无评论内容