docker数据持久化
持久化:数据不随着container(容器)的结束而销毁,也就是将数据存储在宿主机下
-
Volumes:Docker会管理宿主机的文件系统的一部分资源,默认位于/var/lib/docker/volumes 目录下;
[root@localhost ~]# docker run -it -v /opt/ centos:7 /bin/bash #将容器文件映射在opt下随机生成一个volumes(可以指定文件) [root@d8f5e9ab7160 /]# touch /opt/test.txt #在容器中创建一个文件 #退出后 ls /var/lib/docker/volumes/有volumes 此时可以用时间查看 ls -ltr /var/lib/docker/volumes [root@localhost ~]# ls /var/lib/docker/volumes/4ee786001a8145d84d5ffb5fef0dbbf6e5afb63cda329dd8b5a339792bec9a4c/_data/ test.txt
-
bind mounts:可以指定存储宿主机系统的任意位置,但是在不同的文件系统下是可以移植的。
[root@localhost ~]# docker run -it -v /opt:/opt centos:7 /bin/bash #将容器下的opt挂载到宿主机下的opt
-
tmpfs:这种只是挂载在宿主系统的内存中,不会写入宿主机的文件系统
Volume的基本使用
- 创建一个自定义容器卷并使用恢复
[root@localhost ~]# docker volume create nginx-data #创建一个容器卷 nginx-data [root@localhost ~]# docker volume ls #查看 DRIVER VOLUME NAME local 4ee786001a8145d84d5ffb5fef0dbbf6e5afb63cda329dd8b5a339792bec9a4c local nginx-data [root@localhost ~]# docker volume inspect nginx-data #查看容器卷的详细信息 [ { "CreatedAt": "2021-10-21T05:46:23-07:00", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/nginx-data/_data", #文件位置 "Name": "nginx-data", "Options": {}, "Scope": "local" } ] [root@localhost ~]# docker run -d -it --name=nginx -p 8000:80 -v nginx-data:/usr/share/nginx/html #启动容器nginx并启动端口,将nginx下的HTML映射到nginx-data nginxa9ad4144d680a5fa2b958d55dec6ddff3ace0e5f1912e2d699d5913bcb6896c5 [root@localhost ~]# docker exec -it nginx /bin/bash #进入nginx容器 root@a9ad4144d680:/# ls /usr/share/nginx/html/ #查看保存位置 50x.html index.html root@a9ad4144d680:/# exit #退出 exit [root@localhost ~]# docker rm -f nginx #删除容器 nginx [root@localhost ~]# ls /var/lib/docker/volumes/nginx-data/_data/ #查看宿主机下的文件 50x.html index.html [root@localhost ~]# touch /var/lib/docker/volumes/nginx-data/_data/123 #在宿主机下的文件重新创建一个文件 [root@localhost ~]# ls /var/lib/docker/volumes/nginx-data/_data/ #查看 123 50x.html index.html [root@localhost ~]# docker run -d -it --name=nginx2 -p 8000:80 -v nginx-data:/usr/share/nginx/html nginx #启动新的容器nginx2并映射到同一位置 b9d752ef99d79aeab4531266e2c446030f19a63aa61b7a1bbaa01df13dee19c4 [root@localhost ~]# docker exec -it nginx2 /bin/bash #启动进入 root@b9d752ef99d7:/# ls /usr/share/nginx/html/ #查看文件 123 50x.html index.html
- 清理卷
[root@localhost ~]# docker volume rm nginx-data
Bind Mounts的基本使用
- 使用卷创建一个容器
[root@localhost ~]# docker run -d -it --name=nginx -p 800:80 -v /wwwroot:/usr/share/nginx/html nginx 406ff46c41e8a58afbd4331dc6cd5a8b58071435ab689c6e80f3670887569647 [root@localhost ~]# docker exec -it nginx /bin/bash root@406ff46c41e8:/# ls /usr/share/nginx/html/ root@406ff46c41e8:/# #并不是什么也没有只是被隐藏了 #没有/wwwroot这个目录会自动创建,此时挂载的默认权限是读写(rw) root@406ff46c41e8:/usr/share/nginx/html# touch 1.txt #创建一个文件 root@406ff46c41e8:/usr/share/nginx/html# exit [root@localhost ~]# ls /wwwroot/ #查看 1.txt [root@localhost ~]# docker inspect nginx #查看详细信息 "Mounts": [ { "Type": "bind", "Source": "/wwwroot", "Destination": "/usr/share/nginx/html", #挂载点 "Mode": "", "RW": true, "Propagation": "rprivate" } #销毁容器后文件还在
数据卷容器
- 命令:--volumes-from 就是通过数据卷容器进行多个容器使用
docker run -it -v /宿主机目录:镜像目录 --name=目录名 镜像名 /bin/bash #创建一个数据卷挂载到宿主机目录下 docker run -it --volumes-from 目录名 --name 容器1 镜像1 /bin/bash #进入容器1 touch #创建一个文件 docker run -it --volumes-from 目录 --name 容器2 镜像2 /bin/bash #进入一个新的容器并且和上一个镜像容器挂载到同一宿主机目录下 查看文件