Docker学习笔记之容器数据卷
发布日期:2021-06-22 10:30:56 浏览次数:4 分类:技术文章

本文共 2811 字,大约阅读时间需要 9 分钟。

背景

容器数据卷是用来保存容器里的数据的,用来实现数据持久化和数据共享。

这里记录一下容器内添加数据卷的方式

添加数据卷的方式

直接命令添加

$ docker run -it -v /c/Users/songzeceng/dataVolume:/dataVolumeContainer centos

-v表示指定数据卷,/c/Users/songzeceng/dataVolume表示宿主机上的路径,windows下只能使用C:/Users下的目录,/dataVolumeContainer表示容器上的路径,两个路径如果不存在会自行创建,而且会保持数据同步。

我们可以在docker inspect的输出中,得到以下路径绑定信息

$ docker inspect 780b449de985...        "HostConfig": {            "Binds": [                "/d/myDataVolume:/dataVolumeContainer"            ],...        "Mounts": [            {                "Type": "bind",                "Source": "/d/myDataVolume",                "Destination": "/dataVolumeContainer",                "Mode": "",                "RW": true,                "Propagation": "rprivate"            }        ],...

RW为True表示可读可写,如果为False,表示容器里只能访问绑定目录,但不能写。对应命令如下

$ docker run -it -v /c/Users/songzeceng/dataVolume:/dataVolumeContainer:ro centos

DockerFile添加

先创建一个Dockerfile文件,写入以下内容

FROM centosVOLUME ["/dataVolumeContainer1", "/dataVolumeContainer2"]CMD echo "finished"CMD /bin/bash

然后运行以下命令,把Dockerfile编译成一个szc/centos镜像

$ docker build -f Dockerfile -t szc/centos .

最后启动szc/centos容器即可

数据卷容器

别的容器可以挂载到一个容器上,来实现容器间的传递共享。被挂载的容器被称为数据卷容器。

先启动一个容器dc01,在目录dataVolumeContainer2下创建文件并输入内容

$ docker run -it --name dc01 szc/centos[root@5488bf4c2782 /]# cd dataVolumeContainer2/[root@5488bf4c2782 dataVolumeContainer2]# touch 777 dc01.txt[root@5488bf4c2782 dataVolumeContainer2]# vi dc01.txt

然后启动子容器dc02,挂载到dc01上

$ docker run -it --name dc02 --volumes-from dc01 szc/centos

那么dc02拥有dc01的一切,包括新建的文件

[root@dc9aa236c280 /]# lsbin                   dataVolumeContainer2  etc   lib    lost+found  mnt  proc  run   srv  tmp  vardataVolumeContainer1  dev                   home  lib64  media       opt  root  sbin  sys  usr[root@dc9aa236c280 /]# cd dataVolumeContainer2[root@dc9aa236c280 dataVolumeContainer2]# lsdc01.txt[root@dc9aa236c280 dataVolumeContainer2]# cat dc01.txtdc01

再启动一个挂载到dc01的dc03,dc03再在dataVolumeContainer2下创建文件并输入内容,数据同样会被其他两个容器共享

C:\Users\songzeceng>docker run -it --name dc03 --volumes-from dc01 szc/centos[root@c3041cf19df7 /]# ls -ltotal 56lrwxrwxrwx   1 root root    7 May 11  2019 bin -> usr/bindrwxr-xr-x   2 root root 4096 Mar  8 07:33 dataVolumeContainer1drwxr-xr-x   2 root root 4096 Mar  8 07:37 dataVolumeContainer2....[root@c3041cf19df7 /]# cd dataVolumeContainer2[root@c3041cf19df7 dataVolumeContainer2]# lsdc01.txt[root@c3041cf19df7 dataVolumeContainer2]# touch dc03.txt[root@c3041cf19df7 dataVolumeContainer2]# vi dc03.txt[root@c3041cf19df7 dataVolumeContainer2]#

dc02里再度查询

[root@dc9aa236c280 dataVolumeContainer2]# ls -ltotal 8-rw-r--r-- 1 root root 5 Mar  8 07:34 dc01.txt-rw-r--r-- 1 root root 5 Mar  8 07:42 dc03.txt[root@dc9aa236c280 dataVolumeContainer2]#

容器挂载到数据卷容器后,就没有容器的从属关系了,此时如果关闭容器dc01,dc02和dc03依旧可以访问并修改数据卷中的数据。因此,数据卷的生命周期是超越容器的,只要有容器使用它,这个数据卷就一直存在。

转载地址:https://blog.csdn.net/qq_37475168/article/details/105028540 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Docker学习笔记之Dockerfile的构建与编译
下一篇:Docker学习笔记之常用命令

发表评论

最新留言

很好
[***.229.124.182]2024年04月11日 09时16分58秒