Docker数据卷和挂载目录的使用

本站所有内容来自互联网收集,仅供学习和交流,请勿用于商业用途。如有侵权、不妥之处,请第一时间联系我们删除!Q群:迪思分享

免费资源网 – https://freexyz.cn/

docker 在容器中管理数据主要有两种方式:

– 数据卷( Volumes )

– 挂载主机目录( Bind mounts )

准备

删除容器

docker rm -f $(docker ps -aq)

 创建并运行一个容器

方法一 docker run -itd –name t1 -p 8080:8080 –mount source=v1,target=/usr/local/tomcat/webapps tomcat:8.5.20 方法二 docker start c1 docker exec -it c1 bash

数据卷(Volumes)

挂载和数据卷的区别:数据卷和替换整个目录而挂载只会替换一个文件夹或者一个文件,所以挂载的使用性更高;数据卷替换所有文件后可能导致tomcat 或者 mysql无法使用 因为配置文件被全部替换

为了很好的实现数据保存和数据共享, Docker 提出了 Volume 这个概念,简单的说就是绕过默认的联合

文件系统,而以正常的文件或者目录的形式存在于宿主机上。又被称作数据卷。

数据卷 是一个可供一个或多个容器使用的特殊目录,它绕过 UFS ,可以提供很多有用的特性:

数据卷 可以在容器之间共享和重用对 数据卷 的修改会立马生效对 数据卷 的更新,不会影响镜像数据卷 默认会一直存在,即使容器被删除

创建数据卷

docker volume create v1

查看所有数据卷

docker volume ls

查看数据卷信息

docker volume inspect v1

删除一个 volume

docker volume rm v1

数据卷 是被设计用来持久化数据的,它的生命周期独立于容器, Docker 不会在容器被删除后自动

删除数据卷,并且也不存在垃圾回收这样的机制来处理没有任何容器引用的数据卷,无主的数据卷

可能会占据很多空间,所以要及时删除 .

挂载数据卷

在用 docker run 命令的时候,使用 — mount 标记来将 数据卷 挂载到容器里。在一次 docker

run 中可以挂载多个 数据卷 。

docker run -itd –name 容器名字 –mount source=数据卷名称,target=容器中的对应目录 镜像名称

实际例子

docker run -it –name c1 –mount source=v1,target=/testdir centos

最好是通过 run 而非 create/start 创建启动容器, create/start 命令创建启动容器后,再挂载数据卷

相当麻烦,要修改很多配置文件,但并非不可以

加了“&;意为将最后的回车换行给注释了,系统理解为命令还没有结束,因而是继续等待用户进行

输入,直到读到结束符,如回车

如果数据卷不存在,docker会自动创建

如果容器上目录不存在, docker会自动创建

查看数据卷的具体信息

docker inspect name docker inspect v1

虚拟机端口映射

通过虚拟机端口映射可在虚拟机中运行tomcat,在本机访问tomcat端口

docker run -itd –name t1 -p 8080:8080 –mount source=v1,target=/usr/local/tomcat/webapps tomcat:8.5.20 虚拟机要开放端口 firewall-cmd –zone=public –add-port=8080/tcp

Docker数据卷和挂载目录的使用插图

挂载目录(Bind mounts)

soft直接将webapps替换了

-v 可以挂载目录

-v 还可以单独挂载文件

挂载目录

挂载一个目录也是文件夹,先创建一个soft目录,mkidr soft

docker run -itd –name t1 -v /soft/usr/local/tomcat/webapps/oapro.war -p 8080:8080 tomcat:8.5.20

挂载文件

docker run -itd –name t1 -v /soft/oapro.war:/usr/local/tomcat/webapps/oapro.war -p 8080:8080 tomcat:8.5.20

想实现远程登录到容器内部的tomcat

实现在线部署项目

需要放入tomcat的用户信息 tomcat-user.xml 文件中

还要允许外部访问 webapps/manager/META-INF/context.xml

需要提前vi编辑tomcat-users.xml 文件,编辑用户信息admin;

删除context.xml 文件中的部分内容

部署在线项目

docker run -itd –name t1 -v /soft/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml -v /soft/context.xml:/usr/local/tomcat/webapps/manager/META-INF/context.xml -p 8080:8080 tomcat:8.5.20

Docker数据卷和挂载目录的使用插图1

注:mysql nginx的配置文件都要通过挂载的形式

二者区别

数据卷挂载适合多个容器共享数据,而目录挂载适合单个容器与主机之间进行数据交换。

(1)注意二者写法上的区别,例如在实例化MySQL容器时挂载写法

-v mysql:/val/lib/mysql 会识别为一个数据卷叫mysql-v ./mysql:/val/lib/mysql 会识别为当前目录下的mysql目录

(2)当实例化容器时,应查阅官方镜像文档,是否需要配置目录映射


© 版权声明
THE END
★喜欢这篇文章吗?喜欢的话,麻烦动动手指支持一下!★
点赞11 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容