栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Docker 具名匿名挂载——Dockerfile创建数据卷——容器间数据共享

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Docker 具名匿名挂载——Dockerfile创建数据卷——容器间数据共享

一、具名和匿名挂载 1、匿名挂载
#  匿名挂载
-v  容器内路径!
docker run -d -P  --name  nginx01 -v  /etc/nginx nginx

#  查看所有的 volume 的情况
[root@localhost]# docker volume ls
DRIVER    VOLUME NAME
local     0fe4f30cfe99bbd4b8ed708c3e885092aaf35e8f54bc585510498870d71033a8
local     043d85920d701dafeeeabb59dcec331c5fbfb4a299efb66e931e05647b96de28
local     98b395dd27a8347bdaa6db9fa0fc317650dbbc8f31001559571fc39c04927052
local     212fd2597c11b43ed9a88918920ffa1bac0264720285ea5ecd37ee5ee484b4eb
local     301f364edfbaef6f5d490e1569de79b91305ffbc0db4c050cbc1f68e9e8c8ef1
local     736dbdc00f40677ee24fc9ef5b020e8c55ae100d95ae83375a0dc55ccf4c80c4
local     d4b98d19fd6ab8f2355e8625016e88208296c2fc6e13319488a84120ea2619e9
local     e3d72c9b33bb596f86e845e9c77aa54b2eb08342c0d22b033d779d99da16efe1
[root@localhost]# 

# 这里发现,这种就是匿名挂载,我们在-v只写了容器内的路径,没有具体名字
2、具名挂载
[root@localhost ~]# docker run -d -P --name  nginx02  -v juming-nginx:/etc/nginx nginx
WARNING: IPv4 forwarding is disabled. Networking will not work.
61b03844c6968db1ef304712dc36ba8b3fbbfe536586bea3b373199c09dfbfaa
[root@localhost ~]# docker volume ls
DRIVER    VOLUME NAME
local     0fe4f30cfe99bbd4b8ed708c3e885092aaf35e8f54bc585510498870d71033a8
local     043d85920d701dafeeeabb59dcec331c5fbfb4a299efb66e931e05647b96de28
local     301f364edfbaef6f5d490e1569de79b91305ffbc0db4c050cbc1f68e9e8c8ef1
local     736dbdc00f40677ee24fc9ef5b020e8c55ae100d95ae83375a0dc55ccf4c80c4
local     juming-nginx
[root@localhost ~]# 

# juming-nginx 即为具名挂载

查看默认挂载路径

[root@localhost etc]# docker volume inspect juming-nginx 
[
    {
        "CreatedAt": "2022-05-14T16:45:35+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]
[root@localhost etc]# 

(所有docker容器内的卷,没有指定目录的情况下都是在 /var/lib/docker/volumes/xxxx)
我们通过具名挂载可以方便的找到我们的一个卷,大多数情况在使用的具名挂载

如何确定是具名挂载还是匿名挂载,还是指定路径挂载!
-v  容器内路径   #  匿名挂载
-v  卷名:容器内路径  # 具名挂载
-v   /宿主机路径::容器内路径   # 指定路径挂载!

扩展:
#  通过 -v 容器内路径:ro  rw  改变读写权限
ro   readonly     # 只读
rw  readwrite     #  只读可写

#  一旦设置了这个容器权限  容器对我们挂载出来的内容就有限定了!
 docker run -d -P --name  nginx02  -v juming-nginx:/etc/nginx/ro nginx
 docker run -d -P --name  nginx02  -v juming-nginx:/etc/nginx/rw nginx

# ro  只要看到ro就说明这个路径只能通过宿主机来操作,容器内部是无法操作!
二、使用DockerFile创建数据卷 1、初识Dockerfile

Dockerfile 就是用来构建 docker  镜像的构建文件! 命令脚本 ! 先体验以下
通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!

# 在/home下创建一个dockerfile文件 , 名字可以随机 建议Dockerfile
# 文件中的内容 指令(大写)  参数
FROM centos

VOLUME ["volume01","volume02"]

CMD echo "----end----"
CMD /bin/bash

#  这里的每个命令,就是镜像的一层!

使用 docker build 启动镜像
[root@localhost ~]# docker build -f dockerfile1 -t kuangshen/centos .

启动自己写的容器
[root@localhost ~]# docker run -it kuangshen/centos /bin/bash

查看一下卷挂载的路径
[root@localhost ~]# docker inspect 3b10095bb49a 

 

测试一下刚才的文件是否同步出去了!
这种方式我们未来使用的十分多,因为我们通常会构建自己的镜像!
假设构建镜像的时候没有挂载卷,要手动镜像挂载-v 卷名:容器内路径!

三、容器间数据共享
# 创建docker01 
docker run -it --name docker01  kuangshen/centos
# 创建docker02
docker run -it --name docker02 --volumes-from docker01 kuangshen/centos

# 在docker01下的volume01中创建docker01  文件
然后在docker02中的volume01中查看发现有docker01文件

# 创建docker03
docker run -it --name docker03 --volumes-from docker01 kuangshen/centos
#  然后在docker01下的volume01中查看发现有docker03

(只要通过 --volumes-from 就可以实现容器间的数据共享了,如果删除docker01那么docker02和docker03依然存在文件)


 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/883313.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号