原文地址:http://www.hxstrive.com/article/641.htm
Docker数据卷是什么?
Docker的理念:
将应用与应用运行的环境打包形成容器运行,运行环境可以伴随着容器,但是我们对数据的要求希望是持久化的
容器之间希望有可能共享数据
Docker容器产生的数据,如果不通过 docker commit 生成新的镜像,使得数据作为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。
为了能保存数据,在Docker中我们使用数据卷。
Docker数据卷能干嘛?
容器数据卷主要干下面两件事:
(1) 容器的持久化,这里指持久化容器运行过程产生的业务数据
(2) 容器间继承+共享数据
卷就是目录或文件,存在于一个或多个容器中,由docker挂载到容器,但不属于联合文件系统,因此能够绕过Union File System,提供一些用于持续存储或共享数据的特性。
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会再容器删除时删除其挂载的数据卷。
容器卷的特点:
1. 数据卷可在容器之间共享或重用数据
2. 卷中的更改可以直接生效
3. 数据卷中的更改不会包含在镜像的更新中
4. 数据卷的生命周期一直持续到没有容器使用它为止
Docker数据卷
怎样给容器添加数据卷呢?容器内添加数据卷有下面两种方式:
(1) 直接命令添加
(2) DockerFile添加
直接命令添加数据卷
直接命令添加是在“docker run -it”命令中添加一个“-v /宿主机数据卷绝对路径:/容器内部目录绝对路径”,完整格式如下:
docker run -it -v /宿主机目录:/容器内目录 镜像名
我们也可以在命令后面添加“:ro”(read only),使用:ro修饰的数据卷表示是只读的。语法如下:
docker run -it -v /宿主机目录:/容器内目录:ro 镜像名
实例1:在宿主机创建目录“/myDataVolume”,然后挂载到容器内部的“/dataVolumeContainer”目录,分别手动操作这两个目录,然后进入宿主机和容器内部观察目录的变化。
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos latest 1b896063f266 3 days ago 202MB
tomcat latest 5377fd8533c3 2 weeks ago 506MB
centos latest 9f38484d220f 3 months ago 202MB
hello-world latest fce289e99eb9 6 months ago 1.84kB
[root@localhost ~]# mkdir /myDataVolume
[root@localhost ~]# docker run -it -v /myDataVolume:/dataVolume centos
[root@73445976dda7 /]# ll /dataVolume/
total 0
首先使用“docker images”查看当前拥有的镜像;使用“mkdir /myDataVolume”在宿主机创建目录;使用“docker run -it -v /myDataVolume:/dataVolumeContainer centos”启动容器且设置数据卷。到宿主机查看数据卷目录:
[root@localhost ~]# ll /myDataVolume/
total 0
如果我们在宿主主机的/myDataVolume目录下面创建host.txt文件,然后到容器的/dataVolumeContainer目录下面去看是否拥有host.txt文件。如下:
[root@localhost ~]# cd /myDataVolume/
[root@localhost myDataVolume]# echo "host" > host.txt
[root@localhost myDataVolume]# ll
total 4
-rw-r--r--. 1 root root 5 Jun 30 09:35 host.txt
[root@localhost myDataVolume]# cat host.txt
host
上面使用“echo “host1” > host.txt”创建一个host.txt文件。到容器中去查看:
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
db5e481eccaf centos "/bin/bash" About a minute ago Up 59 seconds compassionate_lamport
[root@localhost ~]# docker attach db5e481eccaf
[root@db5e481eccaf /]# cd dataVolumeContainer/
[root@db5e481eccaf dataVolumeContainer]# ll
total 4
-rw-r--r--. 1 root root 5 Jun 30 13:35 host.txt
[root@db5e481eccaf dataVolumeContainer]# cat host.txt
host
实例2:如果在容器中修改我们上面创建的host.txt文件且新增一个container.txt文件呢?此时,宿主机的host.txt文件是否会变化,能否看见容器新创建的container.txt文件。如下:
[root@db5e481eccaf dataVolumeContainer]# ll
total 4
-rw-r--r--. 1 root root 5 Jun 30 13:35 host.txt
[root@db5e481eccaf dataVolumeContainer]# echo "update" >> host.txt
[root@db5e481eccaf dataVolumeContainer]# cat host.txt
host
update
[root@db5e481eccaf dataVolumeContainer]# echo "container" > container.txt
[root@db5e481eccaf dataVolumeContainer]# ll
total 8
-rw-r--r--. 1 root root 10 Jun 30 13:43 container.txt
-rw-r--r--. 1 root root 12 Jun 30 13:43 host.txt
[root@db5e481eccaf dataVolumeContainer]# cat container.txt
container
使用“echo “update” >> host.txt”修改host.txt文件;使用“echo “container” > container.txt”创建新的container.txt文件。进入宿主主机查看:
[root@localhost myDataVolume]# ll
total 8
-rw-r--r--. 1 root root 10 Jun 30 09:43 container.txt
-rw-r--r--. 1 root root 12 Jun 30 09:43 host.txt
[root@localhost myDataVolume]# cat host.txt
host
update
[root@localhost myDataVolume]# cat container.txt
container
实例3:使用“:ro”修饰某个数据卷,让该数据卷不允许写入/修改文件(只读的)。如下:
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mycentos latest 1b896063f266 3 days ago 202MB
tomcat latest 5377fd8533c3 2 weeks ago 506MB
centos latest 9f38484d220f 3 months ago 202MB
hello-world latest fce289e99eb9 6 months ago 1.84kB
[root@localhost ~]# docker run -it -v /myDataVolume:/dataVolumeContainer:ro centos
[root@91ab82f5e44f /]# ll /dataVolumeContainer/
total 8
-rw-r--r--. 1 root root 10 Jun 30 13:43 container.txt
-rw-r--r--. 1 root root 12 Jun 30 13:43 host.txt
我们试图去修改container.txt文件,抛出了“Read-only file system”错误。如下:
[root@91ab82f5e44f dataVolumeContainer]# ll
total 8
-rw-r--r--. 1 root root 10 Jun 30 13:43 container.txt
-rw-r--r--. 1 root root 12 Jun 30 13:43 host.txt
[root@91ab82f5e44f dataVolumeContainer]# echo "update data" > container.txt
bash: container.txt: Read-only file system
我们试图新创建一个container2.txt文件,抛出“Read-only file system”错误。如下:
[root@91ab82f5e44f dataVolumeContainer]# ll
total 8
-rw-r--r--. 1 root root 10 Jun 30 13:43 container.txt
-rw-r--r--. 1 root root 12 Jun 30 13:43 host.txt
[root@91ab82f5e44f dataVolumeContainer]# touch container2.txt
touch: cannot touch 'container2.txt': Read-only file system
相关推荐
带你了解什么是Docker容器数据卷
容器数据卷 –》实现容器数据的持久化、实现容器间继承与数据的共享容器卷的添加查看是否挂载成功创建文件并验证采用 dockersfile 来创建 实现 新的容器继
本篇文章主要介绍了浅谈Docker 容器数据卷挂载小结,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!
Java是一种高级的面向对象的程序设计语言,它具有广泛的应用和强大的跨平台特性。Java语言于1995年由Sun公司推出,由Java之父詹姆斯高斯林设计。Java的设计目标是提供一种易学易用、功能强大的编程语言,使开发人员...
主要介绍了Docker容器数据卷原理及使用方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。 为了能保存数据在docker中我们使用卷。 一句话:有点类似我们Redis里面...
Docker容器技术
初识 Docker Docker 命令 Docker 容器数据卷 Dockerfile Docker 应用部署 Docker 服务编排 Docker 私有仓库 Docker相关概念
Docker容器技术
Docker容器技术
Docker 数据卷,数据卷容器详细介绍 引子 有些时候,我们的服务运行时必不可少的会产生一些日志,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及容器的数据管理操作。 容器中管理...
03-docker的数据卷.mp4 04-手动制作docker镜像.mp4 05-自动构建docker镜像.mp4 docker-day3 01-从零开始编写kod项目dockerfile.mp4 02-dockerfile的指令讲解.mp4 03-docker镜像的分层.mp4 04-docker的容器互联.mp4 ...
docker部署mysql容器自启动并挂载数据卷
《Docker技术集群与应用》2套期末考试卷AB卷带答案习题试卷模拟卷.pdf
数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。 数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数据卷,类似在系统中使用 mount ...
Docker容器的卷驱动程序插件。 描述 Isilon卷驱动程序插件与Docker引擎一起使用,为容器提供卷支持。 这些卷托管在一个Isilon群集上,因此使所有Isilon数据管理工具(快照,备份等)可立即用于该容器卷。 安装 安装...
Flocker 同时也提供了 API 和命令行工具来进行功能的操作,你可以用它来:部署一个多容器应用到多个主机在不同主机之间移动容器以及对应的卷当容器更改主机时对数据卷进行绑定和解绑在不同的服务器之间移植本地数据...