Docker - 容器存储详解1(使用Data Volume实现数据持久化)_查看容器的mount部分,其中mode的参数用来表示共享

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

+ type,可以是bind,volume或者tmpfs。这篇文章主要讨论volumes,所以type一直使用volume.
+ source,volumes的名字,匿名volume可以省略。source可缩写为src.
+ destination,挂载到容器中的文件或目录路径。可也缩写为dst或者使用target。
+ readonly,指定挂载在容器中为只读。
+ volume-opt,可选属性,可以多次使用。

下面是—mount和-v的例子。

-v和—mount的不同行为

与bind mounts不同,对于—mount和-v所有的选项都可以使用。

当使用volumes服务时,只支持—mount.

创建和管理volumes

不像bind mount,你可以在容器外创建和管理volumes。

创建一个volume:

 docker volume create my-vol

显示所有volumes

 docker volume  ls

local                my-vol

查看volumes

$  docker volume inspect my-vol

[

{

“Driver” :  “local” ,

“Labels” :  {} ,

“Mountpoint” :  “/var/lib/docker/volumes/my-vol/_data” ,

“Name” :  “my-vol” ,

“Options” :  {} ,

“Scope” :  “local”

}

]

删除一个volume:

$  docker volume rm my-vol

启动一个带volume的容器

如果你启动一个带有volume容器,volume还没有创建,Docker会为你创建。下面的例子挂载myvol2到容器中的/app/下。

下面的例子-v和—mount结果是一样的。

—mount:

$  docker run  -d   \

–name  devtest  \

–mount   source = myvol2,target = /app  \

nginx:latest

-v:

$  docker run  -d   \

–name  devtest  \

-v  myvol2:/app  \

nginx:latest

使用inspect查看挂载是否正确,查看Mounts部分:

“Mounts” :   [

{

“Type” :   “volume” ,

“Name” :   “myvol2” ,

“Source” :   “/var/lib/docker/volumes/myvol2/_data” ,

“Destination” :   “/app” ,

“Driver” :   “local” ,

“Mode” :   “” ,

“RW” :   true ,

“Propagation” :   “”

}

],

可以看出挂载正确,并且是可读写的。

停止容器然后删除volume

$  docker container stop devtest

$  docker container rm devtest

$  docker volume rm myvol2

启动一个带有volumes服务

当你启动服务定义一个volume,每个服务可以使用自己本地人volume.如果你使用local volume,容器不能分享数据,但是一些volume驱动支持分享存储。 Docker for AWS and Docker for Azure使用 Cloudstor插件 都支持持久化存储。

下面的例子启动4份nginx服务,每个使用一个本地存储myvol2。

$  docker service create  -d   \

–replicas = 4  \

–name  devtest-service  \

–mount   source = myvol2,target = /app  \

nginx:latest

使用 docker service ps devtest-service  查看服务是否运行:

$  docker service ps devtest-service

ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR               PORTS

4d7oz1j85wwn        devtest-service.1   nginx:latest        moby                Running             Running 14 seconds ago

删除服务

$  docker service rm devtest-service

服务标识的不同

docker service create  命令不支持-v或者—volume。必须使用—mount。

使用容器加载一个volume

和上面一样,如果你启动一个容器创建一个新的volume,在容器被挂载的目录(/app/)中有文件或者文件夹,这个目录中的内容会被拷贝到volume中。然后容器挂载使用volume,其他容器使用这个volume也可以访问预加载内容。

为了说明这个,这个例子启动一个nginx容器并且加载一个新volume nginx-vol,里面包括容器中 /usr/share/nginx/html  目录中的内容,里面存储的是nginx默认的HTML内容。

—mount and -v具有相同结果

—mount:

$  docker run  -d   \

–name = nginxtest  \

–mount   source = nginx-vol,destination = /usr/share/nginx/html  \

nginx:latest

-v

$  docker run  -d   \

–name = nginxtest  \

-v  nginx-vol:/usr/share/nginx/html  \

nginx:latest

以下是运行后清理命令

$  docker container stop nginxtest

$  docker container rm nginxtest

$  docker volume rm nginx-vol

使用只读volume

对于一些开发应用,容器需要回写数据到Docker主机。但有时容器只需要读数据。请记住多个容器可以挂载相同volume,一个挂载读写容器,也可以挂载只读容器,还可以两种同时挂载。

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

使用只读volume

对于一些开发应用,容器需要回写数据到Docker主机。但有时容器只需要读数据。请记住多个容器可以挂载相同volume,一个挂载读写容器,也可以挂载只读容器,还可以两种同时挂载。

[外链图片转存中…(img-zEaAsxlU-1715744405332)]
[外链图片转存中…(img-f8j099ZV-1715744405332)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值