小知识:Docker容器数据卷介绍及操作示例

容器数据卷介绍

什么是数据卷

将运用与运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求是持久化的。

容器之间希望有可能共享数据。

Docker 容器产生的数据,如果不通过 docker commit 生成新的镜像,使得数据做为镜像的一部分保存下载,那么当容器删除后,数据自然也就没有了。为了能保存数据在 docker 中我们使用卷。

数据卷能做什么?

容器的持久化

容器间继承和共享数据

卷就是目录或文件,存在于一个或多个容器中,由 docker 挂载到容器,但不属于联合文件系统,因此能够绕过 Union File System 提供一些用于持续存储或共享数据的特性。

卷的设计目的就是数据的持久化,完全独立于容器的生存周期因此 Docker 不会再容器删除时删除其挂载的数据卷。

特点

数据卷可在容器之间共享或重用数据 卷中的更改可以直接生效 数据卷中的更改不会包含在镜像的更新中 数据卷的生命周期一直持续到没有容器使用它为止

Docker 容器数据卷操作

直接命令添加数据卷

命令格式

?
1
docker run -it -v 宿主机绝对路径:容器内绝对路径 镜像名

案例演示

?
1
2
3
4
5
6
7
8
9
10
11
12
13
#1、容器与宿主机主机间文件共享
[root@docker ~]# docker run -itd -v /volume:/containervolume centos:latest
c0eb80a4425eac21b933ce1a81132eb08eeaaf30ac5adb077d44c11dd7260268
#2、主机和容器的 / 下均自动创建共享的目录
[root@docker ~]# ll -d /volume
drwxr-xr-x. 2 root root 6 11月  1 23:25 /volume
[root@docker ~]# docker exec -it $(docker ps -q) ls -ld /containervolume
drwxr-xr-x. 2 root root 6 Nov  1 15:25 /containervolume
#3、验证,在容器内的 containervolume 目录下创建 test 文件,发现主机 volume 目录共享了 test 文件
[root@docker ~]# docker exec -it $(docker ps -q) touch /containervolume/test
[root@docker ~]# ll /volume
-rw-r–r–. 1 root root 0 11月  1 23:29 test
#4、退出容器后,主机对 volume 文件进行修改,再次启动容器,发现容器内的 dataVolumeContainer 目录下也同步了 nidaye 文件

 dockerfile 添加数据卷

dockerfile 说明

可在 Dockerfile 中使用 VOLUME 指令来给镜像添加一个或多个数据卷

VOLUME[“/dataVolumeContainer”,”/dataVolumeContainer2″,”/data/VolumeContainer3″]

出于可移植和分享的考虑,用-v 主机目录:容器目录 这种方法不能够直接在 Dockerfile 中实现。由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。

案例演示

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#1、在 / 目录下创建 mydocker 文件夹并进入
[root@docker ~]# mkdir /mydocker
#2、dockerfile 构建
[root@docker ~]# vim /mydocker/dockerfile
FROM centos:latest
#创建的镜像来自于父镜像 centos
VOLUME [“/volume”]
#在 / 下创建数据卷
CMD echo “create—volume—-successl”
#打印数据卷创建成功
CMD /bin/bash
#3、build 生成新的镜像 volume/centos
[root@docker ~]# docker build -f /mydocker/dockerfile -t volume/centos .
Sending build context to Docker daemon  519.2MB
Step 1/4 : FROM centos:latest
—> 0f3e07c0138f
Step 2/4 : VOLUME [“/volume”]
—> Running in 0059989ef83c
Removing intermediate container 0059989ef83c
—> 9a7f6ae84e23
Step 3/4 : CMD echo “create—volume—-successl”
—> Running in 9dd2d3fbd75c
Removing intermediate container 9dd2d3fbd75c
—> 6f8a83b9feca
Step 4/4 : CMD /bin/bash
—> Running in 18edd4a6af38
Removing intermediate container 18edd4a6af38
—> 30b4d769d4e8
Successfully built 30b4d769d4e8
Successfully tagged volume/centos:latest
#镜像创建成功
#4、使用新镜像启动容器
[root@docker ~]# docker run -itd volume/centos
53d070c79a13dd4ecfe3208a3907cd00e4dc3b1a45c2b890d642cb96b7e05217
#5、验证,容器内成功创建目录 volume
[root@docker ~]# docker exec -it $(docker ps -q) ls -ld /volume
drwxr-xr-x. 2 root root 6 Nov  1 16:03 /volume
#6、验证,在宿主机上创建文件 test ,容器 /volume 目录成功共享数据
[root@docker ~]# touch /var/lib/docker/volumes/53d070c79a13dd4ecfe3208a3907cd00e4dc3b1a45c2b890d642cb96b7e05217/_data/test
#宿主机数据卷默认挂载目录
[root@docker ~]# docker exec -it $(docker ps -q) ls -l /volume
-rw-r–r–. 1 root root 0 Nov  1 16:12 test

 Docker 数据卷容器

