卷volume:
容器保存数据的地方,容器实际上是一个进程,进程的数据保存在内存中,进程关闭后数据被清除,卷解决容器关闭后数据丢失的问题。
卷本质上就是宿主机中的一个文件夹,属于宿主机文件系统中的一部分
docker volume ls展示卷
docker volume create sc创建卷sc
docker run -d -p 7070:80 --name sc_lilin --mount source=sc,target=/usr/share/nginx/html nginx
source=sc指定宿主机的挂载目录 target指定我们想要保存的容器内相关数据文件夹
将容器内的nginx的/usr/share/nginx/html挂载到我们新建的卷sc中,能通过/var/lib/docker/volumes/sc/_data该路径下看到html下内容,修改sc/_data内容就是修改容器内的html内容,将容器关闭后,容器内数据会留存到宿主机的sc文件夹内,所以称sc为改容器的卷(即数据存放文件夹)。
docker run -d -p 7073:80 --name xfb-1 -v xfb:/usr/share/nginx/html nginx
挂载的另一种方式
docker run -d -p 7074:80 --name zjh-1 -v zjh:/usr/share/nginx/html:ro nginx
以只读方式挂载,ro表示read only,针对容器,在容器内只读,在宿主机的/var/lib/docker/volumes/zjh/_data下的文件有修改权限。
普通nfs挂载与卷的nfs挂载:
在docker1(centos7.9)中:
nfs安装:
yum install nfs-utils -y安装nfs相关工具
service nfs start开启nfs
systemctl enable nfs设置nfs开机自启
为下一台主机卷的挂载做准备:
mkdir /web创建目录cd /web进入目录vim index.html编辑写入一点东西
chmod 777 /web将目录权限设置为全部可rwx
vim /etc/exports 写入允许连接的网段:
service nfs restart刷新nfs服务
在需要挂载服务的另一台主机上(我选择的是docker2(ubuntu系统))
nfs服务安装与挂载:
切换到root用户模式以便于操作
apt-get install nfs-kernel-server -y安装nfs
mkdir /mnt1创建挂载目录
mount 192.168.67.147:/web /mnt1将提供nfs的主机的/web挂载到本主机的/mnt1上
此时就已经将/mnt1与/web远程连接上了,意思就是无论对docker1中的/web还是对docker2中的/mnt1做修改都能影响到对方。
卷的挂载:
docker volume create --driver local --opt type=nfs --opt o=addr=192.168.67.147,nolock,soft,rw,sync --opt device=:/web nfs-web-2
创建卷取名nfs-web-2,将卷连接上docker1的/web,这里的卷就相当于docker2中的/mnt1,卷就相当于一块能给容器保存数据的磁盘空间(路径为/var/lib/docker/volumes/nfs-web-2/_data,里面的index.html的内容就是我们在docker1中/web下的index.html的内容)
docker volume ls查看卷是否创建成功
docker run -d -p 2500:80 --name pan-1 -v nfs-web-2:/usr/share/nginx/html nginx运行容器挂载到该卷上。
最后去网页输入docker2的ip地址与端口号2500可以查看在docker1中/web下index.html中我们写入的内容: