Docker容器与数据卷

bc93ee8dc0c24a26af0470726ca253eb.png

由于每个容器都有自己用户态的文件系统,所以默认情况下当容器对自己的文件系统进行修改(比如新增文件,修改文件)时,其实修改的是自己容器自己的文件,而不是修改的宿主机的文件系统,所以当容器被删除后,在容器内增加或者修改的文件也就不见了。

为让容器内的数据可以被持久化到宿主机上,docker容器提供了数据卷的功能。当容器内需要持久化数据时,可以先在宿主机上创建一个卷(也就是一个文件目录),然后创建容器时把这个数据卷映射到容器内自己的文件系统目录内,这样当容器内添加文件时,其实是把文件添加到了宿主机上,由于卷是在宿主机上的,所以即使容器被删除了,容器创建的数据还是存在的。

7a60fc688549045bea3d585c5b81092e.png
image.png

如上图,我们在宿主机上创建了一个docker卷,然后我们在创建容器时,就可以把这个数据卷映射到容器内文件系统的code目录。

我们可以使用下面命令,在宿主机上创建一个名为myvol的数据卷:

$ docker volume create myvol

然后我们可以使用下面命令把myvol这个卷挂载到docker容器的code目录

$ docker container run -dit --name voltainer \
    --mount source=myvol,target=/code \
    alpine

也就是说用户可以在宿主机上先创建卷,然后在创建容器时将卷挂载到容器上。数据卷会被挂载到容器文件系统的某个目录之下,任何写到该目录下的内容都会写到卷中。即使容器被删除,卷与其上面的数据仍然存在。

其实我们可以把卷到容器文件的映射比作实际的文件目录和软连接的之间的关系,当我们建立一个软连接后,我们可以通过软连接读写具体文件目录的内容,但是当我们删除软连接时,并不会删除实际的文件目录。也就是容器中的文件和卷各自拥有独立的生命周期,另外Docker不允许删除正在被容器使用的卷。

戳下面阅读

👇

我的第三本书    我的第二本书    我的第一本书

程序员的办公神器    ForkJoinPool    K8s网络模型

  我的视频号  

点亮再看哦👇

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值