数据卷容器简介

命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器。

容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器使用它为止。

案例演示

启动一个 centos_1 容器并挂载数据卷

?
1
2
3
4
5
6
7
8
[root@docker ~]# docker run -itd –name=”centos_1″ -v /volume:/volumecontainer_1 centos
9f73357be614f7c5098b2ef3a83534002992ee2f281b8b984ed7af5c03a7e29b
#宿主机 /volume 下创建文件 test
[root@docker ~]# touch /volume/test
#验证,容器 centos_1,/volume/container_1/下共享文件 test
[root@docker ~]# docker exec -it $(docker ps -q) ls -l /volumecontainer_1
total 0
-rw-r–r–. 1 root root 0 Nov  2 14:33 test

启动一个 centos_2 容器并继承容器 centos_1 的文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@docker ~]# docker run -itd –name=”centos_2″ –volumes-from centos_1 centos
baefc86b170c376745761aaea1abc0843521b272213337109510170ff1ccb304
#验证,容器 centos_2 继承了容器 centos_1 的文件
[root@docker ~]# docker exec -it $(docker ps -n 1 -q) ls -l /volumecontainer_1
total 0
-rw-r–r–. 1 root root 0 Nov  2 14:33 test
#验证,在容器 centos_2 中添加文件,宿主机和容器 centos_1 都能共享
[root@docker ~]# docker exec -it $(docker ps -n 1 -q) touch /volumecontainer_1/test_centos_2
#宿主机成功共享文件 test_container_2
[root@docker ~]# ls -l /volume/
总用量 0
-rw-r–r–. 1 root root 0 11月  2 22:33 test
-rw-r–r–. 1 root root 0 11月  2 22:42 test_centos_2
#容器 centos_1成功共享文件 test_container_2
[root@docker ~]# docker exec -it 9f73357be614 ls -l /volumecontainer_1
total 0
-rw-r–r–. 1 root root 0 Nov  2 14:33 test
-rw-r–r–. 1 root root 0 Nov  2 14:42 test_centos_2

以上就是Docker容器数据卷介绍及操作示例的详细内容,更多关于Docker容器数据卷操作的资料请关注服务器之家其它相关文章!

原文链接:https://blog.csdn.net/Tiamon_/article/details/109432659

声明: 猿站网有关资源均来自网络搜集与网友提供,任何涉及商业盈利目的的均不得使用,否则产生的一切后果将由您自己承担! 本平台资源仅供个人学习交流、测试使用 所有内容请在下载后24小时内删除,制止非法恶意传播,不对任何下载或转载者造成的危害负任何法律责任!也请大家支持、购置正版! 。本站一律禁止以任何方式发布或转载任何违法的相关信息访客发现请向站长举报,会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。本网站的资源部分来源于网络,如有侵权烦请发送邮件至:2697268773@qq.com进行处理。
建站知识

小知识:Docker 配置容器固定IP的方法

2023-3-7 19:55:23

建站知识

小知识:docker容器的四种端口映射演示分析

2023-3-7 20:10:08

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索