网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事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,一个挂载读写容器,也可以挂载只读容器,还可以两种同时挂载。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
使用只读volume
对于一些开发应用,容器需要回写数据到Docker主机。但有时容器只需要读数据。请记住多个容器可以挂载相同volume,一个挂载读写容器,也可以挂载只读容器,还可以两种同时挂载。
[外链图片转存中…(img-zEaAsxlU-1715744405332)]
[外链图片转存中…(img-f8j099ZV-1715744405332)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新