docker容器数据卷-具名挂载和匿名挂载(代码片段)

java叶新东老师 java叶新东老师     2023-01-24     158

关键词:

什么是容器数据卷

容器数据卷就是目录的挂载,将我们的容器的目录挂载到宿主机上,从而实现打通宿主机和容器之间的文件共享功能;

为什么需要容器数据卷

docker理念就是将应用和环境打包成一个镜像;但是数据怎么办呢?且不说数据库,一个项目在运行过程种肯定会产生大量的日志,这些日志对开发人员来说是非常重要的, 因为有了这些日志,我们才知道运行的过程中出现了哪些问题,然后进行排查找错;

但是在容器中,项目每次更新迭代都会将容器删除,直接替换新镜像运行;那么在这种情况下,要保存这些日志文件的话,如果每次都去往容器里复制到宿主机,这个工作量会有点大,并且如果日志文件太大的话,复制的工作也是很耗时耗力的;所以这时候就需要用到容器数据卷的功能了,说白了这个功能非常地简单,就是打通宿主和容器的文件共享功能;docker容器中产生的数据文件,会实时同步到宿主机中;相反的,宿主机产生的文件叶会同步到容器中;这样就打通了双向传输的管道;

容器和容器之间实现数据共享之后,就没有主容器和子容器之分了,因为它们共享的数据只有一份,是保存在宿主机上面的,删除任何一个容器,都不会影响其他容器的数据同步;

使用

使用容器数据卷非常简单,只需要在运行的时候加上 -v 选项即可

docker run -d -v 主机目录:容器目录 tomcat 

运行以上命令后,会在容器和宿主机上自动创建相应的目录,在目录下创建或者修改文件都会自动同步过去;

如何查看是否使用了数据卷

查看一个容器是否使用了容器数据卷功能,可以通过inspect 功能查看容器的详细信息

docker inspect 容器id/容器名称

执行以上命令后会打印一大堆已经格式化的json字符串,这时候我们找到key为 Mounts的项就是容器数据卷的相关配置了,

"Mounts": [
    
        "Type": "bind",  
        "Source": "/root/dockerContainer",  # 宿主机的目录
        "Destination": "/text",  # 容器的目录
        "Mode": "",
        "RW": true,   # RW可读可写;ro为只读,只能修改宿主机的文件; 
        "Propagation": "rprivate"
    
],

具名挂载和匿名挂载

指定路径挂载

上面的例子中我们用的都是指定路径挂载,就是即配置宿主机路径,又配置了容器路径;

docker run -d -v 主机目录:容器目录 tomcat 

具名挂载

挂载到指定名称的目录;

# /xxx 是目录, xxx是卷名,没有斜杆的就是卷名
docker run -d -v 卷名:容器目录 tomcat 

# 查找卷名所在的目录
docker volume inspect 卷名

光说无益,测试一下,先创建容器并且挂载好目录

docker run -d --name my_tomcat  -v my_folder:/data/my_folder tomcat

使用 inspect 命令查看容器信息

docker inspect my_tomcat

在打印信息中找到 Mounts 项,其中Source的目录就是宿主机的目录;Destination的目录是挂载的容器目录;

"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

匿名挂载

匿名挂载就是只有容器目录,没有宿主机的目录,所以生成出来的目录是一个长长的加密字符串,一般情况下不建议使用匿名挂载;加密字符串会导致不易查找;

docker run -d -v \\容器目录 tomcat 

来,测试一下,先创建容器并且挂载好目录

docker run -d --name my_tomcat_2 -v /my_folder_2 tomcat

使用 inspect 命令查看容器信息

docker inspect my_tomcat_2

在打印信息中找到 Mounts 项,其中Source的目录就是宿主机的目录;Destination的目录是挂载的容器目录

"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目录挂载到宿主机上,宿主机和容器的目录都是/data/centos

docker run -it --name centos_1 -v /data/centos:/data/centos centos /bin/bash

2、创建第二个容器并且将其绑定到第一个容器;--volumes-from centos_1 选项就是将当前容器的挂载目录绑定到 centos_1 容器上,从而实现了个容器的数据同步;

docker run -it --name centos_2 --volumes-from centos_1 centos /bin/bash

3、现在我们在创建第三个容器,将其绑定到第二个容器centos_2上

docker run -it --name centos_3 --volumes-from centos_2 centos /bin/bash

接下来,我们在每个容器里面的/data/centos目录里面都创建一个文件

  • 在宿主机的/data/centos目录里面创建了main.java文件
  • 在centos_1容器的/data/centos目录里面创建了centos_1.java文件
  • 在centos_2容器的/data/centos目录里面创建了centos_2.java文件
  • 在centos_3容器的/data/centos目录里面创建了centos_3.java文件

最后在面四个环境中的/data/centos目录执行ls命令,都能看到所有容器创建的文件,这样我们就实现了各个容器之间的数据同步;

[root@259efdc362b4 centos]# ls
centos_1.java  centos_2.java  centos_3.java  main.java

docker系列:具名匿名挂载介绍

今天给大家聊聊docker具名、匿名挂载的相关知识,一起来学学吧!匿名挂载1.1含义匿名挂载就是指定容器内路径,dockersrun每挂载一个目录就会宿主主机自动创建一个随机字符串的目录。目录/var/lib/docker/volumes/随机字符串。注意... 查看详情

学docker(超详细)(代码片段)

