『现学现忘』Docker基础|『现学现忘』Docker基础 — 28、Docker容器数据卷介绍
目录
- 1、什么是Docker容器数据卷
- 2、数据卷的作用
- 3、数据卷的使用
1、什么是Docker容器数据卷 Docker容器数据卷,即
Docker Volume
(卷)。当Docker容器运行的时候,会产生一系列的数据文件,这些数据文件会在关闭Docker容器时,直接消失的。但是其中产生部分的数据内容,我们是希望能够把它给保存起来,另作它用的。
所以我们期望:
- 将应用与运行的环境打包形成容器运行,伴随着容器运行产生的数据,我们希望这些数据能够持久化。
- 希望容器之间也能够实现数据的共享。
docker commit
命令生成新的镜像,把数据做为镜像的一部分保存下来。那么当容器删除后,数据自然也就没有了。但为了能保存Docker容器中的数据,Docker为我们提供了卷技术(Volume
)。总结:Docker容器中产生的数据,同步到本地,这就是卷技术。也就是通过目录的挂载,将容器内的目录,挂载到Linux系统上面,实现容器数据的持久化。2、数据卷的作用 数据卷就是目录或文件,存在于一个或多个容器中,由Docker挂载到容器,但不属于联合文件系统,因此能够绕过
Union File System
(联合文件系统),提供一些用于持续存储或共享数据的特性。数据卷的设计目的就是为了Doeker容器中数据的持久化,完全独立于容器的生存周期,Docker不会在容器删除时,删除其挂载的数据卷。
数据卷:
- 数据卷可在容器之间共享或重用数据。
- 数据卷中的更改可以直接生效。
- 数据卷中的更改不会包含在镜像的更新中。
- 数据卷的生命周期一直持续到没有容器使用它为止。
-v
参数给容器添加数据卷,Volume
(卷)的首字母。我们以CentOS容器为例进行演示。
步骤1:下载CentOS镜像。
# docker pull centos
[root@192 ~]# docker images
REPOSITORYTAGIMAGE IDCREATEDSIZE
centoslatest300e315adb2f3 months ago209MB
步骤2:启动CentOS镜像,并挂载数据卷。
命令:
docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名或镜像ID
我们希望宿主机
/home
中的HostDataVolume
目录和容器中/home
中的ContainerDataVolume
目录实现数据卷挂载。我们先来查看宿主机
/home
目录的内容,如下:[root@192 ~]# ll /home/
总用量 0
没有任何文件。
执行启动CentOS容器命令:
# 启动centos容器
[root@192 ~]# docker run -it -v /home/HostDataVolume:/home/ContainerDataVolume centos /bin/bash# 查看centos容器中/home目录中内容
[root@5f63a0fc88c5 /]# ls /home/
ContainerDataVolume# 我们可以看到在centos容器的/home目录里,有ContainerDataVolume目录
# 这个目录肯定是容器启动后,根据
# -v /home/HostDataVolume:/home/ContainerDataVolume创建的。
我们在来看看宿主机上
/home
目录的内容,如下:[root@192 ~]# ls /home/
HostDataVolume
发现生成了
HostDataVolume
文件夹,说明我们数据卷的挂着初步成功。提示:挂载的文件夹可以存在也可以不存在,不存在则会自动创建。步骤3:验证CentOS容器数据卷是否挂着成功。
我们可以使用
docker inspect
命令,来查看CentOS容器的详细数据。[root@192 ~]# docker ps
CONTAINER IDIMAGECOMMANDCREATEDSTATUSPORTS
5f63a0fc88c5centos"/bin/bash"10 minutes agoUp 10 minutes# 查看centos容器的详细数据
[root@192 ~]# docker inspect 5f63a0fc88c5
[
{
"Id": "5f63a0fc88c5ef2804a45dff0fbf82ae153f2df04887427a3057668867d64443",
"Created": "2021-03-18T11:35:14.632025511Z",... # 省略
... # 省略"HostConfig": { # 主机配置
"Binds": [
"/home/HostDataVolume:/home/ContainerDataVolume"
],... # 省略
},
... # 省略"Mounts": [# 容器挂载的数据卷
{
"Type": "bind",
"Source": "/home/HostDataVolume", # 宿主机内地址
"Destination": "/home/ContainerDataVolume", # Docker容器内的地址
"Mode": "",# 两目录就好比同一个目录。
"RW": true,# 支持读写操作
"Propagation": "rprivate"
}
],
"Config": {
... # 省略# 新版的Dodker把Volumes信息放到了Mounts的Json字待串里了
"Volumes": null,... # 省略
}
... # 省略
}
]
[root@192 ~]#
【『现学现忘』Docker基础|『现学现忘』Docker基础 — 28、Docker容器数据卷介绍】看到上面的信息,主要是
Mounts
属性,说明数据卷挂载已经成功。推荐阅读
- JavaWeb实战|IDEA+Java+SSM+Mysql+Bootstrap+Maven实现学校教务管理系统
- 『德不孤』Pytest框架|『德不孤』Pytest框架 — 15、Pytest参数化
- 『德不孤』Pytest框架|『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件
- PMP搞心态!解读最新『三大领域』考试内容((附上第7版教材))
- 『现学现忘』Docker基础|『现学现忘』Docker基础 — 26、Docker镜像分层的理解
- 『现学现忘』Docker基础|『现学现忘』Docker基础 — 24、Docker图形化管理工具Portainer
- C语言实现学生宿舍信息管理系统课程设计
- C++实现学生宿舍管理系统
- 『现学现忘』Docker基础|『现学现忘』Docker基础 — 22、使用Docker安装Nginx
- 『现学现忘』Docker常用命令|『现学现忘』Docker常用命令 — 21、容器常用命令(三)