什么是数据卷

数据卷实际上就是宿主机上的目录或者是文件,可以被直接mount到容器当中使用。

实际生产环境中,需要针对不同类型的服务、不同类型的数据存储要求做相应的规划,最终保证服务的

可扩展性、稳定性以及数据的安全性。

数据卷特点

1. 数据卷是宿主机的目录或者文件,并且可以在多个容器之间共同使用

2. 在宿主机对数据卷更改数据后会在所有容器里面会立即更新

3. 数据卷的数据可以持久保存,即使删除使用该数据卷卷的容器也不影响

4. 在容器里面写入数据不会影响到镜像本身。

5. 需要挂载多个目录或者文件的时候可以使用多个-v参数指定

6. 数据卷使用场景包括日志输出、静态web页面、应用配置文件、多容器间目录或文件共享

数据卷案例

启动两个容器并验证数据

-v 为主机映射目录:虚拟机映射目录,会在主机自动创建

[root@docker-server1 ~]# docker run -d -it --name web1 -v
/data/web/:/usr/share/nginx/html/ -p 8080:80 nginx
[root@docker-server1 ~]# docker run -d -it --name web2 -v
/data/web/:/usr/share/nginx/html/ -p 8081:80 nginx
[root@docker-server1 ~]# echo 'hello world!' > /data/web/index.html
[root@docker-server1 ~]# curl 192.168.106.10:8080
hello world!
[root@docker-server1 ~]# curl 192.168.106.10:8081
hello world!

进入到容器内测试写入数据

[root@docker-server1 ~]# docker exec -it web1 bash
root@588c494dc909:/# echo 'docker test!' > /usr/share/nginx/html/index.html
[root@docker-server1 ~]# curl 192.168.175.10:8080
docker test!
[root@docker-server1 ~]# curl 192.168.175.10:8081
docker test!

尝试只读挂载

在映射目录后加了 :ro

[root@docker-server1 ~]# docker run -d -it --name web3 -v
/data/web/:/usr/share/nginx/html/:ro -p 8082:80 nginx

文件挂载

[root@docker-server1 ~]# docker run -d -it --name web2 -v
/data/web/index.html:/usr/share/nginx/html/index.html:ro -p 8081:80 nginx

数据卷容器

数据卷容器功能是可以让数据在多个docker容器之间共享,即可以让B容器访问A容器的内容,而容器c

也可以访问A容器的内容,即先要创建一个后台运行的容器作为Server,用于卷提供,这个卷可以为其

他容器提供数据存储服务,其他使用此卷的容器作为客户端。

先启动一个卷容器Server

[root@docker-server1 ~]# docker run -d -it --name nginx-web -v
/data/web/:/usr/share/nginx/html/:ro -p 8081:80 nginx

启动两个客户端容器

[root@docker-server1 ~]# docker run -d -it --name web1 -p 8082:80 --volumesfrom nginx-web nginx:latest
[root@docker-server1 ~]# docker run -d -it --name web2 -p 8083:80 --volumesfrom nginx-web nginx:latest

停止卷容器仍可以创建新容器

[root@docker-server1 ~]# docker stop nginx-web
nginx-web
[root@docker-server1 ~]# docker run -d -it --name web3 -p 8084:80 --volumesfrom nginx-web nginx:latest

删除卷容器之后不可以再创建新容器

[root@docker-server1 ~]# docker rm -f nginx-web
nginx-web
[root@docker-server1 ~]# docker run -d -it --name web4 -p 8085:80 --volumesfrom nginx-web nginx:latest
docker: Error response from daemon: No such container: nginx-web.
See 'docker run --help'.
# 但是之前已经创建好的容器不会有任何影响

卷容器Server恢复后即可正常创建卷容器client

[root@docker-server1 ~]# docker run -d -it --name nginx-web -v
/data/web/:/usr/share/nginx/html/:ro -p 8081:80 nginx
[root@docker-server1 ~]# docker run -d -it --name web4 -p 8085:80 --volumesfrom nginx-web nginx:latest

数据卷容器可以作为共享的方式为其他容器提供文件共享,可以在生成中启动一个实例挂载本地的目

录,然后其他的容器分别挂载此容器的目录,即可保证各个容器之间的数据一致性。