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"
相关推荐
文牧之1 小时前
Oracle 的 SEC_CASE_SENSITIVE_LOGON 参数
运维·数据库·oracle
Jay_272 小时前
python项目如何创建docker环境
开发语言·python·docker
Antonio9152 小时前
【Linux】 Linux 进程控制
linux·运维·服务器
---wzy---2 小时前
docker生命周期
java·docker·容器
thinkMoreAndDoMore3 小时前
linux驱动开发(1)-内核模块
linux·运维·驱动开发
不想头秃a3 小时前
JavaEE初阶-网络编程
java·运维·服务器·网络
一ge科研小菜鸡3 小时前
云原生 DevOps 实践路线:构建敏捷、高效、可观测的交付体系
运维·云原生·devops
Chuncheng's blog3 小时前
CentOS 7 如何pip3安装pyaudio?
linux·运维·python·centos
西阳未落3 小时前
Linux(12)——基础IO(下)
linux·运维·服务器