docker容器持久化volume学习笔记

为什么要持久化?

默认情况下,container内部新创建文件或者修改文件,结果会保存在container的可读写层中,这意味着:

1.当container消失时,与container一体的可读写层也一并消失,数据并没有持久化。并且,当一个container需要其它container中可读写层的数据时,取出操作非常困难。
2.container的可读写层与宿主机的文件系统紧密结合,很难将它从一台宿主机迁移到其它宿主机。
3.container的可读写层,低下需要一个实现联合文件系统的storage driver,与直接在宿主机文件系统中读写数据相比效率要低。

怎么实现?
volume:volume由docker管理,比如创建、删除什么的。默认情况下,volume的存储空间来自于宿主机文件系统中的某个目录,如/var/lib/docker/volumes/,docker系统这外的程序不应该修改其中的数据。volume是官方推荐的持久化方案。

这里我总结了三类使用中遇到的情况记录下来以便理解

1.一些应用在构建时会指定一层数据卷,当用户使用docker run 基于这个镜像运行创建一个容器时docker会创建一个默认匿名卷来绑定镜像构建时指定的目录,这并不会覆盖掉容器指定的目录里的内容。

vim Dockerfile
FROM daocloud.io/centos:latest
ADD aaa /usr/local/aaa
VOLUME /usr/lcoal/
....
docker built -t centos/test .
docker run --name test ..... centos/test
cd /var/lib/docker/volume/sdasdsd3d3dd3d0d00s0d00asd0sd/_data/
ls
-------aaa

2.首先使用docker volume create data 来创建一个数据卷,docker会在volume的默认目录/var/lib/docker/volume目录下创建一个名称为data的目录,用户在创建容器时可以使用 -v data:/sss/sdsds 来将data卷绑定到容器内的/sss/sdsds上,
这并不会覆盖掉容器内的文件或目录。

docker volume create data
cd /var/lib/docker/volume
ls
---------data
docker run --name test -v data:/usr/local ...... centos/test
cd data/_data
ls
------------aaa

3.在创建容器时,挂载一个目录到容器内的目录

make /data
touch yyy
docker run --name test -v /data:/data .... censto/test

docker exec -it  test /bin/bash #进入容器内部
cd /usr/local
ls
---------yyy

注意,宿主机的/data会覆盖掉容器内的/data,如果容器是在启动后在/data下生成文件或目录,这并不会被宿主机的/data影响,这是因为在文件生成前边将宿主机的/data覆盖到容器内的/data下了。

例如使用/data去挂载一个tomcat容器的logs目录,因为logs目录在启动前是没有日志文件的。 #官方的容器内日志目录位置看官方文档,这里只是举例

docker run --name tomcat-test -v /data:/home/tomcat/logs ...... tomcat/latest
cd /data
ls
----yyy    
----catalina.out
.........
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值