《那年花开月正圆全集bt》什么有没有全集啊,之前看腾讯开播盛典说吴聘活不过八级,不过我觉得按照剧情进度

还没有账号?
其他方式登录
滑动完成验证
重发验证码
手机短信验证码已发送,请查收!
有一位课程导师想与你聊聊
客服热线 400-862-8862深入理解Docker Volume(二)_Docker_传送门
深入理解Docker Volume(二)
Docker的难点之一就是Volume的使用,这也是很多人都会问到的问题。所以让我们一起来深入看看Docker Volume是如何工作的。很多人都对Volume有一个误解,他们认为Volume是为了持久化。如此想法是因为他们觉得容器不能持久化,所以Volume应该是为了满足这个需求而设计的。其实容器会一直存在,除非你删除命令移除它们:这可能来自于容器不是持久的想法,这样确实是不对的。容器的持久直到您删除他们,并且你只能这样做:docker rm my_container如果您没有执行此命令,那么你的容器会一直存在,依旧可以启动、停止等。如果你找不到你的容器,可以运行此命令:docker ps -adocker ps只能显示正在运行的容器,但是容器也会处于是停止状态,这种情况下,上面的命令(译者注:-a参数会列出所有的容器)会显示所有的容器,无论它们处于什么状态。docker run …命令可以有很多的组合(译者注:它提供了Docker容器从创建到启动的所有功能),它会创建一个新的容器,然后启动它。综上,再次声明:Volume并不是为了持久化。什么是VolumeVolume可以将容器以及容器产生的数据分离开来,这样,当你使用docker rm my_container删除容器时,不会影响相关的数据。Volume可以使用以下两种方式创建:在Dockerfile中指定VOLUME /some/dir当执行docker run -v /some/dir命令来指定无论哪种方式都是做了同样的事情。它们告诉Docker在主机上创建一个目录(默认情况下是在/var/lib/docker下),然后将其挂载到指定的路径(例子中是:/some/dir)。当删除使用该Volume的容器时,Volume本身不会受到影响,它可以一直存在下去。如果在容器中不存在指定的路径,那么该目录将会被自动创建。你可以告诉Docker同时删除容器和其Volume:docker rm -v my_container有时候,你想在容器中使用主机上的某个目录,你可以通过其它的参数来指定(译者注:注意冒号前面的和后面的):docker run -v /host/path:/some/path …这明确地告诉Docker使用指定的主机路径来代替Docker自己创建的根路径并挂载到容器内指定的路径(以上例子为/some/path)。需要注意的是,这种方式同样支持文件。在Docker术语中,这通常被称为bind-mounts(虽然技术层面上是这样讲的,但是实际的感觉是所有的Volume都是bind-mounts的)。如果主机上的路径不存在,目录将自动在给定的路径中创建。对待bind-mount Volume和一个“正常”的Volume有一点不同,它不会修改主机上那些非Docker创建的东西:一个“正常”的Volume,Docker会自动将指定Volume路径(如上面的示例/some/path)上的数据复制到由Docker创建的新的目录下,如果是“bind-mount”,Volume就不会这样做。(译者注:这样做会将主机上的目录复制到容器)当你执行docker rm -v my_container命令时,“bind-mount” 类型的Volume不会被删除。容器也可以与其它容器共享Volume。docker run –name my_container -v /some/path …docker run –volumes-from my_container –name my_container2 …上面的命令将告诉Docker从第一个容器挂载相同的Volume到第二个容器,它可以在两个容器之间共享数据。如果你执行docker rm -v my_container命令,而上方的第二容器依然存在,那Volume不会被删除,如果你不使用docker rm -v my_container2命令删除第二个容器,那它会一直存在。Dockerfiles里的VOLUME正如前面提到的,Dockerfile中的VOLUME指令也可以做同样的事情,类似docker run命令中的-v参数(除了你不能在Dockerfile指定主机路径)。也正因为如此,构建镜像时可以得到惊奇的效果。在Dockerfile中的每个命令都会创建一个新的用于运行指定命令的容器,并将容器提交到镜像,每一步都是在前一步的基础上构建。因此在Dockerfile中ENV FOO=bar等同于:cid=$(docker run -e FOO=bar )docker commit $cid下面让我们来看看这个Dockerfile的例子发生了什么:[{{FROM debian:jessieVOLUME /foo/barRUN touch /foo/bar/baz}}}docker build -t my_debian .我们期待的是Docker创建一个名为my_debian并且Volume是/foo/bar的镜像,以及在/foo/bar/baz下添加了一个空文件,但是让我们看看等同的CLI命令行实际上做了哪些:cid=$(docker run -v /foo/bar debian:jessie)image_id=$(docker commit $cid)cid=$(docker run $image_id touch /foo/bar/baz)docker commit $(cid) my_debian真实过程可能并不是这样,但是类似。在这里,/foo/bar会首先创建,所以我们每次通过这个镜像启动一个容器,都会有一个空的/foo/bar目录。正如前面所说,Dockerfile中每个命令都会创建一个新容器。也就是说,每次都会创建了一个新的Volume。由于例子的Dockerfile中是先指定Volume的,所以当执行touch /foo/bar/baz命令的容器创建时,一个Volume会被挂载到了/foo/bar,然后baz才能被写入此Volume,而不是实际的容器或镜像的文件系统内。所以,牢记Dockerfile中VOLUME指令的位置,因为它在你的镜像内创建了不可改变的目录。docker cp(#8509),docker commit和docker export还不支持Volume(在文章截稿时)。目前,在容器的创建/销毁期间来管理Volume(创建/销毁)是唯一的方式,这有点古怪,因为Volume是为了分离容器内的数据与容器的生命周期。Docker团队正在处理这个问题,但尚未合并(#8484)。如果您想了解Docker Volume的更多功能,请移步这里。由于微信不支持在文中插入超链接,所以更多信息请点击左下角的阅读原文链接。
觉得不错,分享给更多人看到
Docker 微信二维码
分享这篇文章
Docker 最新头条文章
Docker 热门头条文章2858人阅读
Docker(43)
深入理解Docker Volume(一)
想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的.Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载镜像层并在其上添加一个读写层.如果运行中的容器修改了现有的一个已存在的文件,那该文件将会从读写层下的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏.当删除Docker容器,并通过该镜像重新启动时,之前的更改将会丢失.在Docker中,只读层以及在顶部的读写层的组合被称为Union
FIle System(联合文件系统).
为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume的概念.简单来说,Volume就是目录或者文件,它可以绕过默认的联合文件系统,而以正常的文件或者目录的形式存在于宿主机上.
我们可以通过两种方式来初始化Volume,这两种方式有些细小而又重要的差别.我们可以在运行时使用-v来声明Volume:
root@syx-VB:/home/syx# docker run -it --name container-test -h CONTAINER -v /data ubuntu /bin/bash
root@CONTAINER:/# ls /data/
root@CONTAINER:/#
上面的命令会将/data挂载到容器中,并绕过联合文件系统,我们可以在主机上直接操作该目录.任何在该镜像/data路径的文件的文件都会被复制到Volume.我们可以使用docker
inspect命令找到Volume在主机上的存储位置:
$docker inspect container-test
&Mounts&: [
&Name&: &6407cbbcdeeefffa3f702fd3fee9e69134&,
&Source&: &/var/lib/docker/volumes/6407cbbcdeeefffa3f702fd3fee9e69134/_data&,
&Destination&: &/data&,
&Driver&: &local&,
&Mode&: &&,
&RW&: true
这说明Docker把在/var/lib/docker下的某个目录挂载到了容器内的/data目录下.让我们从主机添加文件都此文件夹下:
root@syx-VB:~# touch /var/lib/docker/volumes/6407cbbcdeeefffa3f702fd3fee9e69134/_data/test-file
root@syx-VB:~# docker attach container-test
root@CONTAINER:/# ls /data/
只要将主机的目录挂载到容器的目录上,那改变就会立即生效.我们可以在Dockerfile中通过使用VOLUME指令来达到相同的目的:
FROM ubunut VOLUME /data
但是还有另一件只有-v参数能够做到而Dockerfile是做不到的事情就是在容器上挂载指定的主机目录.例如:
root@syx-VB:~# docker run -v /home/syx/dockerfile:/data ubuntu ls /data
该命令将挂载主机的/home/syx/dockerfile目录到容器内的/data目录上.任何在/home/syx/dockerfile目录下的文件都会出现在容器内.这对于在主机和容器之间共享文件是非常有用的,例如挂载需要编译的源代码.为了保证可移植性,挂载主机目录不需要从Dockerfile指定.当使用-v参数时,镜像目录下的任何文件都不会被复制到Volume中.
如果要授权一个容器访问另一个容器的Volume,我们可以使用-volumes-from参数来执行docker
&root@syx-VB:~# docker run -it -h NEWCONTAINER --volumes-from container-test ubuntu /bin/bash
root@NEWCONTAINER:/# ls /data/
值得注意的是,就算你这个时候把container-test停止了,它仍然会起作用.只要有容器连接Volume,他就不会被删除,如果这个时候你执行:
root@syx-VB:~# docker rm container-test
Error response from daemon: Conflict, You cannot remove a running container. Stop the container before attempting removal or use -f
Error: failed to remove containers: [container-test]
常见的使用场景是使用纯数据容器来持久化数据库,配置文件或者数据文件等.例如:
$docker run --name dbdate postgres echo “Data-Only container for postgres”
该命令将会创建一个已经包含在Dockerfile里定义过Volume的postgres镜像,运行echo命令然后退出.当我们运行docker
ps命令时,echo可以帮助我们识别某镜像的用途.我们可以用-volume-from命令来识别其他容器的Volume:
$docker run -d --volumes-from dadate --name db1 postgres
使用数据容器的两个注意点:
1.不要运行数据容器,这纯属是在两非自愿
2.不要为了数据容器而使用”最小的镜像”,如busybox或scratch,只使用数据库镜像本身就可以了.你已经拥有了该镜像,所以不需要占用额外的空间.
如果你在用数据容器,那做备份是相当容易的.root@syx-VB:~# docker run --rm --volumes-from dbdate -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /var/lib/postgresql/data
该命令会将Volume里所有的东西压缩为一个tar包(官方的postgres
Dockerfile在/var/lib/postgresql/data目录下定义了一个Volume).
root@syx-VB:~# ls
backup.tar
删除Volumes
这个功能太重要了,如果你已经使用docker run来删除你的容器,那可能会有很多孤立的Volume仍在占用着空间.
Voulume可以被删除的条件:
1.该容器可以用docker rm -v来删除且没有其他容器连接到该Volume(以及主机目录是也没被指定为Volume).注意,-v是必不可少的.
2.docker run中使用rm参数.
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:288835次
积分:6664
积分:6664
排名:第3100名
原创:377篇
评论:60条
(2)(11)(1)(15)(31)(15)(14)(8)(3)(13)(3)(13)(101)(57)(67)(3)(14)(12)Docker volume使用_docker中文社区_ThinkSAAS
Docker volume使用
Docker volume使用
内容来源: 网络
一个数据卷是一个特别指定的目录,该目录利用容器的UFS文件系统可以为容器提供一些稳定的特性或者数据共享。数据卷可以在多个容器之间共享。
创建数据卷,只要在docker run命令后面跟上-v参数即可创建一个数据卷,当然你也可以跟多个-v参数来创建多个数据卷,当创建好带有数据卷的容器后,你就可以在其他容器中通过--volumes-froms参数来挂载该数据卷了,而不管该容器是否运行。你也可以在Dockerfile中通过VOLUME指令来增加一个或者多个数据卷。
如果你有一些数据想在多个容器间共享,或者想在一些临时性的容器中使用该数据,那么最好的方案就是你创建一个数据卷容器,然后从该临时性的容器中挂载该数据卷容器的数据。例如如下操作:
docker
run -v /var/volume1
-v /var/volume2
-name Volume_Container ubuntu14.04
linux_command
docker
run -t -i -rm -volumes-from
Volume_Container -name App_Container ubuntu14.04
linux_command
docker
run -t -i -rm -volumes-from
App_Container -name LastApp_Container ubuntu14.04
linux_command
在一个终端内创建数据卷容器,并在数据卷目录内写入测试文件
另打开一个容器,挂载上一个数据卷容器的数据卷,查看测试文件 
即使你删除了刚开始的第一个数据卷容器或者中间层的数据卷容器,只要有其他容器使用数据卷,数据卷都不会被删除的。
你也可以把一个本地主机的目录当做数据卷挂载在容器上,同样是在docker run后面跟-v参数,不过-v后面跟的不再是单独的目录了,他是[host-dir]:[container-dir]:[rw|ro]这样格式的,host-dir是一个绝对路径的地址,如果host-dir不存在,则docker会创建一个新的数据卷,如果host-dir存在,但是指向的是一个不存在的目录,则docker也会创建该目录,然后使用该目录做数据源。例如:
docker
run -i -t -v /tmp:/mnt
ubuntu/14.04:14.04 /bin/bash
你不能使用docker export、save、cp等命令来备份数据卷的内容,因为数据卷是存在于镜像之外的,但是总会有变通方法的,如下:
docker
run -rm --volumes-from
DATA -v $(pwd):/backup
busybox tar cvf
/backup/backup.tar /data
创建一个新容器,挂载数据卷容器,同时挂载一个本地目录,然后把远程数据卷容器的数据卷通过备份命令备份到映射的本地目录里面。 
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信}

我要回帖

更多关于 那年花开月正圆全集 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信