一、数据卷管理
为什么要用数据卷
- docker分层文件系统
性能差
生命周期与容器相同 - docker数据卷
mount到主机中,绕开文件分层系统
和主机磁盘性能相同,容器删除后依然保留
仅限本地磁盘,不能随容器迁移
docker提供了两种卷:
- bind mount
- docker managed volume
1.bind mount方式
- 是将主机上的目录或文件mount到容器里
- 使用直观高效,易于理解
- 使用 -v 选项指定路径,格式
<host path>:<container path>
[root@server1 ~]# mkdir website
[root@server1 ~]# cd website/
[root@server1 website]# echo www.westos.org > index.html
[root@server1 website]# cd ..
[root@server1 ~]# docker run -d --name demo -v /root/website:/usr/share/nginx/html nginx ##挂接到nginx的默认发布目录
[root@server1 ~]# docker inspect demo ##查看ip
[root@server1 ~]# curl 172.17.0.2
www.westos.org
bind mount默认权限是读写rw,可以在挂载时指定只读ro , - v选项指定的路径,如果不存在,挂载时会自动创建。
[root@server1 ~]# docker run --rm -it -v /data1:/data1 -v /data2:/data2:ro -v /etc/yum.repos.d/dvd.repo:/dvd.repo:ro busybox
/ # cd /data1/
/data1 # touch file
/data1 # ls
file file1
/ # cd /data2/
/data2 # touch file
touch: file: Read-only file system
/data2 # cd ..
/ # cat dvd.repo
[dvd]
name=rhel7.6
baseurl=http://172.25.70.250/rhel7.6
gpgcheck=0
/ # rm -rf dvd.repo
rm: can't remove 'dvd.repo': Device or resource busy
/ #
docker managed volume
docker managed volume
- bind mount必须指定host文件系统路径,限制了移植性。
- docker managed volume不需要指定mount源,docker 自动为容器创建数据卷目录。
- 默认创建的数据卷目录都在/var/lib/docker/volumes中。
- 如果挂载时指向容器内已有的目录,原有数据会被复制到volume中。