一 数据卷
1.1 数据卷
数据卷就是宿主机上的一个目录或者文件,当容器目录和数据卷目录绑定后,对方的修改会立即同步。
一个数据卷可以被多个容器同时挂载
一个容器也可以被挂载多个数据卷
1.2 数据卷的作用
1.Docker 容器删除后,在容器中产生的数据也会随之销毁,所以使用数据卷避免这种情况
简而言之: 数据卷实现容器数据持久化
2.Docker 容器和外部机器可以直接交换文件吗? 答案是否定的,外部机器只能和宿主机通信,宿主机跟容器通信,而外部机器不能直接和容器进行通信。
简而言之: 外部机器和容器间接通信
3.容器之间能进行数据交互吗?答案是肯定的;
简而言之: 容器之间数据交换
1.3 配置数据卷
创建启动容器时,使用 –v 参数 设置数据卷
格式:
docker run ... –v 宿主机目录(文件):容器内目录(文件)
[root@localhost docker-demo]# docker run -it --name=c3 -v /root/docker-demo/tomcat-c3:/root/tomcat-container tomcat:8.5.6 /bin/bash
注意事项:
1. 目录必须是绝对路径
2. 如果目录不存在,会自动创建
3. 可以挂载多个数据卷
1.4 操作案例
创建一个tomcat的容器,含有数据卷的容器
1.4.1 创建一个宿主机目录
[root@localhost docker-demo]# mkdir -p tomcat-c3
[root@localhost docker-demo]# ls
tomcat-c3
1.4.2 创建一个含有数据卷的容器
[root@localhost docker-demo]# docker run -it --name=c3 -v /root/docker-demo/tomcat-c3:/root/tomcat-container tomcat:8.5.6 /bin/bash
root@5caa9158a844:/usr/local/tomcat# ls
LICENSE NOTICE RELEASE-NOTES RUNNING.txt bin conf include lib logs native-jni-lib temp webapps work
root@5caa9158a844:/usr/local/tomcat# cd bin
root@5caa9158a844:/usr/local/tomcat/bin# cd ..
root@5caa9158a844:/usr/local/tomcat# cd logs
root@5caa9158a844:/usr/local/tomcat/logs# ls
root@5caa9158a844:/usr/local/tomcat/logs# cd ..
root@5caa9158a844:/usr/local/tomcat# ls
LICENSE NOTICE RELEASE-NOTES RUNNING.txt bin conf include lib logs native-jni-lib temp webapps work
root@5caa9158a844:/usr/local/tomcat# cd bin
root@5caa9158a844:/usr/local/tomcat/bin# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/lib/jvm/java-8-openjdk-amd64/jre
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
3.外面访问:宿主机的ip为:192.168.1.47
4.在宿主机的目录:/root/docker-demo/tomcat-c3下新建一个文件,并写入一些内容
[root@localhost tomcat-c3]# touch docker-test.txt
[root@localhost tomcat-c3]# ls
docker-test.txt
[root@localhost tomcat-c3]# vi docker-test.txt
[root@localhost tomcat-c3]# more docker-test.txt
wo zai xue xi docker,wo zai suzhuji chuangjain !
5.在docker容器中的/root/tomcat-container的目录下,进行查看
root@5caa9158a844:~# cd tomcat-container/
root@5caa9158a844:~/tomcat-container# ls
docker-test.txt
root@5caa9158a844:~/tomcat-container# more docker-test.txt
wo zai xue xi docker,wo zai suzhuji chuangjain !
root@5caa9158a844:~/tomcat-container#
6.注意:
oot@5caa9158a844:~# cd tomcat-container/
root@5caa9158a844:~/tomcat-container# ls
ls: cannot open directory .: Permission denied
root@5caa9158a844:~/tomcat-container# cd ..
root@5caa9158a844:~# ls
需要在宿主机执行:setenforce 0 命令,来解决。
[root@localhost tomcat-c3]# setenforce 0
总结:容器和宿主机实现了同步机制。这样不怕数据丢失了!
1.5 容器之间配置数据卷
创建启动 c1 c2 容器,使用 –-volumes-from 参数 设置数据卷
docker run –it --name=c1 --volumes-from c3 centos:7 /bin/bash
docker run –it --name=c2 --volumes-from c3 centos:7 /bin/bash
在c3进行的操作,自然就会同步到c1,c2容器中。