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"
相关推荐
骇客野人3 小时前
Redis 完整安装部署方案(Linux,分【源码编译】+【Docker】两种,推荐生产用源码,测试快速用 Docker)
运维
九皇叔叔6 小时前
Kubernetes 资源管理方式详解:命令式与声明式管理
docker·容器·k8s
蓝速科技6 小时前
会议室门牌公告通知发布选型与落地指南丨蓝速科技
大数据·运维·数据库·人工智能·科技
chicheese7 小时前
Linux 面试速查表:从初级到高级,附高频场景答题模板
linux·运维
Linux-lucky7 小时前
32-38-Linux学习之旅之MySQL综合
linux·运维·学习·mysql·ubuntu
智能运维指南8 小时前
2026年ITSM系统怎么选?四款主流方案与五维评估模型
运维·itsm·嘉为蓝鲸
我命由我123458 小时前
Git 推送报错:error: src refspec main does not match any
运维·git·gitee·github·运维开发·学习方法·版本控制
骇客野人8 小时前
测试环境MySQL迁移Vastbase(海量数据库)完整改造与落地实施方案
运维·服务器
迪康Defender8 小时前
终端安全实战:如何高效解决企业U盘泄密与管控难题
运维·网络·安全·web安全·终端安全管理
zly35009 小时前
VMware Converter Standalone 物理机转化为虚拟机后源1硬盘变成了2个硬盘(2个硬盘文件)虚拟机无法启动。
linux·运维·服务器