首页 > 其他分享 >docker 数据卷详解

docker 数据卷详解

时间:2023-02-26 22:23:42浏览次数:51  
标签:容器 -- volume 详解 test testA docker 数据

docker 数据卷

参考:
docker volumes

1. 为什么需要数据卷?

一个容器运行一段时间,会产生一些数据,日志等,如果数据放到容器中,如果容器删除了,数据就没了。

2. 什么是数据卷?

可以将理解为宿主机的目录,当我们使用绑定容器的目录,可以理解为我们将宿主机的目录容器的目录建立了映射关系。

比如:

容器的/test目录和宿主机的/test目录绑定;
在容器的/test目录新建A文件;
在宿主机的/test/A文件存在;
如果删除了容器,宿主机的/test/A文件依然存在;

3. 测试容器数据卷使用

首先创建一个docker volume

docker volume create testA

查看volume的信息

docker volume inspect testA

[
    {
        "CreatedAt": "2023-01-10T14:17:27Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/testA/_data",
        "Name": "testA",
        "Options": {},
        "Scope": "local"
    }
]

macbook找不到路径,是因为mac的docker是运行在虚拟中的,可以使用以下命令

docker run --pid=host --privileged -it --rm justincormack/nsenter1

数据卷的路径即为/var/lib/docker/volumes/testA/_data

启动一个容器,绑定该数据卷

docker run -it -d --volume=testA:/testA --name test-volume1 centos:7

使用docker inspect 查看volume数据

"Mounts": [
        {
            "Type": "volume",
            "Name": "test",
            "Source": "/var/lib/docker/volumes/testA/_data",
            "Destination": "/testA",
            "Driver": "local",
            "Mode": "z",
            "RW": true,
            "Propagation": ""
        }
    ],

4. 使用docker volume命令管理volume

  1. create:创建
  2. rm:删除
  3. ls:显示list
  4. inspect:显示详情
  5. prune:删除没有用到的volume

5. 使用docker run --volume 绑定数据卷

使用 --volume 映射容器目录. 内容是 <卷>:<容器目录>:<Mode>

卷的形式:

  1. 为空,即为匿名挂载,会生成/var/lib/docker/volumes/随机字符串/_data 目录
  2. 为不加 / 的名称,即为具名挂载,比如:testA,会生成/var/lib/docker/volumes/testA/_data 目录
  3. 为加 / 的名称,即为绑定挂载,比如:/Users/wuqi/test,即为本机的路径. (可以绑定文件和目录,卷只能绑定目录)

Mode:ro或者rw

如果没有目录,会自动创建一个新的目录。

一个卷可以同时被多个容器使用,docker run的时候加 --volumes-from 参数即可继承容器的volume并绑定。

6. 查看volume是否被使用

  1. 查看容器使用的volume

    docker inspect testCcon -f '{{.Mounts}}'

  2. 查看volume被那些容器使用了

    docker ps -a -f "volume=testA"

7. 匿名挂载和具名挂载的区别

加了 --rm ,当容器停止的时候匿名卷会自动删除

8. 使用docker commit

绑定volume:

docker run -d --volume=/Users/wuqi/test1:/test1 --volume=test2:/test2 -it --name=centos-test centos

修改文件test1,和目录test2

vi test1
cd /test2
touch test2file
vi touch2file

使用commit提交这次修改

docker commit -a "qi.wu" -m "this is test file" centos-test qi.wu/centos:01

用提交的新image创建容器

docker run -it --rm qi.wu/centos:01

发现只有test1文件和test2目录

docker inspect 76b720a8f904 -f "{{.Mounts}}"

使用docker inspect发现没有绑定volume。这是因为卷的数据是独立于容器的,容器里只记录了卷操作,真正的数据修改是在宿主机上的。

9. 使用docker run --mount 命令绑定数据卷

跟使用--volume有同样的效果,使用key=>value形式,更清晰。

  • type用于指定挂载类型,volume表示使用卷,bind表示使用绑定挂载,
  • source参数指定对应的卷名,如果使用匿名卷,则省略source参数
  • target参数用于指定将卷或者宿主机目录挂载到容器的哪个目录上,如果使用绑定挂载,source参数对应宿主机上的目录。
docker run -it -d --name=test-mount --mount type=volume,src=test1,dst=/data nginx

标签:容器,--,volume,详解,test,testA,docker,数据
From: https://www.cnblogs.com/qiye5757/p/17157982.html

相关文章

  • 1-4 数据包的一生
    数据包的一生TCPtcp的三次握手,这个在本科的网络课上就有实际学过。第一次握手客户端检测到同步消息第二次握手服务器确认客户端同步第三次握手确认建立连接TCP......
  • 用python画数据分析第三章的图
    importpandasaspdcatering_sale=(r'D:\sjfx\catering_sale.xls')data=pd.read_excel(catering_sale,index_col='日期')print(data.describe())  importmatplotli......
  • IP TCP UDP数据报头的相关记录
    IPTCPUDP数据报头的相关记录IP数据报头typedefstruct_IP_HEADER_V4_{ union { UINT8versionAndHeaderLength; struct { UINT8headerLength:4; U......
  • Docker改造传统应用的流程
    首先根据系统的特点判断是否适合Docker化改造,如适合改造,则开始制定改造方案,改造方案会涉及系统镜像的组成、镜像的参数、镜像的启动方式以及源码改造点等基本问题。接下来就......
  • 简单用Python画各种图分析数据
                                  以上这些只是作为初学者运用绘图功能来对数据进行分析,过程中有遇到一......
  • 数据探索
    importpandasaspdcatering_sale='D:\catering_sale.xls'#餐饮数据data=pd.read_excel(catering_sale,index_col=u'日期')#读取数据,指定“日期”列为索引列......
  • python数据挖掘绘图
                                                         ......
  • docker 常用命令
    docker概述集装箱隔离机制docker历史dotCloud,容器技术,开源,轻巧,go语言docker能干嘛容器化技术不是一个完整的系统应用更快速的交付和部署更便捷的升级和扩容......
  • docker 镜像原理
    文件系统docker的镜像是由多个只读的文件系统叠加在一起形成的。每启动一个容器的时候,会加载只读层并在栈顶增加一个读写层。增删改查都是在读写层操作的。在docker中,只......
  • 7.4-总线仲裁和数据传输方式
    菊花链式串行总线仲裁什么是总线仲裁,是指在总线上同一时刻只能有一个主设备占用总线,当计算机系统中只有一个主设备的时候不存在仲裁问题,当多个主设备同时提出总线占用的申......