什么是数据卷Volume呢?

首先需要明确Docker内的文件系统是如何工作的,Docker镜像被存储在一系列的只读层。

Docker镜像是由多个文件系统(只读层)叠加而成,当启动一个容器的时候,Docker会加载只读镜像层并在其上(镜像栈顶部)添加一个读写层。如果运行中的容器修改了现有的一个已经存在的文件,那该文件将会从读写层下面的只读层复制到读写层,该文件的只读版本仍然存在,只是已经被读写层中该文件的副本所隐藏。当删除Docker容器,并通过该镜像重启时,之前的修改将会丢失。在Docker中,只读层和顶部的读写层的组合被称为联合文件系统(Union File System)。

Docker镜像可以理解成多个只读文件叠加而成,因此镜像是只读的,当镜像运行起来时就相当于在只读的镜像外包裹了一层读写层变成了容器。当删除容器之后,使用镜像重新创建一个容器时,此时的镜像的只读层和原来一样,只是在读写层的修改会全部丢失。

为什么要使用数据卷Volume呢?

Docker的数据卷Volume能让容器从宿主机中读取文件或持久化数据到宿主机主机内,让容器与容器产生的数据分离开来。可以简单的把Volume理解为Linux服务器上的挂载点。一个容器可以挂载多个不同的目录。Volume的生命周期是独立于容器的生命周期之外的,即使容器删除Volume也会保留下来,Docker也不会因为这个Volume没有被容器使用而回收。在容器中,添加或修改这个文件夹中的文件也不会影响容器的联合文件系统。

Volume数据卷不使用分层文件系统,这对经常读取和写入的数据很有用。在开发过程中,可以将代码目录挂载到容器中,这样如果更改代码容器会实时地得到文件修改的返回。容器中的挂载点必须是绝对路径,不支持相对路径。宿主机上的地址可以是 一个绝对路径,也可以是一个数据卷名称。如果数据卷不存在,Docker会自动创建数据卷。注意不要在Dockerfile中指定挂载一个主机的目录,这样做不够灵活,因为在其它主机上不一定会存在这样的目录。

如果想要持久化读写层的数据,该怎么利用Docker实现呢?

为了能够保存(持久化)数据以及共享容器间的数据,Docker提出了Volume数据卷的概念。简单来说,Volume数据卷就是目录或文件,可以绕过默认的联合文件系统,以正常的文件或目录的形式存在于宿主机上。Docker使用Volume实现数据的持久化,不仅如此,Volume还能帮助容器和容器之间、容器和主机之间共享数据。

Windows下如何挂载容器呢?

Docker容器的Linux对Windows支持并不是很高,只能对C:\Users目录下进行挂载,其它目录没有办法挂载。除非使用VirtualBox修改虚拟机的共享目录设定,否则在虚拟机中只能看到C:\Users以下的文件。

默认挂载点

$ docker-machine ls

NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS

default * virtualbox Running tcp://192.168.99.100:2376 v18.09.5

$ docker-machine ssh default

( '>') ( '>')