文章目录Docker镜像加载原理Docker常用的命令关于容器命令其他常用命令进入当前正在运行的容器docker容器文件移动复制docker安装测试命令commit镜像安装可视化工具Portainer和Rancher容器数据卷具名和匿名挂载如何判断是具名挂载还... 查看详情

docker的使用(代码片段)

文章目录1、简介2、核心概念3、在linux虚拟机上安装docker4、镜像操作5、容器操作其他常用命令6、底层原理7、docker镜像加载原理8、容器数据卷数据卷简介:数据卷使用方式:9、具名挂载和匿名挂载10、DockerFileDockerFile构... 查看详情

docker基础学习笔记(代码片段)

....通过命令使用数据卷查看数据卷匿名挂载具名挂载3.通过Dockerfile使用数据卷数据卷容器二、DockerFile1.什么是dockerfile?2.DockerFile构建过程3.DockerFile的指令4.实战测试三、综合实战:制作Tomcat镜像1.准备压缩包2.编写Dockerfile... 查看详情

docker核心之数据卷(代码片段)

...实现具名映射和匿名映射具名映射匿名映射指定映射目录dockervolume命令容器与容器共享数据卷多个容器共享配置数据(案例)结论什么是数据卷映射docker可以将宿主机上的目录映射到容器中,映射到容器内部的目录自... 查看详情

docker初体验(代码片段)

docker学习笔记dockerdocker各个名词说明docker的基本命令dockersearch镜像名字dockerpull镜像名字:TAGdockerimagesdockerrun-itd-p宿主机端口:容器内端口--name自定义名词镜像IDdockerpsdockerstop容器iddockerps-adockerstart容器iddockerrestart容器iddockerlogs-tf--tai... 查看详情

docker核心之数据卷(代码片段)

...实现具名映射和匿名映射具名映射匿名映射指定映射目录dockervolume命令什么是数据卷映射docker可以将宿主机上的目录映射到容器中,映射到容器内部的目录自动与宿主机的目录实现同步;即外部目录里面的作出改动,... 查看详情

docker存储(代码片段)

文章目录一、Docker存储简介二、挂载主机目录三、数据卷容器(1)备份数据(2)还原数据(3)删除数据卷四、挂载主机目录示例(1)创建一个挂载的容器(2)在真实机写入数据(2ÿ... 查看详情

docker容器数据卷挂载使用

参考技术A查看外部主机目录内容在容器内目录创建文件,在外部主机目录可以查看到在外部主机目录创建文件,在容器内目录可以查看到注意删除容器后,外部主机挂载目录里面的文件还在,没有丢失 查看详情

docker中的数据卷(代码片段)

Docker中的数据卷一、将Docker数据挂载到容器二、Volume的基本使用1、管理卷2、创建使用指定卷的容器3、清理卷二、BindMounts的基本使用1、使用卷创建一个容器2、验证绑定挂载消息3、清理容器应用场景总结一、将Docker数据挂载到... 查看详情

轻松学透docker数据卷(代码片段)

...二、数据卷管理命令增删查实例三、数据卷挂载mysql四、Dockerfile创建镜像并挂载数据卷学习一点通docker数据卷:类似于Linux的一种卷,挂载到目录,实现容器内数据备份、配置修改。特点:数据卷可以在容器之间... 查看详情

docker8section(代码片段)

Docker数据管理在容器中管理数据主要有两种方式:数据卷(Volumes)挂载主机目录(Bindmounts)数据卷数据卷是一个可供一个或多个容器使用的特殊目录,它绕过UFS,可以提供很多有用的特性:数据卷可以在容器之间共享和重用对数... 查看详情

1.6docker-数据管理(代码片段)

1.6数据管理Docker提供数据卷功能,数据卷是使用物理机上的一个目录在容器运行时挂载到容器目录中,就算容器停止,数据卷中的数据依然存在,保证了数据安全性,防止因容器删除导致重要数据丢失。数据卷比普通目录挂载更... 查看详情

docker数据管理(代码片段)

Docker数据管理,即Docker内部以及容器之间管理数据,主要有两种方式:数据卷和挂载。1.数据卷(Volume)volume,可供一个或多个容器使用的特殊目录。数据卷可在容器之间共享和重用;对数据卷的修改会立马生效;对数据卷的更... 查看详情

详解docker——你需要知道的docker进阶知识三

...文件,我们不应该将其保存在镜像或者容器的可写层中。Docker提供三种不同的方式将数据从Docker主机挂载到容器中,分别为卷(volumes),绑定挂载(bindmounts),临时文件系统(tmpfs)。很多时候,volumes总是正确的选择。无论使... 查看详情

docker教程-4-redis容器的安装配置使用(代码片段)

目录1、环境检查2、查看可用的Redis版本3、下载所需版本的Redis镜像4、挂载目录/数据卷方式创建数据目录和Redis配置文件4.1挂载目录方式:创建数据目录和配置文件4.2数据卷方式:创建数据目录和配置文件的数据卷4.3配置... 查看详情

docker系列:docker存储管理(代码片段)

因Docker采用分层文件系统,对容器做的修改都发生在最上层(可写层),这样使得容器可以重复利用。然而,在容器停止时文件系统的最上层(可写层)就消失了,这样容器产生的数据也就无法保存。所以为了持久化存储容器的... 查看详情

docker数据卷容器

docker数据卷容器什么是docker数据卷容器?命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器()操作一波?1、先启动一个上次整的那个tzh/centos的容器、然后在dataVolumeC... 查看详情