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 小时前
零基础从头教学Linux(Day 52)
linux·运维·服务器·python·python3.11
从零开始的ops生活6 小时前
【Day 80】Linux-NAS 和 SAN 存储
linux·运维·php
Wang's Blog7 小时前
Linux小课堂: 输入重定向与管道操作详解
linux·运维·服务器
jianghx10247 小时前
Docker部署ES,开启安全认证并且设置账号密码(已运行中)
安全·elasticsearch·docker·es账号密码设置
python百炼成钢8 小时前
3.Linux 网络相关
linux·运维·网络·stm32·单片机
Jtti8 小时前
香港硬防服务器防御DDOS攻击的优点
运维·服务器·ddos
2503_930123938 小时前
Kubernetes (四)网络插件详解:Flannel 与 Calico 的原理、数据流向与实战对比
网络·容器·kubernetes
ZHE|张恒10 小时前
Docker 安装 RabbitMQ
docker·rabbitmq
lpfasd12311 小时前
第2部分:Netty核心架构与原理解析
运维·服务器·架构