Docker容器存储架构:bind mount详解
创作时间:
作者:
@小白创作中心
Docker容器存储架构:bind mount详解
引用
1
来源
1.
http://m.blog.itpub.net/291614/viewspace-3050242/
三、docker存储持久化-bind mount
bind mount是将宿主机上已有的目录或文件mount到容器中
bind mount也使用-v挂载
3.1 将 /root/htdocs 目录下的 index.html 文件挂载给一个 httpd 容器
[root@docker ~]# docker run --name web01 -dit -p 8080:80 -v /root/htdocs:/usr/local/apache2/htdocs httpd:2.4
示例:
[root@docker ~]
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker ~]
#
[root@docker ~]
# docker run --name web01 -dit -p 8080:80 -v /root/htdocs:/usr/local/apache2/htdocs httpd:2.4
1937ef7c0be2e17861eacb19a61320fba065b265db0a7c22d15689834a4d55c3
[root@docker ~]
#
3.2 更新宿主机上的 index.html 文件内容,并查看容器中的内容
[root@docker ~]
# echo "bind mount" > /root/htdocs/index.html
[root@docker ~]
# curl 127.0.0.1:8080
示例:
[root@docker ~]
# echo "bind mount" > /root/htdocs/index.html
[root@docker ~]
#
[root@docker ~]
# curl 127.0.0.1:8080
bind mount
[root@docker ~]
#
3.3 查看挂载类型
[root@docker ~]# docker inspect 1937ef7c0be2
示例:
[root@docker ~]
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1937ef7c0be2 httpd:2.4 "httpd-foreground" 2 minutes ago Up 2 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp web01
[root@docker ~]
#
[root@docker ~]
# docker inspect 1937ef7c0be2
......
"Mounts": [
{
"Type": "bind",
"Source": "/root/htdocs",
"Destination": "/usr/local/apache2/htdocs",
"Mode": "",
"RW": true,
"Propagation": "rprivate"
}
],
......
[root@docker ~]
#
3.4 创建基于 docker volume 的 container 镜像
[root@docker ~]# docker commit web01 httpd_bind:1.0
示例:
[root@docker ~]
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd_volume 1.0 496faa1c6595 2 weeks ago 144MB
httpd_superman 1.0 f0d394fd69d5 3 months ago 144MB
tomcat latest fb5657adc892 2 years ago 680MB
httpd 2.4 dabbfbe0c57b 2 years ago 144MB
httpd latest dabbfbe0c57b 2 years ago 144MB
alpine latest c059bfaa849c 2 years ago 5.59MB
[root@docker ~]
#
[root@docker ~]
# docker commit web01 httpd_bind:1.0
sha256:c2556c7b0ea4753a45afb57b246391f882e28990ea1a2387dc0505a1408bde78
[root@docker ~]
#
[root@docker ~]
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1937ef7c0be2 httpd:2.4 "httpd-foreground" 8 minutes ago Up 8 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp web01
[root@docker ~]
#
[root@docker ~]
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
httpd_bind 1.0 c2556c7b0ea4 19 seconds ago 144MB
httpd_volume 1.0 496faa1c6595 2 weeks ago 144MB
httpd_superman 1.0 f0d394fd69d5 3 months ago 144MB
tomcat latest fb5657adc892 2 years ago 680MB
httpd 2.4 dabbfbe0c57b 2 years ago 144MB
httpd latest dabbfbe0c57b 2 years ago 144MB
alpine latest c059bfaa849c 2 years ago 5.59MB
[root@docker ~]
#
3.5 删除容器,销毁容器后,volume 依旧存在,其数据可持久化保存
[root@docker ~]# docker rm -f web01
示例:
[root@docker ~]
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1937ef7c0be2 httpd:2.4 "httpd-foreground" 11 minutes ago Up 11 minutes 0.0.0.0:8080->80/tcp, :::8080->80/tcp web01
[root@docker ~]
#
[root@docker ~]
# docker rm -f web01
web01
[root@docker ~]
#
[root@docker ~]
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker ~]
#
[root@docker ~]
# ls /root/htdocs/index.html
/root/htdocs/index.html
[root@docker ~]
#
[root@docker ~]
# cat /root/htdocs/index.html
bind mount
[root@docker ~]
#
3.6 删除 docker bind mount 卷
[root@docker ~]# rm -rf /root/htdocs/
示例:
[root@docker ~]
# rm -rf /root/htdocs/
[root@docker ~]
#
[root@docker ~]
# ls /root/htdocs/index.html
ls: 无法访问/root/htdocs/index.html: 没有那个文件或目录
[root@docker ~]
#
3.7 重新使用 volume 容器镜像部署容器
[root@docker-node1 _data]# docker run -dit --name web01_bind -p 8080:80 httpd_bind:1.0
示例:
[root@docker ~]
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@docker ~]
#
[root@docker ~]
# docker run -dit --name web01_bind -p 8080:80 httpd_bind:1.0
20114a50cd49e56210c5e729486c878424b6c0c88211f4aa658b947220226d29
[root@docker ~]
#
[root@docker ~]
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20114a50cd49 httpd_bind:1.0 "httpd-foreground" 2 seconds ago Up 2 seconds 0.0.0.0:8080->80/tcp, :::8080->80/tcp web01_bind
[root@docker ~]
#
[root@docker ~]
# curl 127.0.0.1:8080
# It works!
[root@docker ~]
#
文件并没有封装到镜像当中
Linux绑定挂载(bind mount)主要作用是允许将一个目录或者文件(不是整个设备)挂载到一个指定的目录上。
在该挂载点上进行的任何操作,只是发生在被挂载的目录或者文件上,而原挂载点的内容则会被隐藏起来且不受影响。
容器运行过程中,对bind mount目录中改动的数据,将被保存。删除容器后,bind mount中的数据仍然存在。
bind mount可以挂载一个目录到容器,也可以挂载一个文件到容器。但必须要指定目录或文件的路径,即mount源,当然也必须指定mount point。这也限制了容器的可移植性。
若将bind mount绑定到容器上的某非空目录下,则会隐藏容器目录下的现有内容。若不希望容器的整个目录被覆盖,可单独挂载某个文件。
若mount源指向的文件或目录在宿主机上不存在。则会自动创建。
使用bind mount时,可通过ro参数将容器对数据的权限设置为只读。(设置ro参数后,容器无法对数据进行修改,但宿主机依旧有权限修改其内容。)
热门推荐
人体五脏六腑的机能与健康
复旦大学法学院2025年考研分析:招生目录与录取数据详解
235万在线新高!《黑神话:悟空》成绩就是世界级,不必自大无需自谦
中国乒协公示世乒赛选拔办法 樊振东陈梦获参赛资格
2025年退休养老金认证规则重大变革!一文读懂新规变化与认证方式
逍遥丸、加味逍遥丸、丹栀逍遥丸:傻傻分不清?一文看懂!
LZ4 1.10压缩算法发布!具有多线程功能,压缩速度显著提高达8倍
河马有多危险?尼罗鳄的“死亡翻滚”对它没用,连粪便都很致命
一周瘦10斤?科学告诉你,这可能并不健康
《九阴真经》的作者黄裳历史上是否确有其人?
什么是五级流水?银行眼中的“好流水”,到底是什么样的?
纳米粒度仪的激光散射与动态光散射说明
无赔款优待是什么?在保险中有何作用?
各类面粉怎样区分,根据蛋白质含量来分(可分五个类别)
中国人眼中的侠:英雄梦与心中的大侠
大武口区一体推进生活垃圾分类成效明显
2024湛江红嘴鸥游船攻略(发船时间+登船地址+游览路线)
高血压治疗新进展:心理干预的应用
中国科大在自旋神经形态器件研究中取得新进展
Triangle using CSS border
2025年RPG手游排行榜前十名 经典角色扮演游戏推荐合集
基于华为ENSP的VLAN链路状态及通信方式深入浅出
打开城乡发展新空间,“四改”如何发力?丨中山全面深化改革一线报告
固态煤华丽变身液态燃料?中国这个千亿级项目给你答案→
IgG4相关性疾病诊疗规范解读
智慧执法:创新执法方式的必由之路
如何挑选好吃的百香果(教你从外观、质量、口感等多个方面挑选最佳百香果)
ETF基金的T 0交易与投资品种
签合同可以让别人代签吗?
世界睡眠日:春眠不觉晓,总是醒不了?起床困难试试这几招