• 售前

  • 售后

热门帖子
入门百科

Docker 数据卷利用的实现

[复制链接]
此人正在学习 显示全部楼层 发表于 2021-10-26 13:31:16 |阅读模式 打印 上一主题 下一主题
数据卷入门
在前面的案例中,假如我们需要将数据从宿主机拷贝到容器中,一样平常都是使用 Docker 的拷贝下令,如许性能照旧轻微有点差,没有办法能够达到让这种拷贝达到本地磁盘 I/O 性能呢?有!
数据卷可以绕过拷贝体系,在多个容器之间、容器和宿主机之间共享目次大概文件,数据卷绕过了拷贝体系,可以达到本地磁盘 I/O 性能。
本文先通过一个简单的案例向读者展示数据卷的根本用法。
以前面使用的 nginx 镜像为例,在运行该容器时,可以指定一个数据卷,下令如下:
  1. docker run -itd --name nginx -v /usr/share/nginx/html/ -p 80:80 bc26f1ed35cf
复制代码
运行效果如下:

此时,我们创建了一个数据卷并且挂载到容器的
  1. /usr/share/nginx/html/
复制代码
目次下,小同伴们知道,该目次实际上是 nginx 保存 html 目次,在这里挂载数据卷,一会我们只需要修改本地的映射位置,就能实现页面的修改了。
接下来使用 docker inspect 下令检察刚刚创建的容器的具体环境,找到数据卷映射目次,如下:

可以看到,Docker默认将宿主机的
  1. /var/lib/docker/volumes/0746bdcfc045b237a6fe2288a3af9d7b80136cacb3e965db65a212627e217d75/_data
复制代码
目次作为source目次,接下来,进入到该目次中,如下:

此时发现该目次下的文件内容与容器中
  1. /usr/share/nginx/html/
复制代码
目次下的文件内容同等,这是因为挂载一个空的数据卷到容器中的一个非空目次中,那么这个目次下的文件会被复制到数据卷中(假如挂载一个非空的数据卷到容器中的一个目次中,那么容器中的目次中会体现数据卷中的数据。假如原来容器中的目次中有数据,那么这些原始数据会被隐蔽掉)。
小贴士:
由于 Mac 中的 Docker 有点特殊,上文提到的 /var/lib/xxxx 目次,假如是在 linux 环境下,则直接进入即可,假如是在 mac 中,需要起首实验如下下令,在新进入的下令行中进入到 /var/lib/xxx 目次下:
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
接下来修改改文件中的index.html文件内容,如下:
  1. echo "hello volumes">index.html
复制代码
修改完成后,再回到欣赏器中,输入 http://localhost检察nginx中index.html 页面中的数据,发现已经发生改变。阐明宿主机中的文件共享到容器中去了。
联合宿主机目次
上文中对于数据卷的用法还不是最佳方案,一样平常来说,我们可能需要明确指定将宿主机中的一个目次挂载到容器中,这种指定方式如下:
  1. docker run -itd --name nginx -v /Users/sang/blog/docker/docker/:/usr/share/nginx/html/ -p 80:80 bc26f1ed35cf
复制代码
如许便是将宿主机中的
  1. /Users/sang/blog/docker/docker/
复制代码
目次挂载到容器的
  1. /usr/share/nginx/html/
复制代码
目次下。接下来读者只需要在
  1. /Users/sang/blog/docker/docker/
复制代码
目次下添加 html 文件,大概修改 html 文件,都能在 nginx 访问中立马看到效果。
这种用法对于开辟测试非常方便,不用重新部署,重启容器等。
留意:宿主机地点是一个绝对路径
更多操纵
Dockerfile中的数据卷
假如开辟者使用了 Dockerfile 去构建镜像,也可以在构建镜像时声明数据卷,例如下面如许:
  1. FROM nginx
  2. ADD https://www.baidu.com/img/bd_logo1.png /usr/share/nginx/html/
  3. RUN echo "hello docker volume!">/usr/share/nginx/html/index.html
  4. VOLUME /usr/share/nginx/html/
复制代码
如许就设置了一个匿名数据卷,运行过程中,将数据写入到
  1. /usr/share/nginx/html/
复制代码
目次中,就可以实现容器存储层的无状态变革。
检察所有数据卷
使用如下下令可以检察所有数据卷:
  1. docker volume ls
复制代码
如图:

检察数据卷详情
根据 volume name 可以检察数据详情,如下:
  1. docker volume inspect
复制代码
实验结果如下图:

删除数据卷
可以使用
  1. docker volume rm
复制代码
下令删除一个数据卷,也可以使用
  1. docker volume prune
复制代码
批量删除数据卷,如下:


批量删除时,未能删撤除所有的数据卷,还剩一个,这是因为该数据卷还在使用中,将相干的容器停止并移除,再次删除数据卷就可以乐成删除了,如图:

数据卷容器
数据卷容器是一个专门用来挂载数据卷的容器,该容器主要是供其他容器引用和使用。所谓的数据卷容器,实际上就是一个平常的容器,举例如下:
      
  • 创建数据卷容器
使用如下方式创建数据卷容器:
  1. docker run -itd -v /usr/share/nginx/html/ --name mydata ubuntu
复制代码
下令实验效果如下图:

      
  • 引用容器
使用如下下令引用数据卷容器:
  1. docker run -itd --volumes-from mydata -p 80:80 --name nginx1 nginx
  2. docker run -itd --volumes-from mydata -p 81:80 --name nginx2 nginx
复制代码
此时, nginx1 和 nginx2 都挂载了同一个数据卷到
  1. /usr/share/nginx/html/
复制代码
目次下,三个容器中,恣意一个修改了该目次下的文件,其他两个都能看到变革。
此时,使用
  1. docker inspect
复制代码
下令检察容器的详情,发现三个容器关于数据卷的描述都是同等的,如下图:

总结
本文主要向各人先容了数据卷中的容器操纵,团体来说还黑白常简单的,小同伴们,你学会了吗?
以上就是本文的全部内容,希望对各人的学习有所资助,也希望各人多多支持脚本之家。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作