1.数据卷是什么?
- 相当于redis里面的rdb文件和aof文件
- “卷” 是容器上一个或多个“目录”,此类目录可绕过联合文件系统,与宿主机上某个目录“绑定(关联)”
2.数据卷特点:
- 1.卷的设计目的就是数据的持久化,完全独立于容器的生命周期,因此docker不会再容器删除时,删除其挂在的数据卷
- 数据卷可在容器之间共享或重用数据
- 3.数据卷中的更改不会包含再镜像的更新中
- 4.数据卷的生命周期一直持续到没有容器使用它位置
- 5.容器和主机之间共享
数据卷的类型:
- 绑定挂在卷(Bind mount volume)
在宿主机上的路径需要人工指定特定路径,在容器也需要指定特定路径,让二者已知路径进行关联
- docker 管理卷(docker managed volume)
只需要在容器内指定容器内的挂载点路径,由docker daemon自行创建一个空目录或者使用一个已存在的目录与存储卷路径建立关联关系
3.数据卷添加
直接命令添加(绑定挂载卷)
-v ##绑定挂在卷 目录共享
docker run -it -v /宿主机绝对路径:/容器内目录 [容器名]
====容器初始化时自动被创建
====容器和宿主机之间数据共享
### 容器和宿主机数据同步,容器只读不可写
docker run -it -v /宿主机绝对路径:/容器内目录:ro [镜像名]
docker run --rm --name web2 -it -v /data/volumes/web2:/data nginx /n/bash
root@45947278861f:/# ls
bin data etc lib
获取 值:
[root@controller web2]# docker inspect -f {{.Mounts}} web2
[{bind /data/volumes/web2 /data true rprivate}]
两个容器统一共享
[root@controller ~]# docker run -it --name web3 -v /data/volumes/web2:/data nginx /bin/bash
root@1dbcda65c57b:/# ls
bin data etc lib media opt root sbin sys usr
boot dev home lib64 mnt proc run srv tmp var
root@1dbcda65c57b:/# cd data/
root@1dbcda65c57b:/data# ls
ooo
直接命令添加(docker 管理卷)
docker run -it -v /容器内目录 [容器名]
[root@controller docker]# docker run -it --name web1 -v /data nginx /bin/bash
root@9e8b1a6607bb:/# ls
bin data etc lib media
关联的路径:
[root@controller docker]# docker inspect web1 |grep -i volumes
"VolumesFrom": null,
"Source": "/var/lib/docker/volumes/fa3850d2f1d173dd4238b08a492c75cd2a7419b03478ad272b26b2d182dc0ca9/_data",
例子:nginx配置站点目录
##基于nginx启动一个容器,监听80和81,访问80,出现nginx默认欢迎首页,访问81,出现小鸟。
-p 80:80 -p 81:81 -v xxx:xxx -v xxx:xxxx
docker run -d --name mynginx -p 80:80 -v /etc/nginx/conf.d/nginx.conf:/etc/nginx/conf.d/nginx.conf -p 81:81 -v /nginx/test:/usr/share/nginx/xiaoniao nginx
f71e73686f29f8da1778dddaf519785dbe088b6d85281651303f43cceea9c092
配置文件与结果:
image.png
image.png
4.数据卷容器:(容器之间共享)
--volumes-from
:复制一个已存在的卷
基于上面的结果
docker run -itd --name web1 -p 80:80 -p 81:81 -v /etc/nginx/conf.d/nginx.conf:/etc/nginx/conf.d/nginx.conf -v /nginx/test://usr/share/nginx/xiaoniao nginx
docker run -itd --name web2 -p 8080:80 -p 8081:81 --volumes-from web1 nginx
关掉 web1 web2 还是可以访问
- 容器间传递共享
- 容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止