Docker 存储卷
Docker存储通过多层联合挂载的方式实现,上层读写(通过标记的方式),下层只读,写时复制。
优点:底层镜像不用改变
缺点:i/0效率低下 数据无法共享 容器删除会丢失
存储卷(volume):容器自身存储有限且关闭后数据会丢失,可以把本地磁盘或者共享磁盘的一个文件系统绑定到容器上,因此即使容器关闭了数据还会持久存储到本地。
A 绑定挂载卷
手动指定
B docker管理卷
docker默认指定
例子:
-v 文件系统路径 : container路径 如果不指定文件系统就默认docker管理卷方式
[root@docker ~]# docker run -it --name b2 -v /data busybox
/ # ls
bin data dev etc home proc root sys tmp usr var
/ # cd data/
/data # ls
/data #
可以查看container 详细信息会显示挂载情况:
docker inspect b2
"Mounts": [
{
"Type": "volume",
"Name": "fb119439f5fbf83d1a8f9b0914ff457fced9859c960e126ce94932d36cc0a8f1",
"Source": "/var/lib/docker/volumes/fb119439f5fbf83d1a8f9b0914ff457fced9859c960e126ce94932d36cc0a8f1/_data",
"Destination": "/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
测试是不是在此目录:
[root@docker ~]# docker run -it --name b2 -v /data busybox
/ # ls
bin data dev etc home proc root sys tmp usr var
/ # cd data/
/data # ls
/data # touch a.sh
/data # ls
a.sh
/data #
去真机看看:
[root@docker ~]# cd /var/lib/docker/volumes/fb119439f5fbf83d1a8f9b0914ff457fced9859c960e126ce94932d36cc0a8f1/_data
[root@docker _data]# ls
a.sh
也就是说假如我们启动一个web服务 即使容器删除 只要创建新容器时候数据文件再重新指定也就能恢复web
也可以多个容器使用同一个卷:
方法1:
[root@docker ~]# docker run --name b3 -it --rm -v /data/a:/etc busybox
/ # ls
bin dev etc home proc root sys tmp usr var
/ # cd /etc/
/etc # touch a.sh
/etc # ls
a.sh hostname hosts resolv.conf
/etc #
[root@docker ~]# docker run --name b1 -it --rm -v /data/a:/data busybox
/ # ls
bin data dev etc home proc root sys tmp usr var
/ # cd data/
/data # ls
a.sh hostname hosts resolv.conf
/data #
方法2:
创建容器是指定和另外一个容器存储卷设置相同:
–volimes-from 模板容器
[root@docker ~]# docker run --name b4 -it --rm --volumes-from b3 busybox
/ # ls etc/
a.sh hostname hosts resolv.conf
/ #
可以再加上之前的联盟网络 创建出lntm模型,nginx tomcat mysql 共享network ipc mount UTS 他们之间通过lo网卡传递信息。
在查看信息时,我们也可以通过类似ansible的模板一样指定“字典”查看
[root@docker ~]# docker inspect -f {{.NetworkSettings}} zw
{{ 1a9913b0c8a7b841da601ec61021898c062584dec87501cfc9aab00b850450e6 false 0 map[] /var/run/docker/netns/1a9913b0c8a7 [] []} { 0 0 } map[bridge:0xc420184b40]}
Docker file