批量修改数据映射_Docker 数据卷操作「Docker 系列-6」
数据卷入门
在前面的案例中,如果我们需要将数据从宿主机拷贝到容器中,一般都是使用 Docker 的拷贝命令,这样性能还是稍微有点差,没有办法能够达到让这种拷贝达到本地磁盘 I/O 性能呢?有!
数据卷可以绕过拷贝系统,在多个容器之间、容器和宿主机之间共享目录或者文件,数据卷绕过了拷贝系统,可以达到本地磁盘 I/O 性能。
本文先通过一个简单的案例向读者展示数据卷的基本用法。
以前面使用的 nginx 镜像为例,在运行该容器时,可以指定一个数据卷,命令如下:
docker run -itd --name nginx -v /usr/share/nginx/html/ -p 80:80 bc26f1ed35cf
运行效果如下:
此时,我们创建了一个数据卷并且挂载到容器的 /usr/share/nginx/html/ 目录下,小伙伴们知道,该目录实际上是 nginx 保存 html 目录,在这里挂载数据卷,一会我们只需要修改本地的映射位置,就能实现页面的修改了。
接下来使用 docker inspect 命令查看刚刚创建的容器的具体情况,找到数据卷映射目录
可以看到,Docker默认将宿主机的 /var/lib/docker/volumes/0746bdcfc045b237a6fe2288a3af9d7b80136cacb3e965db65a212627e217d75/_data 目录作为source目录,接下来,进入到该目录中,如下:
此时发现该目录下的文件内容与容器中 /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文件内容,如下:
echo "hello volumes">index.html
修改完成后,再回到浏览器中,输入 http://localhost查看nginx中index.html 页面中的数据,发现已经发生改变。说明宿主机中的文件共享到容器中去了。
结合宿主机目录
上文中对于数据卷的用法还不是最佳方案,一般来说,我们可能需要明确指定将宿主机中的一个目录挂载到容器中,这种指定方式如下:
docker run -itd --name nginx -v /Users/sang/blog/docker/docker/:/usr/share/nginx/html/ -p 80:80 bc26f1ed35cf
这样便是将宿主机中的 /Users/sang/blog/docker/docker/ 目录挂载到容器的 /usr/share/nginx/html/ 目录下。接下来读者只需要在 /Users/sang/blog/docker/docker/ 目录下添加 html 文件,或者修改 html 文件,都能在 nginx 访问中立马看到效果。
这种用法对于开发测试非常方便,不用重新部署,重启容器等。
注意:宿主机地址是一个绝对路径
更多操作
Dockerfile中的数据卷
如果开发者使用了 Dockerfile 去构建镜像,也可以在构建镜像时声明数据卷,例如下面这样:
FROM nginxADD https://www.baidu.com/img/bd_logo1.png /usr/share/nginx/html/RUN echo "hello docker volume!">/usr/share/nginx/html/index.htmlVOLUME /usr/share/nginx/html/
这样就配置了一个匿名数据卷,运行过程中,将数据写入到 /usr/share/nginx/html/ 目录中,就可以实现容器存储层的无状态变化。
查看所有数据卷
使用如下命令可以查看所有数据卷:
docker volume ls
如图:
查看数据卷详情
根据 volume name 可以查看数据详情,如下:
docker volume inspect
执行结果如下图:
删除数据卷
可以使用 docker volume rm 命令删除一个数据卷,也可以使用 docker volume prune 批量删除数据卷
批量删除时,未能删除掉所有的数据卷,还剩一个,这是因为该数据卷还在使用中,将相关的容器停止并移除,再次删除数据卷就可以成功删除了,如图:
数据卷容器
数据卷容器是一个专门用来挂载数据卷的容器,该容器主要是供其他容器引用和使用。所谓的数据卷容器,实际上就是一个普通的容器,举例如下:
- 创建数据卷容器
使用如下方式创建数据卷容器:
docker run -itd -v /usr/share/nginx/html/ --name mydata ubuntu
命令执行效果如下图:
- 引用容器
使用如下命令引用数据卷容器:
docker run -itd --volumes-from mydata -p 80:80 --name nginx1 nginxdocker run -itd --volumes-from mydata -p 81:80 --name nginx2 nginx
此时, nginx1 和 nginx2 都挂载了同一个数据卷到 /usr/share/nginx/html/ 目录下,三个容器中,任意一个修改了该目录下的文件,其他两个都能看到变化。
此时,使用 docker inspect 命令查看容器的详情,发现三个容器关于数据卷的描述都是一致的,如下图:
总结
本文主要向大家介绍了数据卷中的容器操作,整体来说还是非常简单的,小伙伴们,你学会了吗?
参考资料:
批量修改数据映射_Docker 数据卷操作「Docker 系列-6」相关推荐
- 「docker实战篇」python的docker-打造多任务端app应用数据抓取系统(下)(35)
上次已经把python文件挂载到虚拟机上了,这次主要设置下虚拟机通过docker容器的方式. 运行 python 代码运行 >启动一个crt的会话 docker run -it -v /root ...
- 「docker实战篇」python的docker-抖音appium模拟滑动操作(22)
原创文章,欢迎转载.转载请注明:转载自IT人故事会,谢谢! 原文链接地址:「docker实战篇」python的docker-抖音appium模拟滑动操作(22) 上次代码写到了可以通过接口获取粉丝的数 ...
- 批量修改文件名中的一部分,操作步骤
如何批量修改文件名中的一部分?在工作中我们经常需要对文件做各种操作,其中有一种是批量重命名,顾名思义,批量重命名就是一次性对大量文件修改名称的意思,批量修改文件名可以帮助我们节省大量的时间,否则一个一 ...
- Mybatis-plugs 批量新增及批量修改、IN、CASE WHEN操作
1.1 基本介绍 Mybatis-plugs 批量新增及批量修改.IN.CASE WHEN 查询,简单,适用,最近用到了,那就留下点痕迹,免得下次用到再去找 <foreach> 标签里面的 ...
- django批量修改table_django formset实现数据表的批量操作的示例代码
什么是formset 我们知道forms组件是用来做表单验证,更准确一点说,forms组件是用来做数据库表中一行记录的验证.有forms组件不同,formset是同科同时验证表中的多行记录,即form ...
- MySQL批量修改数据库中的数据表名称
1.一种使用存储过程解决,结果,总是如下提示 Expression #3 of SELECT list is not in GROUP BY clause and contains n 2.使用 CO ...
- docker mysql映射端口映射_docker的简单操作和端口映射
一:简介 Docker镜像 在Docker中容器是基于镜像启动的 镜像是启动容器的核心 镜像采用分层设计,最顶层为读写层 使用快照COW技术,确保底层不丢失 通过ifconfig(ip a)来查看d ...
- python爬取抖音用户数据_「docker实战篇」python的docker-抖音web端数据抓取(19)
import re import requests import time from lxml import etree def handle_decode(input_data,share_web_ ...
- 用python批量创建docker_「docker实战篇」python的docker-docker镜像的创建使用dockerfile(3...
从上篇docker commit学习可以了解到,镜像的定制其实每一层添加的配置和文件,如果把每一层的修改配置,修改文件,都写入脚本,用这个脚本构建定制镜像,无法重复的问题,镜像构建透明性的问题,体积的 ...
最新文章
- Unix/Linux下文件基本操作[zt]
- [转贴]玩你没商量:ADSL速率数字游戏解密
- 「干货」什么Linux是邮件服务器?
- 程序员面试金典——4.4输出单层结点
- 程序win10_只需3步!教你打造精简win10,去除系统自带程序,运行更快!
- 计算机二级C语言知识点总结
- mysql将公历农历转换_SQL 日期转换(阳历转阴历)
- js 实现图片放大镜原理
- 在win7的iis下部署asp网站
- ST-LINKV2仿真器接线、配置、仿真方法
- 岁月温柔-24 妈妈转到省医院第4天
- Kubernetes利用CNI-bridge插件打通网络
- 微信小游戏中监听一个按钮的点击事件方法
- xml文件导入wps_怎么用wpsExcel表打开xml文档
- ValueError: cannot resize this array: it does not own its data
- 别让自己“墙”了自己(2019.12.1)
- linux如何查看系统停机日志,linux系统中如何查看日志
- 陌陌6.0核心诉求:改变看脸社交
- 水位报警器c语言程序,简易水位报警器制作_制作简单的水满报警器 - 全文
- FANUC机器人负载手动设置方法参考