docker存储-目录挂载

大纲:

docker目录挂载:

为啥要目录挂载:

对一个容器进行启动修改后,删除该容器再重启一个相同容器,以前修改内容丢失,第2个原因是容器内部为了保持轻量很多vim等命令工具没有,即即使容器内部有一套自己的文件系统也很难管理

举例如下:

要修改docker容器nginx容器的默认首页需要使用docker exec命令进入docker容器内部再使用echo命令修改/usr/share/nginx/html页面,比较麻烦,并且docker容器内部有自己的文件系统,所以容器内部的数据都存在容器内,当把已启动且运行过的nginx容器删除,然后再重新启动一个nginx容器,则开始在第一个nginx容器中修改的nginx首页等数据就会丢失

模拟过程:

后台启动nginx容器+修改nginx容器内部默认页内容:

如下在浏览器中用80端口访问新启动的nginx容器,访问的是默认的nginx首页,docker exec it 容器id前3位 bash即进入该容器内部bash页面,然后cd定位到nginx容器的默认页位置,再echo修改默认页内容,具体的nginx容器的默认页位置要去docker nginx镜像官方docker hub去查

强制删除容器+重启新容器,发现修改内容丢失(看最后一张图):

啥是目录挂载:

容器内部的文件跟主机上的文件做了映射,容器内部文件修改则对应主机文件修改,主机文件修改则容器内部对应文件同步也做修改

实现目录挂载:

在容器启动时加-v命令,-v 主机文件目录地址:容器内部文件目录地址,实现主机和容器文件目录映射(注意是文件目录地址而不是具体的文件地址【也可以直接写文件地址,就是文件地址太单一了,不如文件目录可容纳的文件多,推荐写文件目录】,如果要做映射再在主机下添加容器内部该文件目录下的文件即可,比如容器内部该目录下a.html,那主机要做文件映射,只需要在-v映射的目录下添加a.html文件,此时浏览器访问容器内部文件直接访问主机上的a.html文件,则要修改容器内部a.html文件内容直接修改主机上的a.html文件即可)

修改主机文件映射容器内部文件:

docker run -d -p 80:80 -v /app/nghtml:/usr/share/nginx/html --name app01 nginx:用官方nginx最新镜像启动叫app01的nginx容器,端口映射为主机上的80对应容器内部的80端口,文件目录映射为主机上的/app/nghtml目录下的文件对应容器内的/usr/share/nginx/html目录下的文件

注意:开始启动后马上在浏览器访问nginx,此时nginx首页访问显示403,因为用了-v文件目录映射后,此时访问容器走的文件目录路径为映射好的主机文件目录路径而不是容器内部的/usr/share/nginx/html目录,主机文件目录/app/nghtml下并没有index.html文件,所以nginx首页访问失败

修改主机映射目录下默认页内容再在浏览器访问nginx首页,显示访问成功且内容为修改主机下的默认页内容

删除执行-v命令后的容器再重启一个nginx新容器,浏览器再访问:

发现nginx容器首页依然为主机上的/app/nghtml文件目录下的index.html内容,即只要主机上的映射文件不变,对容器先前的修改操作就可应用到下一个新启动的容器中

修改容器内部文件映射到主机文件:

docker常用命令:

打印出所有容器:docker ps -a

打印出所有容器id:docker ps -aq

具体在使用命令前可以用docker --help来确定一下

批量强制删除容器(使用强制是因为容器还是运行状态,如果不使用强制删删不了,得先停止容器才能删):docker rm -f $(docker ps -aq) -f强制删除的容器id为docker ps -aq查询出来的所有容器id

写的好啰嗦。。。。。。。未完待续。。。。。。。。

相关推荐
Decay__3 分钟前
17_MySQL 监控体系构建 —— mysqld_exporter + Prometheus + Grafana 全栈实战
运维·数据库·sql·mysql·架构
天远数科13 分钟前
零信任架构实战:基于天远全能家政风险报告构建自动化即时到家保洁与短工抢单安全核验网关
运维·人工智能·架构·自动化
源图客16 分钟前
解决CentOS操作系统网络异常问题
linux·运维·centos
分布式存储与RustFS29 分钟前
K8s 集群备份落到自建对象存储:Velero 接 RustFS 配置指南
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
梅孔立2 小时前
Docker 容器网络不通:Tomcat 无法解析 MySQL、Nginx 无法反代 Tomcat 的生产级排查与治理
网络·docker·tomcat
镜子AI9 小时前
镜子AI 技术复盘:三条自动化链路上的“停止条件“设计
运维·人工智能·自动化
tianyuanwo10 小时前
NetBox 数据库详解:当“关系型数据库”被装进一个网络运维的领域模型里
运维·数据库·netbox
螺蛳粉 螺蛳粉11 小时前
第 05 篇:etcd 深入:Raft 共识、watch 机制与快照备份恢复实战(底座认知 05)
docker·云原生·容器·kubernetes·etcd·分布式存储·kube-apiserver
知已难寻12 小时前
03 · OpenStack的计算管理 Nova
运维·服务器·开发语言·云原生·云计算·openstack·开源软件
huainingning13 小时前
Windows syslog日志服务器搭建与模拟器对接
运维·服务器·智能路由器