docker数据卷
docker数据卷介绍
Docker可以将开发的应用和运行的环境一起打包形成容器运行,Docker容器产生的数据,如果不通过Commit生成一个新的镜像,使得这些数据成为镜像的一部分保存下来,那当容器删除时,数据自然也就没有了(相当于别人删除跑路),为了能够保存数据在Docker中我们使用数据卷。
卷就是目录和文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过union file system提供一些用于持续存储或共享数据的特性。(将docker容器内的数据保存进宿主机的磁盘中)
卷的设计目的就是数据持久化(类似于redis中的rdb和aof文件),完全独立于容器的生命周期,因此docker不会在容器删除时删除其挂载的容器卷。
数据卷可在容器之间共享或重用数据
数据卷的更改会直接生效
数据卷的更改不会包含到镜像的更新中
数据卷的生命周期一直持续到没有容器使用它为止
docker数据存储方式
直接存储容器中:数据只保存在容器中,不保存在宿主机中,容器删除或丢失后数据也会丢失
目录/文件映射:将宿主机的目录/文件映射到容器内的目录中
挂载数据卷:创建数据卷,将容器内指定目录,挂载到数据卷上,数据卷会存储在宿主机上,多个容器也可以挂载同一个数据卷,用来进行数据共享
创建数据容器:创建一个单独的容器,用来存储数据,其他容器挂载到这个容器上,会继承数据容器的数据卷挂载关系,数据容器可以挂载数据卷
docker数据卷操作
创建数据卷
创建数据卷volume1
]# docker volume create volume1
挂载数据卷
在创建/运行容器时容器时,将数据卷挂载到容器上
数据卷挂载:
创建容器nginxtest1,并将/nginx目录挂载数据卷volume1
]# docker run -itd --name nginxtest1 -p18091:18080 --volume volume1:/nginx nginx:1.24.0
本地目录/文件挂载:
创建容器nginx1,并将/opt/conf目录映射到容器的/nginx/conf上
]# docker run -itd --name nginx1 -p18092:18082 --volume /opt/conf:/nginx/conf nginx:1.24.0
创建容器es1,并将/opt/es/elasticsearch.yml目录映射到容器的/elasticsearch/config/elasticsearch.yml上
]# docker run -itd --name es1 -p19200:19200 --volume /opt/es/elasticsearch.yml:/elasticsearch/config/elasticsearch.yml elasticsearch:7.17.0
通过引用其他容器挂载点或挂载数据卷,来实现容器间的数据共享
创建容器nginxtest2,挂载数据卷,挂载本地数据卷的容器目录为/nginx/html
]# docker run -itd --name nginxtest2 -p18080:18080 --volume nginx1:/nginx/html nginx:1.24.0
创建容器nginxtest3,挂载容器nginxtest2
]# docker run -itd --name nginxtest3 -p18081:18080 --volumes-from nginxtest2 nginx:1.24.0
创建容器nginxtest3,挂载容器nginxtest2
]# docker run -itd --name nginxtest3 -p18081:18080 --volumes-from nginxtest2 nginx:1.24.0
nginxtest3会继承nginxtest2挂载的数据卷
在nginxtest2中写入文件,在nginxtest3中查看
相关参数解释
参数 | 说明 |
--volume,-v | 指定数据盘及本地挂载目录,或者本地目录/文件映射到容器中,配置方式: --volume【数据卷名称】:【挂载容器内目录】 --volume【本地目录/文件】:【映射到容器路径】 例: --volume data1:/opt/data1 将docker数据盘data1挂载到/opt/data1上 --volume /opt/nginx/nginx.conf:/nginx/conf/nginx.conf 将本地的/nginx/conf/nginx.conf文件映射到容器中的/nginx/conf/nginx.conf |
--volumes-from | 引用其他容器的挂载,配置方式: --volumes-from 【容器名称】 例: --volumes-from nginx1 继承容器nginx1的挂载 |
删除数据卷
直接删除数据卷
]# docker rm volume1
这种方式不能删除已挂载容器的数据卷
删除容器时删除关联的数据卷
指定 "-v" 参数
]# docker rm -v nginxtest1
这种方式只能删除匿名卷,如果是命名卷,需进行手动删除
删除所有未被容器使用的卷
]# docker volume prune
注意,这种方式只能删除匿名卷
指定 "--all" 参数 删除所有未被容器使用的卷
]# docker volume prune --all