Docker数据卷管理及优化

一、基础概念

1.docker数据卷是一个可供容器使用的特殊目录,它绕过了容器的文件系统,直接将数据存在宿主机上。

2.docker数据卷的作用:

数据持久化:即使容器被删除或重建数据卷中的数据仍然存在

数据共享:多个容器可以同时挂载同一个数据卷实现数据的共享和交互

独立于容器生命周期:数据卷的生命周期独立于容器,不受容器的启动、停止和删除的影响。

3.使用数据卷的原因:

docker分层文件系统:

性能差并且生命周期和容器相同

docker提供两种卷:

bind mount

docker managed volume

4.bind mount数据卷:

将主机的目录文件或文件mount到容器里

使用-v选项指定路径,如果-v指定的路径不存在挂载时会自动创建

示例:

bash 复制代码
[root@docker ~]# docker run -it --rm \
-v /tmp/data1:/data1 \
-v /tmp/data1:/data2:ro \
-v /etc/passwd:/data/passwd:ro busybox
/ # tail -n 3 /data/passwd
lee:x:1000:1000:lee:/home/lee:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
nginx:x:1001:1001::/home/nginx:/sbin/nologin
/ # touch /data1/leefile1
/ # touch /data2/leefile1
touch: /data2/leefile1: Read-only file system

5.docker managed数据卷:

bind mount必须指定host文件系统路径限制了移植性

docker managed volume不需要指定mount源,docker自动为容器创建数据卷目录

默认创建的数据卷目录都在/var/lib/docker/volumes中

如果挂载时指向容器内已有的目录,原有数据会被复制到volume中

示例:

bash 复制代码
[root@docker volumes]# docker run -d --name mysql -e MYSQL_ROOT_PASSWORD='lee'
mysql:5.7
[root@docker volumes]# ls -l /var/lib/docker/volumes
总用量 0
drwx-----x 3 root root 19 8月 20 16:34
ad74662b8d6bb6fdcc6e82925ae9942b94bac5f9da4bd52b0a14ac451ae9ef75
[root@docker volumes]# touch
ad74662b8d6bb6fdcc6e82925ae9942b94bac5f9da4bd52b0a14ac451ae9ef75/_data/leefile
[root@docker volumes]# docker exec -it mysql bash
bash-4.2# cd /var/lib/mysql
bash-4.2# ls
auto.cnf client-cert.pem ib_logfile0 ibtmp1 mysql.sock
public_key.pem sys
ca-key.pem client-key.pem ib_logfile1 leefile performance_schema server-
cert.pem
ca.pem ib_buffer_pool ibdata1 mysql private_key.pem server-
key.pem
bash-4.2# pwd

docker volume prune:清理未使用的docker数据卷

建立数据卷:

docker volume create test,这条命令执行会在默认的数据卷目录下(/var/lib/docker/volumes/)创建test目录,并在该目录下创建_data目录

查看数据卷:

docker volume ls,执行这条命令会查看到上述创建的数据卷

使用建立的数据卷:

docker run -d --name web1 -p 80:80 -v test:/usr/share/nginx/html nginx

6.数据卷容器:

是docker中一种特殊的容器,主要方便的在多个容器之间共享数据卷。

建立数据卷容器:

bash 复制代码
[root@docker ~]# docker run -d --name datavol \
-v /tmp/data1:/data1:rw \
-v /tmp/data2:/data2:ro \
-v /etc/resolv.conf:/etc/hosts busybox

使用数据卷容器:

docker run -it --name test --rm --volumes-from datavol busybox

7.bind mount数据卷和docker managed数据卷对比:

相同点:两者都是host文件系统中的某个路径

不同点

8.备份与迁移数据卷:

建立容器并指定使用卷要备份的容器:

docker run --volumes-from datavol -v `pwd`:/backup busybox tar zcf /backup/data1.tar.gz /data1 将当前目录挂载到本地容器中用于和容器交互保存要备份的容器,备份数据到本地

数据恢复:

bash 复制代码
docker run -it --name test -v leevol1:/data1 -v `pwd`:/backup busybox /bin/sh -
c "tar zxf /backup/data1.tar.gz;/bin/sh"
相关推荐
芝麻开门-新起点21 分钟前
数据脱敏与自动化技术融合:大规模GIS数据安全高效处理方案
运维·自动化
行走正道23 分钟前
【探索实战】跨云应用分发自动化实战:基于Kurator的统一交付体系深度解析
运维·自动化·wpf·kurator·跨云分发
杨云龙UP1 小时前
SQL Server 备份异地同步 + 清理脚本
运维·服务器·数据库·sql·mysql·sqlserver
q***48412 小时前
Nginx中$http_host、$host、$proxy_host的区别
运维·nginx·http
喜欢你,还有大家2 小时前
k8s集群监控的部署
云原生·容器·kubernetes
_lst_2 小时前
linux进程状态
linux·运维·服务器
霍格沃兹测试开发学社-小明3 小时前
AI来袭:自动化测试在智能实战中的华丽转身
运维·人工智能·python·测试工具·开源
MaisieKim_3 小时前
2025年企业文档管理系统全面评测报告
运维·数据库
喜欢你,还有大家4 小时前
实战演练——wordpress-k8s集群版
云原生·容器·kubernetes
德育处主任4 小时前
『NAS』轻松获取群晖自带的壁纸
服务器·docker