在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
什么是容器数据卷容器数据卷就是目录的挂载,将我们的容器的目录挂载到宿主机上,从而实现打通宿主机和容器之间的文件共享功能; 为什么需要容器数据卷docker理念就是将应用和环境打包成一个镜像;但是数据怎么办呢?且不说数据库,一个项目在运行过程种肯定会产生大量的日志,这些日志对开发人员来说是非常重要的, 因为有了这些日志,我们才知道运行的过程中出现了哪些问题,然后进行排查找错; 但是在容器中,项目每次更新迭代都会将容器删除,直接替换新镜像运行;那么在这种情况下,要保存这些日志文件的话,如果每次都去往容器里复制到宿主机,这个工作量会有点大,并且如果日志文件太大的话,复制的工作也是很耗时耗力的;所以这时候就需要用到容器数据卷的功能了,说白了这个功能非常地简单,就是打通宿主和容器的文件共享功能;docker容器中产生的数据文件,会实时同步到宿主机中;相反的,宿主机产生的文件叶会同步到容器中;这样就打通了双向传输的管道; 容器和容器之间实现数据共享之后,就没有主容器和子容器之分了,因为它们共享的数据只有一份,是保存在宿主机上面的,删除任何一个容器,都不会影响其他容器的数据同步; 使用使用容器数据卷非常简单,只需要在运行的时候加上
运行以上命令后,会在容器和宿主机上自动创建相应的目录,在目录下创建或者修改文件都会自动同步过去; 如何查看是否使用了数据卷查看一个容器是否使用了容器数据卷功能,可以通过
执行以上命令后会打印一大堆已经格式化的json字符串,这时候我们找到key为 "Mounts": [ { "Type": "bind", "Source": "/root/dockerContainer", # 宿主机的目录 "Destination": "/text", # 容器的目录 "Mode": "", "RW": true, # RW可读可写;ro为只读,只能修改宿主机的文件; "Propagation": "rprivate" } ], 具名挂载和匿名挂载指定路径挂载上面的例子中我们用的都是指定路径挂载,就是即配置宿主机路径,又配置了容器路径;
具名挂载挂载到指定名称的目录; # /xxx 是目录, xxx是卷名,没有斜杆的就是卷名 docker run -d -v 卷名:容器目录 tomcat # 查找卷名所在的目录 docker volume inspect 卷名 光说无益,测试一下,先创建容器并且挂载好目录
使用 inspect 命令查看容器信息
在打印信息中找到 "Mounts": [ { "Type": "volume", "Name": "my_folder", "Source": "/var/lib/docker/volumes/my_folder/_data", "Destination": "/data/my_folder", "Driver": "local", "Mode": "z", "RW": true, "Propagation": "" } ] 接着进入容器 docker exec -it my_tomcat /bin/bash # 在容器内也已经创建好了这个目录 root@ef94ff8928a1:/data/my_folder# pwd /data/my_folder 匿名挂载匿名挂载就是只有容器目录,没有宿主机的目录,所以生成出来的目录是一个长长的加密字符串,一般情况下不建议使用匿名挂载;加密字符串会导致不易查找;
来,测试一下,先创建容器并且挂载好目录
使用 inspect 命令查看容器信息
在打印信息中找到 "Mounts": [ { "Type": "volume", "Name": "df4c649772a5ae65716de8ede0607d0776f8c1e2eda1d87b3ec9eaf011b43616", "Source": "/var/lib/docker/volumes/df4c649772a5ae65716de8ede0607d0776f8c1e2eda1d87b3ec9eaf011b43616/_data", "Destination": "/my_folder_2", "Driver": "local", "Mode": "", "RW": true, "Propagation": "" } ] 容器与容器之间的数据共享 --volumes-from有这么一个场景,我们需要容器A和容器B实现数据共享,就是在A容器上修改的内容我希望能在B容器上看到,那么这个功能应该要怎么做到呢?那么这时候就可以使用数据卷容器功能,数据卷容器还可以实现多个容器之间的数据同步功能,不只是2个容器共享; 1、先创建第一个容器centos_1,并将/data/centos目录挂载到宿主机上,宿主机和容器的目录都是
2、创建第二个容器并且将其绑定到第一个容器;
3、现在我们在创建第三个容器,将其绑定到第二个容器centos_2上
接下来,我们在每个容器里面的/data/centos目录里面都创建一个文件
最后在面四个环境中的/data/centos目录执行ls命令,都能看到所有容器创建的文件,这样我们就实现了各个容器之间的数据同步; [root@259efdc362b4 centos]# ls centos_1.java centos_2.java centos_3.java main.java 到此这篇关于docker容器数据卷 - 具名挂载和匿名挂载的文章就介绍到这了,更多相关docker容器数据卷内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论