Docker数据卷和挂载目录的使用
作者:暴躁小段额
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
挂载目录(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
注:mysql nginx的配置文件都要通过挂载的形式
二者区别
数据卷挂载适合多个容器共享数据,而目录挂载适合单个容器与主机之间进行数据交换。
(1)注意二者写法上的区别,例如在实例化MySQL容器时挂载写法
- -v mysql:/val/lib/mysql 会识别为一个数据卷叫mysql
- -v ./mysql:/val/lib/mysql 会识别为当前目录下的mysql目录
(2)当实例化容器时,应查阅官方镜像文档,是否需要配置目录映射
到此这篇关于Docker数据卷和挂载目录的使用的文章就介绍到这了,更多相关Docker数据卷和挂载目录内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!