阿良老师 Docker学习_upperDir与数据持久化

一. 当使用docker pull命令去远程仓库docker hub拉取镜像时,docker会判断本地镜像仓库是否存在这个镜像,如果镜像不存在再去远程仓库下载

二.docker镜像本质上就是多个文件,UFS(Union File System)

将镜像打成tar包并解压后会发现:

当我们操作容器的时候,其实是操作容器upperDir(读写层),会将我们的操作保留至读写层。

如果在容器进行读写操作并生成镜像,则该读写层会保留为镜像读写层(最上层)。

执行:docker inspect imageID/containnerID:

 可以通过docker inspect imageID/containnerID 查看镜像联合文件系统中每个文件对应的宿主机目录,

案例: 

1. 启动nginx

 2. 执行:docker inspect 9a11665e5e43,查看容器upperDir路径

 3.cd 到upperDir目录(无法找到usr目录)

 4.进入nginx容器(进行读写操作,更改/usr/share/nginx/html目录下 index.html)

5.再次 打开浏览器

 6.再次去upperDir目录下

结论:

1.当我们操作容器的时候,其实是操作容器的upperDir(读写层)

2.当我们在容器进行读写操作后,如果不利用docker commit打包成镜像,当容器删除该读写层也随之删除,不会保留任何记录,若在容器进行读写操作并生成镜像,则该读写层会保留为镜像读写层(最上层)。

3.但是镜像是无法进行数据持久化,因为会被宿主机挂载的目录覆盖。持久化是指将容器运行产生的数据进行持久化,需要持久化的数据挂载到宿主机,当容器宕机或者被删除,再运行新的容器也能通过容器数据卷得到宿主机挂载目录的数据,从而达到数据持久化的目的。

三.容器数据持久化的两种方式

1.volumes:Docker管理宿主机文件系统的一部分(/var/lib/docker/volumes)

2.bind mounts:将宿主机上任意位置的文件或者目录挂载到容器中(常用)

区别:bind mounts能指定宿主机的挂载目录,volumes固定宿主机挂载目录为/var/lib/docker/volumes

volumes示例:

docker volume create nginx-vol    #创建容器数据卷

docker volume ls     #显示所有容器数据卷

docker volume inspect nginx-vol    #容器数据卷详情

docker run -d --name=nginx -v nginx-vol:usr/share/nginx/html nginx

bind mounts示例:

docker run -d --name=nginx -v /wuqirui/nginx:usr/share/nginx/html nginx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值