标签:出现 它的 manage 共享 复制 应该 技术 打包 pac
1:由storage driver 管理的镜像层和容器层
2:Data Volume。
docker 镜像的分层结构
运行docker info 查看centos 的默认driver:
storage driver和data volume是容器存放数据的两种方式。
data volume本质上是docker host 文件系统中的目录或者文件,能够直接被mount到容器文件系统中
特点:
1:data volume 是目录或者文件,而非没有格式化的磁盘(块设备)
2:容器可以读写 volume中的数据。
3:volume数据可以被永久的保存,即使使用它的容器已经销毁
这是需要持久化的数据,并且应该与镜像分开存放。
在使用上docker提供了两种类型的volume:
1:bind mount
2:docker managed volume。
bind mount 是将 host上已存在的目录或者文件mount到容器。
我们先在宿主机上创建一个名字为html的文件夹里面随意写一个html文件
mkdir /html
echo “caoyi666” >/html/index.html
然后我们通过-v将其mount到nginx容器上:
现在我们修改一下html文件
可以看出修改生效了,bind mount 可以让host 与容器共享数据,这在管理上是非常方便的
下面我们将容器销毁,看看对bind mount 有什么影响:
可见,即使我们把容器给删除了bind mount还是存在的
现在我们进入容器里面修改一下nginx的html文件看看是否可以修改成功
可以看到修改成功了,然后我们再访问一下看是否生效
上图可以看出已经生效了,如果我们不允许修改容器里面html的内容我们可以这样做
只需要在跑容器的时候给个只读权限ro即可
我们除了可以挂载一个目录,还可以单独挂载一个文件
单独使用一个文件的时候我们需要注意的是host中的源文件必须要存在,不然的话会当做一个新的目录bind mount给容器
docker managed volume与bind mount 在使用上最大的区别是不需要指定mount源,指定mount point即可
我们通过-v告诉docker需要一个data volume ,并且将其mount到/usr/share/nginx/html.这个data volume具体在哪里我们可以使用docker inspect查看
source就是volume在host上的目录。
当我们容器申请mount docker managed volume时docker都会在/var/lib/docker/volumes下生成一个目录
这个目录就是mount源
docker managed volume 的创建过程:
1:容器启动时,简单的告诉docker我需要一个volume存放数据帮我mount到目录/abc
2:docker在/var/lib/docker/volumes中生成一个随机目录作为mount源。
3:如果/abc已经存在,则将数据复制到mount源。
4:将volume mount 到/abc
我们除了可以通过docker inspect查看volume以外,还可以使用docker volume 命令
现在我们将两种data volume 做个比对
可以看出现在只有两个html现在我们开始复制
上图可以看出已经复制过来了
docker cp 可以在容器和host之间拷贝数据,当然我们也可以直接通过linux cp过去
第一种方法是将共享数据放在bind mount当中,然后将其mount到多个容器,
我们创建三个nginx组成的webserver集群
现在我们修改html文件
发现可以同步
另外一种容器之间的共享数据方式是使用volume container
他提供的卷可以是 bind mount 也可以是docker managed volume 下面我们创建一个volume container:
我们将容器命名为vc_data 注意这里执行的是docker create命令,这是应为volume container的作用只是提供数据,它本身是不需要处于运行状态,容器mount乐两个volume:
1:bind mount,存放 web server 的静态文件
2:docker managed volume, 存放一些实用工具
通过docker inspect 可以查看到这两个volume。
其他的容器可以通过--volumes-from 实用vc_data这个volume container:
三个nginx容器都实用乐vc_data 看看他们都有哪些volume
验证效果
可见,三个容器已经陈宫的共享乐volume container中volume
原理是将数据打包到镜像中然后通过docker managed volume 共享
我们用下面的dockerfile构建镜像
用新的镜像创建nginx—new
因为在dockerfile已经实用乐volume指令吗,这里就不需要指定volume的mount point了,启动容器并且使用 nginx_new volume container:
删除
如果想批量删除可以使用
docker volume rm $(docker volume ls -q)
标签:出现 它的 manage 共享 复制 应该 技术 打包 pac
原文地址:https://www.cnblogs.com/cy888888/p/13031789.html