/) TC (\ Core is distributed with ABSOLUTELY NO WARRANTY.

(/-_--_-\) www.tinycorelinux.net

docker@default:~$ ls -ali /c

total 4

17746 drwxr-xr-x 3 root root 60 Apr 19 11:12 .

11162 drwxr-xr-x 18 root root 440 Apr 19 11:12 ..

0 dr-xr-xr-x 1 docker staff 4096 Feb 18 01:46 Users

如何使用数据卷Volume呢?

在使用docker run创建新容器时,可以使用-v标签为容器添加数据卷volume。

-v /path 从容器挂载数据卷

-v /host-path:/container-path 从宿主机挂载数据卷

在Web开发中需要一个Web服务器,使用Nginx镜像为例,将Web开发目录挂载到Nginx容器中:

docker@default:~$ docker run --rm --name webserver -p 80:80 -v /share/www:/usr/share/nginx/html:ro -d nginx

-v 用于挂载一个主机上的目录到容器的目录

容器内对/usr/share/nginx/html的操作都会反映到主机的/share/www目录内

/share/www 表示宿主机上的绝对路径

/usr/share/nginx/html 表示容器上的绝对路径

ro 表示只读挂载

由于在本机Windows系统中使用VirtualBox共享目录,设置了D:\docker\share目录与default虚拟机中/share目录共享。此时在Windows的D:\docker\share目录下将会产生一个www目录,对应着default虚拟机中的/share/www。

docker@default:~$ docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

171cd178fcee nginx "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:80->80/tcp webserver

查看虚拟机IP地址,然后在Windows浏览器上访问192.168.99.100,创建下文件测试下看看。

$ docker-machine ip

192.168.99.100

查看docker volume帮助文档

docker@default:~$ docker volume --help

Usage: docker volume COMMAND

Manage volumes

Commands:

create 创建一个数据卷

inspect 打印一个或多个数据卷的详细信息

ls 列出所有数据卷

prune 删除所有未使用的数据卷

rm 删除一个或多个数据卷

Run 'docker volume COMMAND --help' for more information on a command.

什么是匿名卷与实名卷呢?

匿名卷也就是没有显示指定名字的卷,实名卷具有名字,两种卷均存储在/var/lib/docker/volumes/区域,匿名卷的目录名字是一串随机数字,如果在创建容器时添加--rm参数,则匿名卷会随着容器的删除而删除,其实,匿名卷和实名卷基本可以看成是一个东西,只是匿名卷名字由Docker随机命名,并且可以随容器的销毁而销毁而已。

docker mysql volum_Docker Volume相关推荐

  1. docker mysql volum_docker volume 使用

    docker volume 可以理解成一个container中的磁盘,既可以跟随container的生命周期(在Dockerfile 中定义使用VOLUME关键字),也可以单独创建,永久存储,直到用d ...

  2. docker mysql volum_Docker --volume(数据持久化)

    数据卷 volume 数据卷 是一个可供一个或多个容器使用的特殊目录,实现让容器中的一个目录和宿主机中的一个文件或者目录进行绑定.数据卷 是被设计用来持久化数据的 第一种:bind mount vol ...

  3. docker mysql volum_Docker Volume入门用法详解

    Docker Volume能让容器从宿主主机中读取文件或持久化数据到宿主主机内,让容器与容器产生的数据分离开来.你可以简单地把它理解为linux服务器上的挂载点.一个容器可以挂载多个不同的目录.Vol ...

  4. docker mysql volum_Docker 存储卷 Volume 删除和孤单 volume 清理

    1 在删除容器时删除 volume 可以使用 docker rm -v 命令在删除容器时删除该容器的卷. [root@along ~]# docker run --name web2 -v /data ...

  5. docker mysql开发环境_跟我一步一步用Docker搭建Beimi游戏服务端开发环境

    跟我一步一步用Docker搭建Beimi游戏服务端开发环境 Stone 摘要 本文为java 0基础的小伙伴介绍如何用Docker搭建开发环境.如果不关心过程直接可 跳到本文最后取代码. 关键步骤为: ...

  6. ubuntu 安装docker mysql 8.0.28

    ubuntu 安装docker mysql 8.0.28 1. ubuntu 版本信息更新系统 webrx@us:~$ sudo apt update [sudo] webrx 的密码: 命中:1 h ...

  7. Docker存储卷(Volume)

    简介 想要了解Docker Volume,首先我们需要知道Docker的文件系统是如何工作的.Docker镜像是由多个文件系统(只读层)叠加而成.当我们启动一个容器的时候,Docker会加载只读镜像层 ...

  8. 解决 Windows Docker 安装 Gitlab Volume 权限问题

    解决 Windows Docker 安装 Gitlab Volume 权限问题 参考文章: (1)解决 Windows Docker 安装 Gitlab Volume 权限问题 (2)https:// ...

  9. Docker+mysql

    Docker+mysql 原文:Docker+mysql docker run --name mysql-v1.0.0 -p 3308:3306 -v /usr/mysql/data:/var/lib ...

最新文章

  1. python控制caxa模块_CAXA二次开发实用手册.doc
  2. 重新定位svn地址的方法(windows和linux),svn switch(sw)的帮助信息
  3. scrapy配置文件操作核心API解读
  4. 认识Linux 、安装虚拟机 、 安装centos7
  5. 干货|MIT线性代数课程精细笔记[第二课]
  6. php异步轮询如何实现,深入剖析JavaScript异步之事件轮询
  7. 论文小综 | Using External Knowledge on VQA
  8. 红橙Darren视频笔记 builder设计模式 navigationbar 导航栏第二版
  9. 324. Wiggle Sort II
  10. Firefox 和 Chrome 性能测试对比
  11. 【练习】Java实现的杨辉三角形控制台输出
  12. 青岛农业大学计算机分数线,青岛农业大学录取分数线2021是多少分(附历年录取分数线)...
  13. 【UOS统信】安装谷歌浏览器
  14. IDEA使用有道翻译插件
  15. 音视频开发(四十四):M3U8边缓存边播放
  16. 每日学习(Git和Github)
  17. 【FineReport企业日常问题 1.0】帆软决策服务端管理员密码忘记怎么办?
  18. jvm系列(十一):JVM演讲PPT分享
  19. android安全检测工具,梆梆安全 - 防止反编译|APP安全加固|应用加固|盗版监测
  20. C# 从做早餐看同步异步

热门文章

  1. 让声音回归本质,畅听天籁之声,KZ ZEX Pro动铁发烧耳机上手实测
  2. 计算机没鼠标怎么,计算机中没有鼠标如何进行拖拽
  3. php jrfdfpl cn,cos-php-sdk-v5接口文档
  4. Web渗透实例复现(一)(通达OA11.2)
  5. 强盗问题动态规划详解
  6. java 获取当前hhmm_java 获取当前时间并转化为yyyy-MM-dd HH:mm:ss格式
  7. LeetCode最近时刻
  8. 全球与中国隔膜阀行业调查与未来发展趋势研究报告
  9. 静态环形队列(C语言)
  10. 日志-syslog系统日志