原文地址: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容器数据卷
Docker容器数据卷挂载技术是Docker容器持久化数据的核心技术之一。容器数据卷可以实现容器内外的数据共享以及数据持久化存储,这对于容器化应用的部署和运维至关重要。 1. 数据卷挂载概念 在Docker中,数据卷是独立...
容器数据卷 –》实现容器数据的持久化、实现容器间继承与数据的共享容器卷的添加查看是否挂载成功创建文件并验证采用 dockersfile 来创建 实现 新的容器继
——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!
Java是一种高级的面向对象的程序设计语言,它具有广泛的应用和强大的跨平台特性。Java语言于1995年由Sun公司推出,由Java之父詹姆斯高斯林设计。Java的设计目标是提供一种易学易用、功能强大的编程语言,使开发人员...
本文将详细介绍 Docker 容器技术中的数据卷和数据持久化概述、容器数据存放问题、数据卷的概念、容器中数据管理方式、容器数据卷的特征和数据卷最佳使用场景等内容。 一、容器数据存放问题 在 Docker 容器技术中,...
Docker 容器技术中的数据卷类型和区别 Docker 容器技术中的数据卷是一种用于数据持久化和共享的机制。数据卷是 Docker 容器技术中的一种核心概念,它允许容器之间共享数据,并且可以将数据持久化到宿主机文件系统中...
### Docker容器的数据卷:持久化存储的秘诀 随着容器技术的普及和发展,越来越多的企业和开发者开始采用Docker等工具来构建、部署和管理应用程序。Docker作为一种轻量级的容器化解决方案,为开发者提供了诸多便利,...
### 实现跨宿主机多Docker容器间的数据共享 #### 概述 本文将详细介绍如何在不同的宿主机之间实现多个Docker容器之间的数据共享。为了达成这一目标,我们将使用GlusterFS作为网络文件系统,它能够提供分布式、可...
Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来, 那么当容器删除后,数据自然也就没有了。 为了能保存数据在docker中我们使用卷。 一句话:有点类似我们Redis里面...
在Docker容器技术中,数据卷(Volume)是用于持久化容器内数据的重要工具,确保即使容器被删除,数据也能保留。本讲座主要探讨了如何创建和管理数据卷,包括命名卷的创建和挂载卷的创建。 一、命名卷的创建 1. ...
Docker 部署 MySQL 容器自启动并挂载数据卷 Docker 是一个流行的容器化平台,提供了轻量级、可移植的解决方案来部署应用程序。 MySQL 是一个流行的开源关系数据库管理系统,广泛应用于各种应用程序中。本文将介绍...
* Docker 容器数据卷应用:如何使用 Docker 容器数据卷来存储和共享数据。 三、Docker 镜像管理 * 了解 Docker 镜像:Docker 镜像的概念、类型和使用方法。 * Docker 镜像管理:如何创建、管理和使用 Docker 镜像...
18_Docker_容器数据卷介绍
Docker 是一个流行的开源平台,用于构建、部署和运行应用程序的容器化解决方案。它通过将应用程序及其依赖项封装在一个轻量级的可移植容器中,实现了跨不同环境的无缝迁移。在本文中,我们将深入探讨如何修改Docker...
20_Docker_容器数据卷用DockerFile添加
21_Docker_容器数据卷volumes-from
19_Docker_容器数据卷用V命令添加