以tomcat为例,若是我们需要启动一个docker tomcat 容器,并将我们的工程放进tomcat启动
在没有数据卷的情况下,我们所采用的方式:
利用dockerfile将工程拷贝到tomcat 的 webapps目录下创建一个新的镜像,然后通过这个新的镜像来创建容器并启动,以此部署。
这种方式固然好用,但是却需要创建新的镜像,假如需要部署新的工程,又要创建新的镜像。很麻烦
而且,这种方式会造成重复写的问题,就是我们的工程文件实质上在docker容器和宿主机上写入了两次。造成性能损耗。
还有一个最问题就是,当我们在启动的工程中进行,将文件上传到服务器的操作,实际上我们的文件时上传到了docker容器中,而当容器被删除时,我们所上传的文件就丢失了。这就造成了数据无法持久化的问题。
那么数据卷是如何解决这个问题的呢?
首先演示一下数据卷的使用方式:
创建 index.html 文件,并写入 hello Docker!
root@ubuntu_server:/usr/local/docker/tomcat/ROOT# echo hello Docker! >index.html
启动以数据卷方式启动官方tomcat镜像
docker run -p8082:8080 -d --name tomcat4 -v /usr/local/docker/tomcat/ROOT:/usr/local/tomcat/webapps/ROOT tomcat:jdk8
如上命令中 可以看到 同以往启动docker容器的命令不同之处在于 加了 这串 -v /usr/local/docker/tomcat/ROOT:/usr/local/tomcat/webapps/ROOT
这就是数据卷的使用方式,通过这串命令,我们将tomcat容器中的webapps/ROOT 目录内容,替换为 我们这宿主机上创建的/ROOT 目录内容。
实际上也没有替换只是将宿主机上这个文件夹创建为数据卷,然后将 tomcat容器上的/ROOT目录指向了这个数据卷。
通过这种方式,当我们修改了容器上该目录内容时,数据卷的内容也会改变,这就实现了容器数据的持久化。