13.Docker容器数据卷
结合实际项目,我们会发现,我们项目中有些数据是需要记录的,比如:日志文件、用户操作的数据等;如果我们把数据放在docker容器中,那么我们只要删除容器,数据就会丢死,例如:我们使用docker容器安装了mysql数据,mysql的数据如果存放在容器中,我们删除容器就会直接把mysql数据库删掉,这个是非常危险⚠️的,因此,我们需要使用docker容器数据卷 技术来把数据存储在本地服务器上。
13.1. 什么是容器数据卷
- 卷的本质是文件或者目录,存在一个或者多个容器中,由docker挂载到容器,但不属于联合文件系统。卷的概念不仅解决了数据持久化的问题,还解决了容器间共享数据的问题;能够绕过Union File System提供一些用于持续存储或共享数据。
- 卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
13.2. 为什么使用容器数据卷
- 数据的持久化,当容器重启后保证数据不丢失,例如:我们可以使用卷将 MySQL 的目录持久化,实现容器重启数据库数据将不会丢失。
- 如果将数据存储于镜像中,主机上的其他进程不方便访问这些数据。
13.3. 容器数据卷的特点
特点:
- 1:数据卷可在容器之间共享或重用数据
- 2:卷中的更改可以直接生效
- 3:数据卷中的更改不会包含在镜像的更新中
- 4:数据卷的生命周期一直持续到没有容器使用它为止
13.4. 容器卷的使用
方式一:使用命令进行挂载容器卷
docker run -v 宿主机目录:容器内目录 ....
在docker run
命令中,使用-v实现宿主机与容器内目录的挂载,这样就类似双向绑定,在容器内操作的数据,会自动同步到宿主机上;在宿主机上操作的数据,也会自动同步到容器内。
以centos为例进行测试:
使用docker run -it -v /home/docker_test:/home centos /bin/bash
命令进行启动,其中-v表示将容器中/home目录,挂载到宿主机的/home/docker_test目录下。
使用docker inspect 容器ID
查看容器的挂载信息,如下图:
-
从容器中,同步文件到宿主机
- 从宿主机中同步文件到容器中