ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Docker基础 - 06Data Volumes

2021-11-06 17:04:52  阅读:181  来源: 互联网

标签:容器 run busybox -- 06Data Volumes Docker data docker


Docker基础 - 06Data Volumes

一、Data Volumes

  • Docker 镜像由多个只读层叠加而成,启动容器时, Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。
  • 如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,
    • 该文件的只读版本仍然存在,只是被已读写层该文件的副本所隐藏, 此即"写时复制(COW)"机制
  • 关闭并重启容器,其数据不受影响;但是删除Docker容器,其更改将会全部丢失。
  • 存在问题:
    • 存储于联合文件系统中,不易于宿主机访问
    • 容器间数据共享不便
    • 删除容器其数据会丢失
  • 解决方案: "卷(volume)"
    • 卷是容器上的一个或多个"目录",此类目录可绕过联合文件系统,与宿主机上的某目录"绑定(关联)"。
    • Volume于容器初始化之时即会创建,由base image提供的卷中的数据会在此期间完成复制。

    • Volume是独立于容器的生命周期实现数据持久化,因此删除容器之时不会删除卷,也不会对未被引用的卷做垃圾回收。

    • 卷为docker提供了独立于容器的数据管理机制, 卷实现了"程序(镜像)"和"数据(卷)"分离。

 

二、 Volume types

Docker有两种类型的卷:

每种类型都在容器中存在一个挂载点,但在宿主机上的位置不同

  • Bind mount volume

例: /my/bind/volume(container) <--> /some/specific/directory

  • Docker-managed volume

例: /managed/volume(container) <--> /var/lib/docker/vfs/dir/<volume ID>

 

三、 使用Volumes

docker run -it --name box1 -v /data busybox docker inspect -f {{.Mounts}} box1 docker run -it -v HOSTDIR:VOLUMEDIR --name box2 busybox docker inspect -f {{.Mounts}} box2  
[root@component ~]# docker run -it --name box1 -v /data busybox
/ # ls /
bin   data  dev   etc   home  proc  root  sys   tmp   usr   var
/ # cd /data
/data # ls
/data # echo "busybox" > aa.txt

[root@component ~]# cd /var/lib/docker/volumes/88e72088d20953837db1e907b7cebb1a3fee70f84fe86ecd83c4b9d8bd9c1ea0/_data/
[root@component _data]# ls
aa.txt
[root@component _data]# cat aa.txt 
busybox

[root@component ~]# docker inspect -f {{.Mounts}} box1
[{volume 88e72088d20953837db1e907b7cebb1a3fee70f84fe86ecd83c4b9d8bd9c1ea0 /var/lib/docker/volumes/88e72088d20953837db1e907b7cebb1a3fee70f84fe86ecd83c4b9d8bd9c1ea0/_data /data local true }]

  

[root@component ~]# docker inspect -f {{.Mounts}} box2
[{bind  /tmp /data   true rprivate}]

  

四、共享卷

4.1 在容器之间共享卷

docker run -it --name share01 -v /data/volumes/v1:/data busybox docker run -it --name share02 -v /data/volumes/v1:/data busybox  

4.2 复制使用其他容器的卷

docker run 命令使用 --volumes-from 选项 docker run -it --name share01 -v /data/volumes/v1:/data busybox docker run -it --name share02 --volumes-from share01 busybox    

标签:容器,run,busybox,--,06Data,Volumes,Docker,data,docker
来源: https://www.cnblogs.com/kingdomer/p/15489686.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有