圈起来的box.有什么意义 ,js判断如果没有图片中的box.,而是直接写成v=volume()会怎样?

51CTO旗下网站
【Docker进阶】从五方面深入理解Docker Volume 的工作原理
本文主要介绍了Docker Volume的作用机制,是Docker入门教程的延伸, 作者通过从数据的共享、数据容器、备份、权限以及删除Volumes五方面深入介绍了Volumes的工作原理。
作者:翻译:田浩来源:dockerone| 15:25
从Docker IRC(网络即时聊天)频道以及stackoverflow(译者注:有关代码问题的问答平台:大部分代码exception问题可以复制-&粘贴-&搜索来找到答案)的问题来看,Docker volumes是如何工作的这个问题上还存在很多混淆。在这篇文章中我会尽最大努力来解释Volumes是如何工作的,并展示一些最佳实践。虽然这篇文章主要是针对泊坞窗的用户几乎没有的知识量,尽管这篇文章主要是针对那些对Volumes不了解的Docker用户,当然有经验的用户也可以学一些Volumes的很多人不知道的细微之处的知识。
为了了解什么是Docker Volume,首先我们需要明确Docker内的文件系统是如何工作的。Docker镜像被存储在一系列的只读层。当我们开启一个容器,Docker读取只读镜像并添加一个读写层在顶部。如果正在运行的容器修改了现有的文件,该文件将被拷贝出底层的只读层到最顶层的读写层。在读写层中的旧版本文件隐藏于该文件之下,但并没有被不破坏 - 它仍然存在于镜像以下。当Docker的容器被删除,然后重新启动镜像时,将开启一个没有任何更改的新的容器 - 这些更改会丢失。此只读层及在顶部的读写层的组合被Docker称为Union File System(联合文件系统)。
为了能够保存(持久)数据以及共享容器间的数据,Docker提出了Volumes的概念。很简单,volumes是目录(或者文件),它们是外部默认的联合文件系统或者是存在于宿主文件系统正常的目录和文件。
初始化Volumes有两种方式,对于理解来说一些细微的差别很重要。我们可以用在运行时使用-v来声明
$&docker&run&-it&--name&container-test&-h&CONTAINER&-v&/data&debian&/bin/bash&root@CONTAINER:/#&ls&/data&root@CONTAINER:/#&
这将在容器内创建路径/data,它存在于联合文件系统外部并可以在主机上直接访问。任何在该镜像/data路径的文件将被复制到volume。我们可以使用docker inspect命令找出Volume在主机存储的地方:
$&docker&inspect&-f&{{.Volumes}}&container-test&
你会看到以下类似内容:
map[/data:/var/lib/docker/vfs/dir/cde167197ccc3e138a14f1a4f...b32cec92e]&
这说明Docker把在/var/lib/docker下的某个目录挂载到了容器内的/data目录下。让我们从主机上添加文件到此文件夹下:
$&sudo&touch&/var/lib/docker/vfs/dir/cde167197ccc3e13814f...b32ce/test-file&
进入我们的容器内可以看到:
$&root@CONTAINER:/#&ls&/data&test-file&
改变会立即生效只要将主机的目录挂载到容器的目录上。我们可以在Dockerfile中通过使用VOLUME指令来达到相同的效果:
FROM&debian:wheezy&VOLUME&/data&
但还有另一件只有-v标志能做到而Dockerfile是做不到的事是在容器上挂载指定的主机目录。例如:
$&docker&run&-v&/home/adrian/data:/data&debian&ls&/data&
该命令将挂载主机的/home/adrian/data目录到容器内的/data目录上。任何在/home/adrian/data目录的文件都将会出现在容器内。对于在主机和容器之间共享文件这是非常有帮助的,例如挂载需要编译的源代码。为了保存可移植性(并不是所有的系统的主机目录都是可以用的),挂载主机目录不用从Dockerfile指定。当使用-v参数的形式时并不镜像目录下的所有文件都被复制进Volume中。
从一个容器访问另一个容器的volumes,我们只用使用-volumes-from参数来执行docker run。
$&docker&run&-it&-h&NEWCONTAINER&--volumes-from&container-test&debian&/bin/bash&root@NEWCONTAINER:/#&ls&/data&test-file&root@NEWCONTAINER:/#&
值得注意的是不管container-test运没运行,它都会起作用。Volume直到容器没有连接到它才会被删除。
使用纯数据容器来持久数据库、配置文件或者数据文件等等是普遍的做法。官方的文档就讲解的不错。例如:
$&docker&run&--name&dbdata&postgres&echo&&Data-only&container&for&postgres&&
该命令将会创建一个包含已经在Dockerfile里定义过Volume的postgres镜像,运行echo命令然后退出。当我们运行docker ps命令时,echo是有用的作为我们识别某镜像的用途。我们可以用-volumes-from命令使用其他容器的Volume:
$&docker&run&-d&--volumes-from&dbdata&--name&db1&postgres&
使用数据容器两个要点:
不要不管运行中的数据容器,这是无意义的浪费资源
不要为了数据容器来使用&最小的镜像&如busybox或scratch。只要使用数据库镜像本身就可以了。如果你已经有了该镜像,那么它并不需要花费额外的空间并且它还允许镜像内的数据来做Volume
如果你在用数据容器,做备份是相当容易的:
$&docker&run&--rm&--volumes-from&dbdata&-v&$(pwd):/backup&debian&tar&cvf&/backup/backup.tar&/var/lib/postgresql/data&
该示例应该会将Volume里所有的东西压缩为一个tar包(官方的postgres Dockerfile定义了一个Volume在/var/lib/postgresql/data目录下)
权限与许可
通常你需要设置Volume的权限或者为Volume初始化一些默认数据或者配置文件。要注意的关键点是,在Dockerfile的VOLUME指令后的任何东西将不能改变该volume,比如:
FROM&debian:wheezy&RUN&useradd&foo&VOLUME&/data&RUN&touch&/data/x&RUN&chown&-R&foo:foo&/data&
该Docker file预期所料将不会工作,我们希望touch命令在镜像的文件系统上运行,但是实际上它是在一个临时容器的Volume上运行。如下所示:
FROM&debian:wheezy&RUN&useradd&foo&RUN&mkdir&/data&&&&touch&/data/x&RUN&chown&-R&foo:foo&/data&VOLUME&/data&
Docker是足够聪明的复制存在挂载于镜像Volume下的文件到Volume下,并正确地设置权限。如果您指定Volume的主机目录(使主机文件不小心被覆盖)将不会出现这种情况。
如果你能设置权限在RUN指令,那么你将不得不在容器创建后使用CMD或ENTRYPOINT脚本来执行。
删除Volumes
该功能比大多数人意识到的可能更微妙一些。如果你已经使用docker rm来删除你的容器,可能有很多的孤立的Volumes在占用着那些空间。
Volume只有在下列情况下才能被删除:
该容器可以用docker rm -v来删除且没有其他容器连接到该Volume(以及主机目录是也没被指定为Volume)。注意,-v是必不可少的。
该-rm标志被提供给docker run的
除非你已经很小心的,总是像这样来运行容器,否则你将会在/var/lib/docker/vfs/dir目录下得到一些僵尸文件和目录,并且还不容易说出他们到底代表什么。
原文链接:
【编辑推荐】
【责任编辑: TEL:(010)】
大家都在看猜你喜欢
头条热点热点关注聚焦
24H热文一周话题本月最赞
讲师:12532人学习过
讲师:772人学习过
讲师:255人学习过
精选博文论坛热帖下载排行
本书描述了怎样应用面向对象的概念来进行.NET应用程序的架构、设计和开发。作者将重点放在了面向业务的对象,即业务对象和怎样在包括Web和...
订阅51CTO邮刊K线图里面volume和DMA指标有什么联系?_百度知道
K线图里面volume和DMA指标有什么联系?
请教高手一下,K线图里面volume和DMA指标有什么联系?非常感谢您解答
我有更好的答案
VOLUME:成交量成交量--指当天成交的股票总手数(1手=100股)。一般情况下,成交量大且价格上涨的股票,趋势向好。成交量持续低迷时,一般出现在熊市或股票整理阶段,市场交投不活跃。成交量是判断股票走势的重要依据,对分析主力行为提供了重要的依据。投资者对成交量异常波动的股票应当密切关注。 其中总手为到目前为止此股票成交的总数量,现手为刚刚成交的那一笔股票数量。单位为股或手。成交量可以在分时图中绘制,也可以在日线图、周线图甚至月线图中绘制。一般行情分析软件中,上面的大图是主图,下面的两个小图,其中一个就是成交量或成交额。国内A股市场是资金推动的市场,市场成交量的变化反映了资金进出市场的情况,成交量是判断市场走势的重要指标,但在国外成熟市场,成交量主要是用于印证市场走势。成交量的大小直接表明了多空双方对市场某一时刻的技术形态最终的认同程度。江恩十二条买卖规则中的第七条就是观察成交量,指出研究目的是帮助决定趋势的转变,因此市场上有“量是价的先行,先见天量后见天价,地量之后有地价”之说。不过也不能把成交量的作用简单化、绝对化,由于国内股市中存在大量的对敲行为,成交量某种程度上也能骗人,因此还要结合实际情况具体分析。量虽是价的先行,但并不意味着成交量决定一切,在价、量、时、空四大要素中,价格是最基本的出发点,离开了价格其它因素就成了无源之水、无本之木。成交量可以配合价格进行研判,但决不会决定价格的变化。dma指标即平行线差指标,和移动平均线、MACD一样用来判断趋势的。dma指标使用方法一,dma指标原理:DMA指标是一种趋势分析指标,其依据快慢两条移动平均线的差值情况来分析价格趋势。它主要通过两条移动线的差值来判断买入卖出能量大小以及未来趋势变化。其属于中短期指标。是对MACD技术指标的一种改良,构造简单,信号明确。二,DMA指标特征:发掘中线机会,成功率较高,收益率也不错,仅在长期牛皮市中使用效果较差。三,dma指标适合人群:中线稳健型;低风险、高收益型四,dma指标应用方法:1,dma由三个参数决定:默认为(10,50,10),参数可以在上图的左上角画圈圈的地方看到。2,dma由二条线组成:一条是白线DIF,另一条黄线AMA,在左上角后面跟着的就是。图中也可以看出来是白线还是黄线。3,买入:如图所示,白线上穿黄线形成金叉为买入信号;白线下穿黄线形成死叉为卖出信号。4,dma指标背离使用:dma指标背离一般情况下很少出现,但出现了,就是一种明确的信号。准确率较高。DMA指标背离指的是两条线与K线图的关系。顶背离:K线图一顶比一顶高,但DMA白线一顶比一顶低。卖出信号底背离:K线图一底比一底低,但DMA白线一底比一底高。买入信号5,DMA指标可以修改参数。方法:点击白线或黄线右健:调整指标参数,里面设置成自己喜欢的。五,dma指标的缺陷:只要是指标,都不可能那么精确,且都有滞后性,所以大家在使用时,需要结合其它指标共同辅助操作。以上内容是DMA指标的简单入门用法,希望能帮到你,但DMA与MACD一样有滞后性。必须多个指标同时使用。
采纳率:88%
量和DMA没多大联系,关系是肯定有的,DMA是根据不同周期的平均线差值做平滑处理得出的,详细
DMA是根据不同周期的平均线差值做平滑处理得出的,跟成交量vol没有关系。
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
k线图的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。已解决问题
股线图中MA和VOLUME还有MACD分别是什么意思啊
浏览次数:1317
用手机阿里扫一扫
最满意答案
ma:均线,volume:成交量,macd:平滑移动异同平均线&红棒(线)表示上涨,蓝棒(线)表示下跌。&红棒的下缘价位是当日开盘价,上缘价位是当日收盘价&红棒上方如还伸出小红棒,其顶端价位是当日盘中最高价&红棒下方如有垂出小红棒,其底端价位是当日盘中最低价&蓝棒的下缘价位是当日收盘价,上缘价位是当日开盘价&蓝棒上方如还伸出小蓝棒,其顶端价位是当日盘中最高价&蓝棒下方如有垂出小蓝棒,其底端价位是当日盘中最低价&VOL与VOLUME当指成交量,&VOL(5.10)表示成交量的5日、10日平均量&MA5一般代表五日移动平均&MACD是平滑异同移动平均&DIF是MACD的移动平均&DEA是DIF与MACD的差,一般称为柱状体&
答案创立者
以企业身份回答&
正在进行的活动
生意经不允许发广告,违者直接删除
复制问题或回答,一经发现,拉黑7天
快速解决你的电商难题
店铺优化排查提升2倍流量
擅长&nbsp 店铺优化
您可能有同感的问题
扫一扫用手机阿里看生意经
问题排行榜
当前问题的答案已经被保护,只有知县(三级)以上的用户可以编辑!写下您的建议,管理员会及时与您联络!
server is ok主题信息(必填)
主题描述(最多限制在50个字符)
申请人信息(必填)
申请信息已提交审核,请注意查收邮件,我们会尽快给您反馈。
如有疑问,请联系
CSDN &《程序员》研发主编,投稿&纠错等事宜请致邮
你只管努力,剩下的交给时光!
如今的编程是一场程序员和上帝的竞赛,程序员要开发出更大更好、傻瓜都会用到软件。而上帝在努力创造出更大更傻的傻瓜。目前为止,上帝是赢的。个人网站:www.xttblog.com。个人QQ群:、
个人大数据技术博客:https://www.iteblog.com
本文根据有容云技术实施团队原创分享内容整理。对Docker技术感兴趣、或对本文中细节需继续探讨的朋友,欢迎加入我们参与讨论!
特别鸣谢中生代技术群分享支持。注:本期分享由张朝潞原创,有容云整理发布,转载请注明出处作者介绍:
张朝潞,有容云(Yourun Cloud)平台存储架构师。曾工作于UIT,华三,腾讯,专注分布式存储的研究和开发,对云计算存储解决方案方面有很深的技术造诣和行业理解。本次交流将与大家分享Docker Volume plugin相关的内容。今日主题是窥探Docker中的Volume plugin内幕。因为应用数据对安全,可用性,共享,性能等方面的要求和Root Image的要求完全不一样,所以Docker并不推荐采用Root Image的存储方式来存储应用数据,而是采用了Volume这样一个独立的数据访问接口。应用通过Volume去访问相关的数据,Volume的实现和CoW的分层文件系统完全独立,通过Volume plugin机制可轻易驱动外部存储。下面我们就围绕Volume Plugin
Introduction、Container and Volume、Docker Volume Plugin、自定义Volume Plugin四个方面来展开。一. Volume Plugin Introduction
通过Volume机制,Docker可以轻易地将主机目录挂载到容器中;通过Docker的Volume Plugin机制,使Docker能够方便地整合第三方存储,为Docker提供Volume。
出处链接:二. Container and Volume1 .Container如何使用Volume?
Volume机制可以使容器访问存储都使用统一的接口(文件接口),对于容器中的进程来说,Volume就是一个已挂载的目录,容器内进程使用该目录就与普通目录一样。Docker使用Container结构管理容器,Container结构中有map类型的MountPoints变量,用于存储Container中所有已挂载的Volume即是MountPoint结构,MountPoint结构保存挂载目录和Volume结构的基本信息,并且管理目录的权限控制、挂载传播方式等特性。Volume是个interface,Docker实现两种Volume:①基于主机文件系统。②基于Volume Plugin。
Container中的Volume2.基于主机文件系统提供Volume
容器启动:docker run -i -v /data
ubuntu:latest /bin/bash
容器内看到的挂载信息:/etc/resolv.conf、/etc/hostname和/etc/hosts三个文件是为了解决每个Container都拥有自己的Hostname和DNS配置,使用了bind mount将主机的文件,挂载到Container内部。/data也是使用了同样的方式将主机的目录挂载到Container中。下面是主机挂载到Container的文件:
查看/dev/disk/by-uuid/88f22c9e-9d5d-4c7e-8984-eba是链接文件指向/dev/sda2,这是主机的根目录文件系统。3 .Container中的Volume
容器启动:
docker run -i -v cvol1:/data –volume-driver=convoy ubuntu:latest /bin/bash
将volume: dockervol挂载到容器目录/data
容器内看到的挂载信息:
此时挂载卷信息:三. Docker Volume Plugin1. Docker Volume Plugin框架
Docker volume框架
1.) Docker Daemon对Volume的管理
Docker Daemon中的Volume如上图,Docker Daemon结构中有个成员Volumes,类型是VolumeStore类型,包含一组管理Volume的函数:Create、Remove、List、Get、Refs …。通过两个变量,管理Container和Volume的关系。
names : map结构,Key是Volume的name,value是实现Volume接口的结构对象。存储该Daemon内所有的Volume。
ReFS: map结构,key是volume的name,value是string数组保存引用该Volume的Container ID。
Docker Daemon通过Volumes变量,就可以管理所有的Volume,提供如下命令:
2.) docker volume 管理
基于本地文件系统的volume框架Docker提供两个接口Volume和Driver,所有提供给Docker使用的Volume必须实现Volume接口。后端驱动需要实现Driver接口。Driver是对提供出去的Volume进行管理。目前Docker实现了两种Volume &Driver。① 基于本地文件系统的Volume可以在执行Docker create或Docker run时,通过-v参数将主机的目录作为容器的数据卷。这部分功能便是基于本地文件系统的volume管理。上图中蓝色部分LocalVolume和Root。这两个结构就是对主机目录和文件进行管理,具体的对应关系如下图:
从上图可以看出,基于本地文件系统的卷管理,Driver便是卷的根目录/var/lib/docker/volumes。一个卷就是根目录下的一个子目录。② 适配Plugin的Volume
Docker为了支持第三方存储方案,在1.8版本引入Volume Plugin机制,Volume Adapter和Volume Driver Adapter分别实现了接口Volume和Driver接口,用于表示由Plugin提供的Volume和Plugin driver。在下一小节详细描述。基于本地文件系统的Volume框架中,全局变量drivers保存了所有注册到Docker Daemon的Driver。Docker Daemon需要对Volume进行管理操作时,通过GetDriver函数从drivers变量中获取指定名称的Driver,通过Driver可以通过Create,Remove,List,Get对Driver中Volume进行管理。通过Get函数获取Volume结构,可以对卷进行管理操作:Name,DriverName,Path,Mount,Unmount。3 .) docker plugin 实现原理
Volume Plugin实现原理
① Docker Plugin机制 上一节已经说过Docker针对Volume Plugin实现了两个适配类型Volume Driver Adapter和Volume Adapter。
Volume Driver Adapter : 实现Driver接口,用于抽象各种Plugin的驱动,该类型可以适配所有符合规范的Volume Plugin,对Plugin进行管理。
Volume Adapter :
实现Volume接口,用于抽象所有Plugin提供的Volume,该类型可以适配所有符合规范的Volume Plugin提供的类型,对Volume进行管理。
通过抽象,对于Plugin和其提供的Volume,Docker Daemon结构和Container结构使用上述两个适配类型,对Plugin和Volume进行管理和使用。
上述两个类型都有一个Volume Driver Proxy结构变量proxy,用于与Plugin进行通信。Volume Driver Proxy结构实现了与plugin通信的接口volume Driver,提供Create、Remove、Path、Mount、Unmount、List、Get接口与通信。Volume Driver Proxy结构的client变量,使用这个变量与Plugin Daemon进行通信。client变量是Plugin结构中的Client变量是Client结构类型,包含了http.Client类型对象。上图中左下方,Plugins结构类型的全局变量Storage保存所有被Docker Daemon发现的Plugin结构,Plugin结构代表外部插件。
② Docker Plugin的发现过程
Docker Daemon通过Unix域套接字与Plugin Daemon进行通信。所以Plugin需要让Docker Daemon知道Plugin的Unix域套接字文件的路径。再执行命令:docker run … -v volumename:/data –volume-driver=convoy发现步骤:
Docker Daemon首先会在/run/docker/plugins搜索对应的套接字文件,套接字文件名必须和Volume Driver名一致,如上述命令,便是搜索convoy.sock。
如果上一步搜索不到,则到/etc/docker/plugins和/usr/lib/docker/plugins两个目录搜索spec或json文件。文件中指定套接字文件的URL。如:unix:///var/run/convoy/convoy.sock 。
根据前面两步发现的Unix域套接字URL,构建Plugin对象,并将新建对象加入到全局变量storage的Plugins字段中。
③ Docker Volume Plugin的使用
执行docker run命令时,指定参数--volume-driver=convoy。Docker Daemon会先从storage.plugins中寻找Plugin结构,如果没有找到,就发起②的发现流程。找到则直接使用Client构建volume Driver Proxy。
④ Docker Daemon与Plugin Daemon通信的API
前面已经提到过,Docker Daemon和Plugin Daemon基于Unix域套接字,使用Restful API进行通信,下面是详细的API:
Plugin.Activate : 发送一个请求到Plugin,Plugin返回其类型,如convoy就返回Volume Driver。相当于Docker和Plugin Daemon直接的连接建立的握手报文。
VolumeDriver.Create : 创建一个卷,Docker会发送卷名称和参数发送给插件,卷插件会根据Docker发送过来的参数创建一个卷,并和这个卷名称关联。
VolumeDriver.Mount : 挂载一个卷到本机,Docker会把卷名称和参数发送给参数。插件会返回一个本地路径给Docker,这个路径就是卷所在的位置。Docker在创建容器的时候,会将这个路径挂载到容器中。
VolumeDriver.Path : 一个卷创建成功后,Docker会调用Path API来获取这个卷的路径,随后Docker通过调用Mount API,让插件将这个卷挂载到本机。
VolumeDriver.Unmount : 当容器退出时,Docker daemon会发送Umount API给插件,通知插件这个卷不再被使用,插件可以对该卷做些清理工作(比如引用计数减一,不同的插件行为不同)。
VolumeDriver.Remove : 删掉特定的卷时调用,当运行”docker rm -v”命令时,Docker会调用该API发送请求给插件。
VolumeDriver.List :
执行docker volume ls命令时,会向plugin发送该请求,获取volume list。
VolumeDriver.Get :
获取Plugin Volume的详细信息。
四. 自定义Volume Plugin
为了方便实现Volume Plugin,Docker提供go-plugins-helper包(),提供基础的功能,仅仅需要实现一个接口volume.Driver,并启动http server便可。例子:GlusterFS就是使用这个包,基于GlusterFS提供Volume。关于Docker存储方面的内容,我们之前分享过一篇叫《Docker容器对存储的定义(Volume 与 Volume Plugin) 》的文章,感兴趣的朋友可以关注有容云搜索下。好的,我们今天的分享先告一个段落,谢谢大家!温馨提示:对Docker容器技术或容器生产实施感兴趣的朋友欢迎加群讨论。我们汇集了Docker容器技术落地实施团队精英及业内技术派高人,在线为您分享Docker技术干货。我们的宗旨是为了大家拥有更专业的平台交流Docker实战技术,我们将定期邀请嘉宾做各类话题分享及回顾,共同实践研究Docker容器生态圈。加微信群方法:
1.关注【有容云】公众号
2.留言”我要加群”

我要回帖

更多关于 意义box 的文章

 

随机推荐