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"
相关推荐
智能化咨询37 分钟前
开源的容器化平台:Docker高级应用与实战案例
docker
心灵宝贝2 小时前
如何在 CentOS 7 上安装 bzip2-libs-1.0.6-13.el7.x86_64.rpm 文件
linux·运维·centos
鹿鸣天涯3 小时前
Kali Linux 2025.3 正式发布:更贴近前沿的安全平台
linux·运维·安全
CheungChunChiu5 小时前
在嵌入式 Linux 上配置 PulseAudio 默认输出设备的完整指南
linux·运维·ubuntu·audio·pulseaudio
std860215 小时前
容器化入门:一文掌握Docker安装与核心概念
运维·docker·容器
2501_920047035 小时前
k8s-部署单master节点
云原生·容器·kubernetes
qiqiqi(^_×)5 小时前
解决linux‘打开readme.md文件pycharm闪退’问题
linux·运维·pycharm
可爱的小小小狼6 小时前
k8s的kube-prosy
云原生·容器·kubernetes
腾讯数据架构师6 小时前
k8s 兼容摩尔线程
人工智能·云原生·容器·kubernetes·cube-studio
可爱的小小小狼6 小时前
k8s中的schedule
云原生·容器·kubernetes