精华内容
下载资源
问答
  • 容器存储
    千次阅读
    2022-04-18 10:05:35

    丁运管

    深信服云计算认证专家,产业教育中心资深讲师,云计算认证架构师,曾就职于阿里云、宏福集团,担任高级运维工程师和云计算高级讲师;多次作为电信、移动等众多大型企业特聘讲师,提供课程培训和技术顾问,具有丰富的云计算一线实战经验以及课程资源建设和交付经验。

    薛悟团

    深信服四川省云业务总监,长期工作于云计算市场一线,拥有丰富的云项目咨询和建设经验,对商企、医疗、教育、金融、军工行业数据中心建设需求有敏锐洞察。

    Q1:容器技术近几年越来越火热,从技术层面分析,Docker如何以“轻量级”的方式被大众熟知和了解?

    丁运管:从现阶段的发展可以看出,应用部署或者计算载体经历了物理服务器、虚拟机、容器的转变。用户早期应用全部部署于物理服务器上,后随着超融合技术发展,提供多种解决方案。当前更多企业开始使用容器云进行业务承载,达到了更加快速稳定的更新效果。

    以启动速度角度来看,物理服务器启动速度在数分钟级别,虚拟机把速度提升至分钟级别,而容器启动速度直接提升至秒级时代,给我们带来了很“轻量级”的感受。从技术层面来看,Docker镜像设计上运用到如下关键技术:分层技术、写时复制、内容寻址以及联合挂载技术,这些技术都使得容器更加轻量。

    Q2:都在提及的DevOps,会是昙花一现吗?

    丁运管:容器技术为企业项目开发提供了一个稳定灵活的基础平台。应用程序通过容器得以轻量级、高性能地运行在隔离环境中,使得软件的开发、测试和部署流程更便捷。可以说,容器促进了DevOps的高速发展。

    目前企业已经在践行DevOps的技术体系和方法论,对于企业来说,为使软件可以更快地推向市场,需要对产品进行持续性地迭代和变更,借助持续集成、持续测试、持续交付、持续监控和快速修复等工具和技术体系来进行保障,具有竞争优势,并率先树立品牌价值,提高系统的稳定性,减少用户的停机次数,使客户粘性实现有效提升。

    Q3:安全性成为用户使用容器技术和业务上云面临的最大挑战,其中数据安全问题最为突出。除了机密计算外,还有一个与安全相关的概念——安全容器,那打造安全容器需要通过哪些机制呈现呢?

    丁运管:安全容器这个问题目前备受关注,存在的问题主要是容器逃逸问题、磁盘资源限制问题、容器DoS攻击与流量限制问题、超级权限问题、镜像安全问题等。

    但是Docker在安全方面也产生了一定的效用,包括Docker daemon在以TCP形式提供服务的同时使用传输层安全协议;在构建和使用镜像时会验证镜像的签名证书;通过cgroups及namespaces来对容器进行资源限制和隔离;如果合理地实现上述安全方案,可以在很大程度上提高Docker容器的安全性。

    Docker通过一些额外的工具来加强安全。比如,使用SELinux限制进程访问的资源,使用quota等技术限制容器磁盘使用量,使用traffic controller技术对容器的流量进行控制。

    同时深信服也提供容器安全解决方案,通过镜像安全检测,容器安全扫描,针对dockerfile和声明式API进行安全性评估等多种手段解决资产变化快、镜像漏洞多、隔离性脆弱等问题。

    Q4:行业内一直有人提及,虚拟化技术未来会被容器技术替代,在容器技术被逐渐使用的过程中,这个替代是否会真实发生,当前的替代进度如何?

    薛悟团:这两种技术我认为并非是非此即彼的状态,从技术层面上看,虚拟化和容器特点不同,应用场景也有所不同。稳态应用,单一且不发生更迭的应用,需要适配虚拟化技术来承载;敏态应用,功能变更比较快且比较多的,需要适配容器的环境来承载。

    容器技术成熟前,确实大量承载需求在虚拟化;但本质上对于访问连续性要求、业务系统功能变化更多后,导致这部分适配容器的会替代为基于容器承载和开发。

    目前从市场来看,大部分企事业单位基于虚拟机来承载,少部分企业使用容器技术承载,到2023至2024年,可能会有一些转变。

    Q5:容器技术相对比虚拟化、甚至裸金属服务器的使用门槛要高一些。随着时间的推移,是否大多数企事业单位都需要专岗甚至专门团队做容器相关的运维工作呢?

    薛悟团:不同行业容器技术使用的进度不同,一些行业要求最终用户需要有基于容器的开发、运维能力。各个行业的业务目标不同,所需要容器技术的程度也有所不同,如金融、物流行业,一般需要专业的团队承载容器技术;如医疗、教育、政府行业,大多是软件供应商开发,需要具备基本容器承载环境即可。

    Q6:对于一般的企业用户,应当在什么时候引入容器技术,这个技术的引入能解决企业哪些方面的典型问题?

    薛悟团:从市场层面来看,容器技术需要视业务情况不同进行调整,容器自身具备的特征需实现对软件功能变更的灵活支持、对潮汐业务的支出、对业务连续性、支持度要求高。举个例子,比如物联网逐渐深入生活中,具体业务实现中,物联网需要对软件功能变更的灵活支持,容器技术的引入将会很大程度上实现降本增效。随着数字化转型进入3.0时代,数据驱动业务,未来将对容器技术的需求程度也越来越高。

    更多相关内容
  • 摘要 Docker为了节约存储空间及共享数据,会对镜像和容器分层。不同镜像可以共享相同...Docker支持多种不同的存储方式,每种存储方式保存镜像和容器的方法都不相同。下面将具体介绍这些区别。 博文参考 ...

    摘要

    Docker为了节约存储空间及共享数据,会对镜像和容器分层。不同镜像可以共享相同数据,例如,从同一个基础镜像中生成的子镜像可以共享基础镜像,从同一个镜像启动的不同容器也可以共享这个镜像。Docker为了加快容器的启动速度,在启动容器时,会在镜像上为容器分配一个可写数据层,在容器运行中,新增、修改和删除的数据都保存在这个容器层中。Docker支持多种不同的存储方式,每种存储方式保存镜像和容器的方法都不相同。下面将具体介绍这些区别。

     

    博文参考

    展开全文
  • 31 容器存储实践:CSI插件编写指南.pdf
  • 容器存储趋势的发展

    2016-04-14 18:03:52
    容器存储趋势的发展 docker等热门技术的趋势
  • 本文依据已有的条件分析了Docker的镜像与容器存储结构,并通过一系列小实验深入分析了devicemapper和aufs这两种存储结构。希望为大家提供一些有价值的参考,并引出有意义的讨论。Docker是一个开源的应用容器引擎,...
  • 容器存储卷的介绍与使用

    千次阅读 2022-04-30 13:54:15
    存储卷 COW机制(写时复制) Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。 如果容器修改了镜像的原有文件,那么只读层的文件不会被修改,而是会被复制到读写...

    存储卷

    COW机制(写时复制)

    Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层。

    如果容器修改了镜像的原有文件,那么只读层的文件不会被修改,而是会被复制到读写层做修改,只读版本依然存在,只是被读写层中的副本隐藏起来了,这就是“写时复制(COW)”机制。

    在这里插入图片描述

    因为隔着很多层镜像,用上面这种方式,去访问一个文件,然后进行修改和删除等一类的操作,其效率会非常的低,
    而要想绕过这种限制,我们可通过使用存储卷来实现。

    什么是存储卷

    存储卷会把宿主机本地文件系统中的目录 与容器文件系统上的目录建立绑定关系

    简单来说,当我们在容器中目录下写入数据时,因为目录绑定关系的存在,容器会将其内容直接写入到宿主机上的对应目录。

    在这里插入图片描述

    在宿主机上的这个与容器形成绑定关系的目录被称作存储卷。

    使用存储卷的好处

    ①防止数据丢失
    当容器所有运行进程的有效数据都保存在存储卷时,如果容器关闭甚至被删除时,只要不删除容器绑定在宿主机上的目录,我们就不用担心数据丢失了,以此来实现数据脱离容器的生命周期,被持久保存的目的。

    ②摆脱容器和主机的对应限制
    我们通过这种方式管理容器,容器就可以脱离主机的限制。任何一台主机安装docker以后,运行容器后,其数据可以置于一个共享存储文件系统上,比如nfs。

    为什么要用存储卷

    关闭并重启容器,其数据不受影响,但删除Docker容器,则其更改将会全部丢失。
    因此Docker存在的问题有:

    • 存储于联合挂载文件系统中,不易于宿主机访问
    • 容器间数据共享不便(容器之间本身是隔离的)
    • 删除容器其数据会丢失
      使用存储卷就是来解决以上问题的。

    存储卷管理方式

    存储卷(Data Volume)于容器初始化时被自动创建,由base image提供的卷中的数据会于此期间完成复制。

    存储卷为Docker提供了独立于容器的数据管理机制,我们可以把镜像想象成静态文件,例如“程序”,把卷类比为动态内容,例如“数据”。所以镜像可以重复利用,而存储卷则可以共享。

    存储卷既实现了“程序(镜像)”和“数据(卷)”的分离,也实现了“程序(镜像)”和“制作镜像的主机”的分离,所以用户制作镜像时,无须再考虑镜像运行容器所在的主机环境。

    在这里插入图片描述

    存储卷的分类

    Docker有两种类型的卷,每种类型都在容器中存在一个挂载点,但其在宿主机上的位置有所不同:

    • 绑定挂载卷

      • 指向主机文件系统上,用户指定位置的卷(常用,就算容器删了,数据也不会丢失)
    • Docker 管理的卷

      • Docker 守护进程,在 Docker 所在的主机文件系统中,创建的卷(容器删了,数据也会消失)

    在这里插入图片描述

    容器数据管理

    用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据,或者需要把容器内的数据进行备份,甚至多个容器之间进行数据的共享,这必然涉及容器的数据管理操作。

    容器中管理数据主要有两种方式:

    • 数据卷(Data Volumes)
    • 数据卷容器(Data Volumes Containers)

    容器Volume使用语法:
    docker管理的卷(容器删除,数据同步丢失
    docker run -it --name CONTAINER_NAME -v VOLUMEDIR IMAGE_NAME

    # 容器管理的卷的数据存储示例
    [root@rookie ~]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND     CREATED      STATUS                    PORTS     NAMES
    98b74ab02ea5   busybox   "/bin/sh"   5 days ago   Exited (137) 5 days ago             xyx
    [root@rookie ~]# docker start xyx
    xyx
    [root@rookie ~]# docker inspect  xyx   # 找到存储的目录
    [root@rookie ~]# cd /var/lib/docker/overlay2/3da71eb0eaa2667d371eec65f35c77485925ba08b53e1bd60d80068b6a709238/
    [root@rookie 3da71eb0eaa2667d371eec65f35c77485925ba08b53e1bd60d80068b6a709238]# ls
    diff  link  lower  merged  work
    [root@rookie 3da71eb0eaa2667d371eec65f35c77485925ba08b53e1bd60d80068b6a709238]# ls merged/
    bin  dev  etc  home  proc  root  sys  tmp  usr  var
    
    # 容器内添加内容 容器外数据同步添加
    [root@rookie ~]# docker exec -ti xyx /bin/sh
    / # touch 123 
    / # ls
    123   bin   dev   etc   home  proc  root  sys   tmp   usr   var
    [root@rookie 3da71eb0eaa2667d371eec65f35c77485925ba08b53e1bd60d80068b6a709238]# ls merged/
    123  bin  dev  etc  home  proc  root  sys  tmp  usr  var
    
    
    # 删除容器 容器外数据同步消失
    / # exit
    [root@rookie ~]# docker ps 
    CONTAINER ID   IMAGE     COMMAND     CREATED      STATUS         PORTS     NAMES
    98b74ab02ea5   busybox   "/bin/sh"   5 days ago   Up 7 minutes             xyx
    [root@rookie ~]# docker rm -f xyx
    xyx
    
    [root@rookie 3da71eb0eaa2667d371eec65f35c77485925ba08b53e1bd60d80068b6a709238]# ls 
    [root@rookie 3da71eb0eaa2667d371eec65f35c77485925ba08b53e1bd60d80068b6a709238]# ls merged/
    ls: 无法访问'merged/': 没有那个文件或目录
    
    

    用户绑定的卷(容器删除,数据依旧保留)
    docker run -it --name CONTAINER_NAME -v HOSTDIR:VOLUMEDIR IMAGE_NAME

    #让真机上的b0test目录与容器内的data目录绑定
    [[root@rookie ~]# docker run -it --name b0 -v /root/b0test:/data busybox 
    / # ls
    bin   data  dev   etc   home  proc  root  sys   tmp   usr   var
    / # ls /data/
    [root@rookie ~]# ls b0test/
    
    #真机写入文件 容器同步添加
    [root@rookie ~]# echo "nihao" > b0test/123
    [root@rookie ~]# ls b0test/
    123
    [root@rookie ~]# cat b0test/123 
    nihao
    
    / # cat /data/123 
    nihao
    
    
    #容器内创建文件 退出并删除容器 真机文件保留
    / # cd data/
    /data # touch xieyanxin 
    /data # ls
    123        xieyanxin
    /data # exit
    
    [root@rookie ~]# docker rm b0
    b0
    [root@rookie ~]# docker ps -a 
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    
    [root@rookie ~]# ls b0test/
    123  xieyanxin
    
    

    在容器中使用数据卷

    下面部署一个网站(源码来自于源码之家),然后使用apache镜像创建一个b1容器,并创建一个数据卷/root/b1test挂载到容器的/usr/loacl/apache2/htdocs目录下:

    准备好数据卷的网站内容

    #下载源码 并解压缩 创建好数据卷 并把网站文件放到此目录
    [root@rookie ~]# ls
    anaconda-ks.cfg  sayTheMoney.github.io-master.zip
    [root@rookie ~]# dnf -y install unzip
    
    [root@rookie ~]# mkdir b1test
    [root@rookie ~]# mv sayTheMoney.github.io-master/* b1test/
    [root@rookie ~]# ls b1test/
    服务器之家.url                        android-chrome-512x512.png  favicon.ico
    ★★精品过期已备案域名,即买即用★★.url  apple-touch-icon.png        global.css
    精品免费商业源码下载.url              build                       index.html
    ★★★★香港免备案云主机★★★★.url          favicon-16x16.png           site.webmanifest
    android-chrome-192x192.png            favicon-32x32.png           thumbnail.png
    
    

    运行容器 挂载一个主机目录作为数据卷,查看效果

    • 注意
      ①这里的-P是允许外部访问容器需要暴露的端口;
      ②本地目录的路径必须是绝对路径,如果目录不存在,Docker会自动创建。
    [root@rookie ~]# docker run -d --name b1 -v /root/b1test:/usr/local/apache2/htdocs -p 80:80  httpd 
    084e3104515cd581ef8e1857c3f4ad1b0d45c9cd5c6e1002c1010f3d5cd86313
    [root@rookie ~]# docker ps -a 
    CONTAINER ID   IMAGE     COMMAND              CREATED         STATUS         PORTS                               NAMES
    084e3104515c   httpd     "httpd-foreground"   7 seconds ago   Up 6 seconds   0.0.0.0:80->80/tcp, :::80->80/tcp   b1
    [root@rookie ~]# ifconfig ens33
    ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 192.168.177.101  netmask 255.255.255.0  broadcast 192.168.177.255
    
    
    • 真机访问查看效果
      在这里插入图片描述

    此功能在测试的时候非常方便,我们可以放置一些程序或数据到本地目录中,然后在容器内运行和使用。

    另一种只读的方式跑这个容器(网站)

    • Docker挂载数据卷的默认权限是读写(rw),用户也可以通过(ro)指定为只读:
    # 先把容器停掉删除
    [root@rookie ~]# docker stop b1
    b1
    [root@rookie ~]# docker rm b1 
    b1
    #加上ro  指定为只读
    [root@rookie ~]# docker run -d --name b1 -v /root/b1test:/usr/local/apache2/htdocs:ro -p 80:80  httpd 
    fc106bac4858f65209b75b06adc970cc05b3451ddafb2a9cdc270ab49b312294
    #进入容器 试着创建文件 测试效果(此时可以访问 但无法修改内容)
    [root@rookie ~]# docker exec -it b1 /bin/bash
    root@fc106bac4858:/usr/local/apache2# cd htdocs/
    root@fc106bac4858:/usr/local/apache2/htdocs# ls
     android-chrome-192x192.png
     android-chrome-512x512.png
     apple-touch-icon.png
     build
     favicon-16x16.png
     favicon-32x32.png
     favicon.ico
     global.css
     index.html
     site.webmanifest
     
    #提示为只读 
    root@fc106bac4858:/usr/local/apache2/htdocs# touch 123
    touch: cannot touch '123': Read-only file system  
    
    #但容器外可以修改 且容器内数据也同步
    [root@rookie ~]# cd b1test/
    [root@rookie b1test]# touch xyx
    [root@rookie b1test]# ls 
    服务器之家.url                        favicon-16x16.png
    ★★精品过期已备案域名,即买即用★★.url  favicon-32x32.png
    精品免费商业源码下载.url              favicon.ico
    ★★★★香港免备案云主机★★★★.url          global.css
    android-chrome-192x192.png            index.html
    android-chrome-512x512.png            site.webmanifest
    apple-touch-icon.png                  thumbnail.png
    build                                 xyx
    
    root@fc106bac4858:/usr/local/apache2/htdocs# ls
     android-chrome-192x192.png
     android-chrome-512x512.png
     apple-touch-icon.png
     build
     favicon-16x16.png
     favicon-32x32.png
     favicon.ico
     global.css
     index.html
     site.webmanifest
     thumbnail.png
     xyx 
    
    

    加了:ro以后,外部可以修改数据,但容器内挂载的数据卷的数据就无法修改了。

    挂载一个本地主机文件作为数据卷(不常用,通常是目录)

    -v选项也可以从主机挂载单个文件到容器中作为数据卷:
    [root@rookie ~]# docker run -it --rm -v ~/.bash_history:/.bash_history centos /bin/bash

    这样就可以记录在容器输入过的命令历史了。
    如果直接挂载一个文件到容器,使用文件编辑工具,包括vi或者sed去修改文件内容的时候,可能会造成inode的改变,这样将会导致错误。所以推荐的方式是直接挂载文件所在的目录。

    数据卷容器

    如果用户需要在容器之间共享一些持续更新的数据,可以使用数据卷容器。数据卷容器本质上还是一个普通的容器,但它可以用来专门提供数据卷 供其他容器挂载使用,方法如下:

    • ①首先,创建一个数据卷容器xieyanxin ,并在其中创建一个数据卷挂载到/dbdata:
    [root@rookie ~]# docker run -itd --name xieyanxin -v /dbdata  busybox 
    b61ed4bf69e479a7cc45e5b0c7b2f10e7f4ad24c5ebacd1cc3a2947c0223be3f
    [root@rookie ~]# docker ps
    CONTAINER ID   IMAGE     COMMAND   CREATED         STATUS         PORTS     NAMES
    b61ed4bf69e4   busybox   "sh"      3 seconds ago   Up 2 seconds             xieyanxin
    
    # 查看xieyanxin容器的dbdata目录是否存在
    [root@rookie ~]# docker exec -it xieyanxin /bin/sh
    / # ls
    bin     dev     home    root    tmp     var
    dbdata  etc     proc    sys     usr
    
    
    
    • ②然后可以在其他容器中使用–volumes-from来挂载dbdata容器中的数据卷,例如创建xiaoxie1和xiaoxie2两个容器,并从xieyanxin容器挂载数据卷:
    [root@rookie ~]# docker run -itd --name xiaoxie2 --volumes-from xieyanxin busybox
    468d1f865f3d0859ba468c8c0bbb751a07eb2703ae09c4cdd0915a8746a71b56
    [root@rookie ~]# docker run -itd --name xiaoxie1 --volumes-from xieyanxin busybox
    e301456fbb2298310bd2a741c6186c800e6e53ffe12dbb42824cba854d0c4ad3
    [root@rookie ~]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS          PORTS     NAMES
    e301456fbb22   busybox   "sh"      6 seconds ago    Up 5 seconds              xiaoxie1
    468d1f865f3d   busybox   "sh"      11 seconds ago   Up 10 seconds             xiaoxie2
    b61ed4bf69e4   busybox   "sh"      4 minutes ago    Up 4 minutes              xieyanxin
    
    # 容器xiaoxie1和xiaoxie2都挂载同一个数据卷到相同的/dbdata目录
    [root@rookie b1test]# docker exec -it xiaoxie1 /bin/sh
    / # ls
    bin     dev     home    root    tmp     var
    dbdata  etc     proc    sys     usr
    [root@rookie ~]# docker exec -it xiaoxie2 /bin/sh
    / # ls
    bin     dev     home    root    tmp     var
    dbdata  etc     proc    sys     usr
    
    

    正是因为容器xiaoxie1和xiaoxie2都挂载同一个数据卷到相同的/dbdata目录,xieyanxin,iaoxie1,xiaoxie2这三个容器任何一方在该目录下的写入,其他容器都可以看到

    例如,在xiaoxie1容器中创建一个guaguagua文件:

    / # cd /dbdata/
    /dbdata # echo "nishihangua" > guaguagua
    /dbdata # ls
    guaguagua
    

    在xieyanxin容器中查看:

    [root@rookie ~]# docker exec -it xieyanxin /bin/sh
    / # ls
    bin     dev     home    root    tmp     var
    dbdata  etc     proc    sys     usr
    / # cat /dbdata/guaguagua 
    nishihangua
    
    • ③可以多次使用–volumes-from参数来从多个容器挂载多个数据卷。还可以从其他已挂载了容器卷的容器来挂载数据卷:
    #xiaoxie999容器以xiaoxie1容器挂载数据卷  
    [root@rookie ~]# docker run -itd --name  xiaoxie999 --volumes-from xiaoxie1 busybox
    8de8ea4edfdda1cac392e6e9c854ef3037af3c76b5ed2821915d5346b0bae638
    [root@rookie ~]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS          PORTS     NAMES
    8de8ea4edfdd   busybox   "sh"      5 seconds ago    Up 3 seconds              xiaoxie999
    e301456fbb22   busybox   "sh"      16 minutes ago   Up 16 minutes             xiaoxie1
    468d1f865f3d   busybox   "sh"      16 minutes ago   Up 16 minutes             xiaoxie2
    b61ed4bf69e4   busybox   "sh"      21 minutes ago   Up 21 minutes             xieyanxin
    
    #进入xiaoxie999容器创建 内容 ,到xieyanxin容器查看 
    [root@rookie ~]# docker exec -it xiaoxie999 /bin/sh
    / # ls /dbdata/
    guaguagua
    / # cd /dbdata/
    /dbdata # echo "xiaoxie999laila" > 999
    /dbdata # ls
    999        guaguagua
    /dbdata # exit
    
    [root@rookie ~]# docker exec -it xieyanxin /bin/sh
    / # cat /dbdata/999 
    xiaoxie999laila
    
    • ④使用–volumes-from参数所挂载数据卷的容器自身并不需要保持在运行状态。
    #停掉xieyanxin容器的运行状态
    [root@rookie ~]# docker stop xieyanxin
    [root@rookie ~]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS                        PORTS     NAMES
    8de8ea4edfdd   busybox   "sh"      7 minutes ago    Up 7 minutes                            xiaoxie999
    e301456fbb22   busybox   "sh"      23 minutes ago   Up 23 minutes                           xiaoxie1
    468d1f865f3d   busybox   "sh"      23 minutes ago   Up 23 minutes                           xiaoxie2
    b61ed4bf69e4   busybox   "sh"      28 minutes ago   Exited (137) 44 seconds ago             xieyanxin  # xieyanxin已停止
    
    #去xiaoxie2查看 然后创建一个文件
    [root@rookie ~]# docker exec -it xiaoxie2 /bin/sh
    / # cd /dbdata/
    /dbdata # ls
    999        guaguagua
    /dbdata # touch xiaoxie111
    /dbdata # ls
    999         guaguagua   xiaoxie111
    /dbdata # exit
    
    #去xiaoxie1查看 数据依旧是同步的
    [root@rookie ~]# docker exec -it xiaoxie1 /bin/sh
    / # ls /dbdata/
    999         guaguagua   xiaoxie111
    
    • ⑤如果删除了挂载的容器(包括xieyanxin、xiaoxie1和xiaoxie2),数据卷并不会被自动删除。如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显式使用docker rm -v命令来指定同时删除关联的容器。
    #删除xieyanxin并确认
    [root@rookie ~]# docker rm -f xieyanxin
    xieyanxin
    [root@rookie ~]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS          PORTS     NAMES
    8de8ea4edfdd   busybox   "sh"      15 minutes ago   Up 14 minutes             xiaoxie999
    e301456fbb22   busybox   "sh"      31 minutes ago   Up 31 minutes             xiaoxie1
    468d1f865f3d   busybox   "sh"      31 minutes ago   Up 31 minutes             xiaoxie2
    
    # 去xiaoxie1 xiaoxie2 查看 数据卷关系依然存在
    [root@rookie b1test]# docker exec -it xiaoxie1 /bin/sh
    / #  cd /dbdata/
    /dbdata # touch xixi
    
    [root@rookie ~]# docker exec -it xiaoxie2 /bin/sh
    / # cd /dbdata/
    /dbdata # ls
    999         guaguagua   xiaoxie111  xixi
    
    #删除全部容器 只保留xiaoxie999
     [root@rookie ~]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS          PORTS     NAMES
    8de8ea4edfdd   busybox   "sh"      15 minutes ago   Up 14 minutes             xiaoxie999
    e301456fbb22   busybox   "sh"      31 minutes ago   Up 31 minutes             xiaoxie1
    468d1f865f3d   busybox   "sh"      31 minutes ago   Up 31 minutes             xiaoxie2
    [root@rookie ~]# docker rm -f xiaoxie1
    xiaoxie1
    [root@rookie ~]# docker rm -f xiaoxie2
    xiaoxie2
    [root@rookie ~]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND   CREATED          STATUS          PORTS     NAMES
    8de8ea4edfdd   busybox   "sh"      17 minutes ago   Up 17 minutes             xiaoxie999
    
    #找到xiaoxie999对应在真机上的目录
    [root@rookie ~]# docker inspect xiaoxie999
    [root@rookie ~]# cd /var/lib/docker/volumes/b1622bf1ecdac3cd92f938c8958b32ba93535a000befc0a913431f650ba810e2/_data
    [root@rookie _data]# ls
    999  guaguagua  xiaoxie111  xixi
    
    #用docker rm(不加v)删除容器,在真机的目录上数据还是在
    [root@rookie ~]# docker rm -f xiaoxie999
    xiaoxie999
    [root@rookie ~]# docker ps -a
    CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
    [root@rookie _data]# ls
    999  guaguagua  xiaoxie111  xixi
    
    • 用docker rm(不加v)删除数据卷容器时,数据依旧会保留 ,想要全部删除也很简单 ,docker rm -vm 命令指定删除的容器,全部删除就可以了。
    展开全文
  • 容器存储实验手册1

    2022-08-03 12:17:51
    容器存储实验手册1
  • 1. 容器存储背景 1.1、容器 VS 虚拟机 容器技术是目前云计算中不可或缺的一部分,相比于传统虚拟机而言,容器技术在操作系统级别为虚拟化提供了一种更轻量化的选择。传统虚拟机(VM)在虚拟化硬件和主机操作系统之...

    1. 容器存储背景

    1.1、容器 VS 虚拟机

    容器技术是目前云计算中不可或缺的一部分,相比于传统虚拟机而言,容器技术在操作系统级别为虚拟化提供了一种更轻量化的选择。传统虚拟机(VM)在虚拟化硬件和主机操作系统之上通过hypervisor管理层运行客户端操作系统的完整副本,运行过程占用大量空间,限制了单台物理主机上可部署的虚拟机数量,而启动时间长使得虚拟机托管短生命周期的应用程序代价过高。下图为虚拟机和Docker容器的系统层次结构对比图。

     基于容器的虚拟化技术通过在应用程序之间共享主机操作系统的库和内核来解决这些问题,它不再需要运行整个臃肿的客户端操作系统,而是通过命名空间namespace机制使每个应用程序都运行在一个独立的命名空间,也就是容器中。简单理解来看,容器就是通过namespace机制打包隔离运行的一组“容器化”进程。运行在主机操作系统之上的后台进程Docker守护进程则取代了Hypervisor,它可以直接与主机操作系统通信,负责管理Docker容器为其分配资源,而应用的所有依赖包括源代码都打包在Docker镜像。相比于虚拟机而言,容器产生的开销更小,占用的空间更少,启动的速度更快。

    1.2、镜像与层

    Docker 镜像作为Docker容器的基础,由一系列层堆叠组成,每个层代表镜像的Dockerfile中的一条指令。除了最上层容器层之外,每个层都是只读了,每个层与之前的层只有一部分差异。当创建并启动一个新的容器时,Docker会加载只读镜像层并在其上(即镜像栈顶部)添加一个可读写层,这个层通常被称为“容器层”。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失。在Docker中,只读层及在顶部的读写层的组合被称为Union File System(联合文件系统)。下图显示了一个基于 Ubuntu 15.04 镜像的容器。

    1.3、容器与层

    容器和镜像之间的主要区别是顶部的可写层。所有对容器添加新的或修改现有数据的内容都存储在该可写层中。当容器被删除时,可写层也被删除,底层镜像则保持不变。由于每个容器都有自己的可写的容器层,并且所有更改都存储在此容器层中,因此多个容器可以共享对相同基础镜像的访问权限,并且拥有自己的数据状态。下图显示了共享相同 Ubuntu 15.04 镜像的多个容器。Docker 使用存储驱动程序来管理镜像层和可写容器层的内容。每个存储驱动程序都处理实现的方式不同,但所有驱动程序都使用可堆叠的镜像层和写入时复制(CoW)策略。存储驱动程序处理有关这些层相互交互方式的详细信息,不同的存储驱动程序可以使用,在不同情况下各有优缺点。

    由于容器灵活、高效、易于扩展,并面向云计算,因此希望将其应用范围扩展到徽服务之外,例如大型的容器化的数据库、甚至存储系统,但是通过容器设计企业级的、长期存储数据的应用目前仍是困难的。

    1.4、容器持久化数据存储

    Docker容器架构包括三种类型的数据存储 1)第一类是镜像存储,可利用现有的共享存储进行交付,要求类似于服务器虚拟化环境中虚拟机镜像分发保护的平台架构。容器镜像的数据存储容量相对完整的虚拟机镜像较小,可以高效地存储、共享。其缺点在于无法存储动态应用程序的数据。2)第二类是容器的管理数据,如存储配置、日志记录等管理数据。3)第三类是容器应用数据的存储,容器使用分层文件系统,将所有新写入的数据存储在临时虚拟层,无法直接修改最底层的镜像,写入日录和文件。一旦容器消失,所有的临时存储都将丢失。

    容器上承载的应用分为有状态和无状态,容器本身更倾向于无状态化、可水平拓展的应用,但并不意味所有的应用都是无状态的,一些应用服务的状态需要保存比如日志等相关信息,因此需要持久化存储。而容器的特性决定了容器本身是非持久化的,当容器被删除时其上的数据也一并删除。

    针对Docker容器的持久化数据访问有多种选择:Docker存储驱动(可以理解为Docker文件系统驱动);Docker卷;直接设备访问(device mapper,也可以理解为一种存储驱动)。但这三种方式目前仍然存在各自的问题:

    • Docker存储驱动:1)、对文件进行分层访问,需要通过多个文件或持久层复制数据,存在空间和速度问题;2)、必须为驱动程序配置整个Docker服务守护程序,且除非重新配置和重新安装否则无法更改。
    • Docker数据卷:1)、卷在容器启动时指定,不能后续添加;2)、数据不隔离;3)、由于卷驱动程序中的内部同步点,多线程应用程序不能很好地扩展。
    • 直接设备访问:1)、容器启动时指定并授予对设备的直接访问权限,且在重启时要求完全相同的驱动程序,新驱动安装后必须重新启动容器;2)、必须授予违反隔离原则的容器特殊权限,因为它允许每个容器在使用相同规范启动的容器中访问或覆盖共享驱动程序中的数据。

    2. Docker容器存储

    2.1、存储驱动

    Docker 使用存储驱动程序来管理镜像层和可写容器层的内容与数据操作。每个存储驱动程序都处理实现的方式不同,但所有驱动程序都使用可堆叠的镜像层和写入时复制(CoW)策略。

    2.1.1、AUFS

    AUFS是一个联合文件系统,AUFS存储驱动是文件级存储驱动。AUFS能透明覆盖一或多个现有文件系统的层状文件系统,把多层合并成文件系统的单层表示,这些目录在AUFS术语中称为分支,在Docker术语中称为层。简单来说就是支持将不同目录挂载到同一个虚拟文件系统下的文件系统,这种文件系统可以一层一层地叠加修改文件。无论底下有多少层都是只读的,只有最上层的文件系统是可写的。

    当需要修改一个文件时,AUFS创建在可写层使用CoW创建该文件的副本,将文件从只读层复制到上层可写层进行修改,结果保存在可写层。在Docker中,底下的只读层就是image,可写层就是Container,从上层至下层具有覆盖性,当上层和下层存在相同文件时,上层文件会覆盖下层文件。当执行读操作时,由上至下检索,当找到文件时读取。AUFS因此会因为过深的镜像层数影响读写性能。AUFS的逻辑结构如上图所示。

    容器的每个镜像层/容器层在Docker主机上表示为/var/lib/docker/中的子目录。AUFS通过联合挂载提供了所有层的统一视图,关于镜像和容器层的所有信息都存储在子目录/var/lib/docker/aufs/中:

    • diff/:存储每个layer的内容,每个都存储在一个单独的子目录中。包括可写容器层中的改变也保存在该文件子目录对应的文件目录下。
    • layers/:有关镜像层堆叠方式的元数据。该目录包含Docker主机上每个镜像或容器层的一个文件,每个文件都包含堆栈中其下面所有层的ID(其父项)。
    • mnt/:挂载点,每个映像或容器层一个,用于为容器集合和挂载统一文件系统。对于只读镜像这些目录始终为空。

    2.1.2、BTRFS

    Btrfs被称为下一代写时复制文件系统,并入Linux内核。Btrfs存储驱动是文件级驱动,但也能像Device mapper一样直接操作底层设备。Btrfs把文件系统的一部分配置为一个完整的子文件系统,称为subvolume。采用“子卷”的一个大的文件系统可以被划分为多个子文件系统,这些子文件系统共享底层的设备空间,在需要磁盘空间时便从底层设备中分配,类似于应用调用 malloc()分配内存。1)当写入新文件时,btrfs通过用时分配为容器快照分配一个新的数据块,文件写在这个空间里;2)当修改已有文件时,btrfs从文件当前存在的层读取原始数据,使用CoW分配一个新的原始数据快照并在其中修改数据,并仅将修改的块写入容器的可写层,再更新快照中的文件系统元数据指向此新数据;3)当读数据时,针对快照执行的读取与针对子卷执行的读取基本相同;4)当删除底层中的文件/目录时,Btrfs会屏蔽底层中文件/目录的存在。若先创建文件然后将其删除,则此操作将在Btrfs文件系统本身中执行,并回收该空间。

    为了灵活利用设备空间,Btrfs 将磁盘空间划分为多个chunk,而每个chunk可以使用不同的磁盘空间分配策略,比如某些chunk只存放metadata,某些chunk只存放数据。这种方式有很多优点比如Btrfs支持动态添加设备而无需解挂载文件系统或重启Docker。用户在系统中增加新的磁盘之后,可以使用Btrfs命令将该设备直接添加到文件系统中。

    Btrfs存储驱动与设备映射或其他驱动的工作方式不同,整个/var/lib/docker/目录存储在Btrfs卷上。Btrfs存储驱动将每个镜像和容器存储在自己的Btrfs子卷或快照中:镜像的基础层存储为子卷,而子镜像层和容器存储为快照,如上图。Btrfs把一个大的文件系统当成一个资源池,配置成多个完整的子文件系统,可以往资源池里加新的子文件系统,而基础镜像则是子文件系统的快照,每个子镜像和容器都有自己的快照,这些快照则都是subvolume的快照。

    2.1.3、Overlay / Overlay2

    OverlayFS是一种现代化联合文件系统,是文件级驱动,类似AUFS但相对更快速和稳定。Overlay存储驱动在Linux内核3.18后支持,Overlay2存储驱动在Linux内核4.0以后支持,可能的情况下选择后者会更高效。Overlay存储驱动的结构如下图所示:

    OverlayFS将单个Linux主机上的两个目录分层,并将它们显示为单个目录。这些目录称为层,统一过程称为联合挂载,下层目录称为lowerdir,上层目录称为upperdir,统一视图通过命名为merged的目录公开。当镜像层和容器层包含相同文件的情况下,容器层“获胜”并且隐藏镜像层中相同文件的存在。当需要修改一个文件时,使用CoW将文件从只读的lowerdir复制到可写的upperdir进行修改,结果保存在upperdir层。

    Overlay:和AUFS驱动不同的是Overlay只有两层,镜像层是lowerdir,容器层是upperdir。统一视图通过名为merged的目录公开,该目录实际上是容器挂载点。Overlay驱序仅包含两层,意味着多层镜像不能实现为多个OverlayFS层。 因此每个镜像层都在/var/lib/docker/overlay下实现为自己的目录,然后使用硬链接作为应用与较低层共享数据。但硬链接的使用导致过度使用inode,并且可能需要对后端文件系统进行额外配置。

    Overlay2:驱动程序则支持多达128个较低的OverlayFS层。此功能为与层相关的Docker命令(如build、commit)提供了更好的性能,且在后端文件系统上消耗的inode更少。

    2.1.4、ZFS

    ZFS 是革命性的下一代文件系统,它从根本上改变了文件系统的管理方式,ZFS 完全抛弃了“卷管理”,不再创建虚拟的卷,而是把所有设备集中到一个存储池中来进行管理,用“存储池”的概念来管理物理存储空间。文件系统过去都是构建在物理设备之上的,为了管理这些物理设备并为数据提供冗余,“卷管理”的概念提供了一个单设备的映像。而ZFS创建在虚拟的被称为“zpools”的存储池之上。每个存储池由若干虚拟设备(virtual devices,vdevs)组成,zpool上的文件系统可以使用这些虚拟设备的总存储容量。Zpool的大小可在运行时通过动态添加专用设备来扩容,且ZFS可限制每个容器的可用存储空间。

    ZFS包括:1)文件系统:精简配置,按需从zpool分配空间;2)快照:文件系统的只读空间高效的副本;3)克隆:快照的可读写副本,存储与之前层的差异。文件系统、快照和克隆都从底层zpool分配空间。下图为创建克隆的过程:1)从文件系统创建只读快照;2)从快照创建可写克隆,包含与父镜像层的任何差异。

    每个运行中容器的统一文件系统都挂载在/var/lib/docker/zfs/graph/中的挂载点上。镜像的基础层是ZFS文件系统,每个孩子层都是基于其下层ZFS快照的ZFS克隆。一个容器是基于其源镜像顶层ZFS快照的ZFS克隆。快照是只读的,而克隆是可写的。下图为一个基于双层镜像的运行时容器。

    Docker里ZFS首先从zpool里分配一个ZFS文件系统给镜像的基础层;而其他镜像层则是这个ZFS文件系统快照的克隆;当容器启动时则在镜像最顶层生成一个可写层。当要写一个新文件时,使用按需分配将一个新的数据快从zpool里生成,新的数据写入这个块,而这个新空间存于容器层(ZFS的克隆)。当要修改一个已存在的文件时,为要修改的快分配一个新空间并使用写时复制把原始数据复制到新空间完成修改。

    2.1.5、Device Mapper

    Docker的 device mapper 存储驱动程序利用内核框架Device Mapper的精简配置和快照功能进行镜像和容器管理,其使用专用块设备而不是格式化的文件系统,并在块级别上对文件进行操作。它提供一种从逻辑设备到物理设备的映射框架机制,在该机制下用户可以方便的根据需要制定存储资源的管理策略。Device mapper存储驱动可通过将物理存储添加到Docker主机来拓展这些设备。

    通过Device mapper 存储驱动程序启动 Docker 时,所有镜像及容器层都保存在 /var/lib/docker/devicemapper/,它由一个或多个块级设备支持。Device mapper驱动首先在块设备上创建一个资源池,然后在资源池上创建一个带有文件系统的基本设备,所有镜像都是这个基本设备的快照,而容器则是镜像的快照。所以在容器里看到的文件系统是资源池上基本设备的文件系统的快照,初始不为容器分配空间:1)当写入新文件时,通过用时分配为容器快照分配新的块并写入数据;2)当要修改已有文件时,使用CoW为容器快照分配块空间,将要修改的数据复制到在容器快照中新的块里再进行修改。

    如上图所示,Docker 主机上有两个容器在运行,分别是 ubuntu 和 busybox。每个镜像层都是下面层的快照,每个镜像的最底层是池中base device 的快照。在运行容器时,容器是它所依赖的镜像的快照。

    2.1.6、Docker存储驱动的对比及适应场景

    如下图所示,为Docker存储驱动的对比以及适用场景。

    2.2、数据卷

    当容器删除后,任何写到容器但没有保存到数据卷的数据都会和容器一同删除。为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念。简单理解来看,Volume就是一个目录或者文件,它可以绕过默认的联合文件系统或存储驱动,而以正常的文件或者目录的形式存在于宿主机上。这增强了数据卷与存储驱动程序控制的独立性,当容器被删除时,存储在数据卷中的任何数据都会保留在 Docker 主机上。

    数据卷作为Docker 主机文件系统上的一个目录或文件,直接挂载到容器中,而不被存储驱动程序控制。对数据卷的读写操作绕过存储驱动程序,并以本地主机速度运行。可以将任意数量的数据卷装入容器,多个容器也可以共享一个或多个数据卷。上图显示了一个运行两个容器的独立 Docker 主机:每个容器都存在于Docker主机本地存储区/var/lib/docker/内其自己的地址空间中,在主机/data 目录上还有一个共享数据卷,作为数据卷被直接挂载到两个容器中。

    Docker数据卷可以将容器以及容器产生的数据分离开来,从而使得删除容器时,不会影响相关的数据。可以通过两种方式来初始化Volume:数据卷、数据卷容器:

    • 数据卷:数据卷的使用类似于 Linux 下对目录进行 mount,挂载一个主机目录作为数据卷,你想在容器中使用主机上的某个目录,你可以通过-v参数来指定:docker run -v /host/path:/some/path ;
    • 数据卷容器:授权一个容器访问另一个容器的Volume,使用--volumes-from参数来执行。针对持久性数据在容器间共享的情况,可以通过创建一个数据卷容器,然后从此容器上挂载数据。常见的使用场景是使用纯数据容器来持久化数据库、配置文件或者数据文件等。

    容器持久化数据卷方案中持久层的生产价值,不是通过弹性,而是可以拓展数据卷通过灵活可编程,例如通过设计的API来扩展存储。Docker已发布容器卷插件规范,允许第三方厂商的数据卷在Docker引擎中提供数据服务。这种机制意味着外置存储可以超过容器的生命周期而独立存在,且各种存储设备只要满足接口API标准,就可接入Docker容器的运行平台中。即现有的各种存储可以通过简单的驱动程序封装,从而实现和Docker容器的对接。可以说,驱动程序实现了和容器引擎的北向接口,底层则调用后端存储的功能完成数据存取等任务。目前已经实现的Docker Volume Plugin中,后端存储包括常见的NFS,GlusterFS和块设备等。

    2.3、容器存储的应用以及与传统存储的比较

    2.3.1、容器存储的应用场景

    容器持久化的解决方案在于需要不需要保存数据,以及保存在哪?

    • 当数据保存在本地(故障率高):那就是本地硬盘,即通过上述容器存储驱动以及数据卷来对本地数据进行存取操作。
    • 当数据保存在外部:1)分布式系统(并行处理),那么就需要分布式系统支持Volume Plugin;2)共享存储(高可用),那么外部存储需要支持Volume Plugin的驱动程序,问题即转变为选择哪种存储/存储软件,以及其是否支持Volume Plugin。

    2.3.2、容器存储与传统存储的比较

    1、容器存储

    容器存储简单理解来看其实就是通过存储驱动以及数据卷实现对容器镜像、容器管理数据、以及容器应用数据的存储,其本质上仍然需要依赖传统的文件系统来支撑。

    对于存储驱动,其对应的挂载目录均需要使用对应的后端文件系统进行格式化挂载管理,如下图所示;而对于数据卷,其依赖于主机文件系统的管理操作。

    2、文件系统存储、块存储和对象存储,三种存储系统实现容器持久存储对比?

    这三者都是通过实现Volume Plugin来支持,与标准的文件系统,块,对象在使用上的差别是类似的:

    • 块存储比较快,扩展弱,价格贵
    • 文件系统存储性能中等,扩展强,价格中等,分布式环境可用
    • 对象存储性能弱,扩展极强,价格低,一般针对分布式环境或者云环境。

    所以从实现上是没多大区别的,只要Driver支持。

    目前看来,块存储的应用最为广泛,主要是块存储的技术储备最多,并且广泛使用。对象存储次之,现在对象存储基于S3/swift/ OSS接口,随着公有云的普及,被广泛使用。文件存储,目前还是NAS传统存储的天下,性能和可靠性最为稳定,cephFS目前还是不足以满足生产环境的使用。

    展开全文
  • 31 | 容器存储实践:CSI插件编写指南我们这次编写的 CSI 插件的功能,就是:让我们运行在 DigitalOcean 上的Kubernetes 集群能够使
  • 同时对处于主导地位的、较为流行的开源存储项目进行阐述,包括SPDK、ISA-L、OpenSDS、Ceph、OpenStack Swift与Cinder、容器存储等。本书内容基本不涉及具体源码,主要围绕各个项目的起源与发展、实现原理与框架、要...
  • 因此当使用kubernets或其他基于docker的服务时,需要修改容器默认的存储位置到磁盘空间分配较大的目录中. <1>查看docker当前root目录 docker info |grep -i root <2>停止docker服务 systemctl stop...
  • docker 镜像与容器存储结构分析 2014 年10 月24 日 Docker 是一个开源的应用容器引擎主要利用linux 内核namespace 实 现沙盒隔离用cgroup 实现资源限制 Docker 支持三种不同的镜像层次存储的drivers: ...
  • C++序列容器存储智能指针详解

    千次阅读 2019-09-14 10:13:45
    通常用容器保存指针比保存对象更好,而且大多数时候,保存智能指针比原生指针好。下面是一些原因: 在容器中保存指针需要复制指针而不是它所指向的对象。复制指针通常比复制对象快。 在容器中保存指针可以得到多态...
  • Docker 容器技术 — 容器存储

    千次阅读 多人点赞 2020-10-02 10:40:46
    文章目录目录容器存储数据卷管理挂载时创建卷创建卷后挂载数据容器管理 容器存储 数据卷管理 核心选项: -v 宿主机目录:指定挂载到容器内的目录。 映射多个宿主机目录,只需要多写几个 -v 即可。 挂载时创建卷 ...
  • kubernetes中有3个功能接口,分别是容器网络接口CNI、容器运行时接口CRI和容器存储接口CSI。本文会对CSI是什么、为什么要有CSI、CSI系统架构做介绍,对CSI所涉及的k8s对象与组件进行介绍,以及k8s对CSI存储进行相关...
  • Docker 容器存储的定义 Volume 与 Volume Plugin 摘要 Docker 技术自从诞生以来已经带来了一场云计算的革命其进展速度之快接受程度之高让人惊叹国内 已经有不少介绍 Docker 技术的文章它的生态网络管理构建应用都...
  • Docker默认安装的情况下,会使用 /var/lib/docker/ 目录作为存储目录,用以存放拉取的镜像和创建的容器等。不过由于此目录一般都位于系统盘,遇到系统盘比较小,而镜像和容器多了后就容易尴尬,这里说明一下如何修改...
  • k8s1.8引入的特性,限制容器存储空间的使用;对于容器资源隔离来说,非常有用,万一应用程序失控,写大量日志把node空间写满,影响就大了。 使用很简单,和cpu\memcache一样,如: resources: requests...
  • C++常用容器内存分布情况

    千次阅读 2022-04-29 09:42:41
    首先,强调一点,对象(如容器)本身的存储位置和其数据的存储位置往往不是在一起的,比如堆栈存储分离的模式。 先举个例子:vector和array vector和array array是c++11之后新加的容器类型,他比vector更加轻便...
  • docker-sftp-google-storage-s3 这个 docker 容器将您的 GoogleStorage/S3 存储桶安装到通过 chroot SFTP 公开的文件夹中。 之后,您可以直接 SFTP 您的存储桶!建立形象 git clone ...
  • 随着我们镜像、启动的容器实例开始增多的时候,磁盘所消耗的空间也会越来越大,所以我们必须要做数据迁移和修改docker服务的默认存储位置路径;有多种方式是可以修改docker默认存储目录路径的,但是最好是在docker...
  • docker拉取的镜像默认存储在根路径(/var/lib/docker),但根路径存储空间有限。我们可以通过挂载更大的磁盘,将docker数据迁移到挂载磁盘上, 以解决空间不足问题。具体方法如下: 方法 假设挂载磁盘在/usr1,需要将...
  • 本文为该系列文章的第二篇,会对容器存储的相关概念进行讲述,欢迎大家在留言区参与讨论。 相关文章推荐: 云原生存储详解:云原生应用的基石 云原生存储详解:容器存储与 K8s 存储卷 云原生存储的两个关键领域:...
  • Docker修改容器默认存储路径

    千次阅读 2022-02-21 15:37:04
    随着我们镜像、启动的容器实例开始增多的时候,磁盘所消耗的空间也会越来越大,所以我们必须要做数据迁移和修改docker服务的默认存储位置路径;有多种方式是可以修改docker默认存储目录路径的,但是最好是在docker...
  • 查看docker容器储存地址 sudo docker info | grep Docker 或者 docker info | grep Docker
  • 使用容器存储对象时,最好使用对象指针类型,如:QList<TestObj*>,而不要使用 QList 这样的定义。建议采用 智能指针QSharedPointer 或 为对象设置parent 的方法来管理内存,避免内存泄露。
  • 镜像好比ISO文件,容器好比安装好的Windows操作系统,我们操作容器就像在操作一台独立的linux虚拟机一样,而ISO镜像安静的躺在某个...本文带你深入了解容器的构成,以及容器在宿主机中的存储位置等,赶快来围观吧~...
  • C++常用容器在内存中的存储分析

    千次阅读 2021-05-19 16:37:19
    在栈区定义容器变量,变量本身存储在栈区,但是变量存储的数据在堆区; 在堆空间定义的容器变量,变量本身存储在堆区,存储的数据也在堆区; 例子: struct SQL{ set<int> s; vector<int> v; };//...
  • 6.5.82、气体灭火系统灭火剂储存容器进场测试记录

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 630,795
精华内容 252,318
关键字:

容器存储

友情链接: pyramidLK.rar