Docker容器数据卷介绍及操作示例
作者:Tiamon_ 发布时间:2022-04-03 07:53:30
容器数据卷介绍
什么是数据卷
将运用与运行的环境打包形成容器运行,运行可以伴随着容器,但是我们对数据的要求是持久化的。
容器之间希望有可能共享数据。
Docker 容器产生的数据,如果不通过 docker commit 生成新的镜像,使得数据做为镜像的一部分保存下载,那么当容器删除后,数据自然也就没有了。为了能保存数据在 docker 中我们使用卷。
数据卷能做什么?
容器的持久化
容器间继承和共享数据
卷就是目录或文件,存在于一个或多个容器中,由 docker 挂载到容器,但不属于联合文件系统,因此能够绕过 Union File System 提供一些用于持续存储或共享数据的特性。
卷的设计目的就是数据的持久化,完全独立于容器的生存周期因此 Docker 不会再容器删除时删除其挂载的数据卷。
特点
数据卷可在容器之间共享或重用数据
卷中的更改可以直接生效
数据卷中的更改不会包含在镜像的更新中
数据卷的生命周期一直持续到没有容器使用它为止
Docker 容器数据卷操作
直接命令添加数据卷
命令格式
docker run -it -v 宿主机绝对路径:容器内绝对路径 镜像名
案例演示
#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、在 / 目录下创建 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 容器并挂载数据卷
[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 的文件
[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
来源:https://blog.csdn.net/Tiamon_/article/details/109432659
猜你喜欢
- 在Google宣布收购Feedburner一年以后,adsense for feed这个备受期待的功能,终于要整合进Feedburner了。
- 又到月底了,年关将至,是许多站长朋友都在为GOOGLE公司汇出来的广告费奔走,目前国内支持西联汇款的只有中国邮政和中国农行两家公司,中国邮政
- 作为中国千千万万草根中的一个,我深感荣幸,因为这么多人参与,正说明了这个行业是如此的朝阳。哈哈废话少说。其实刚开始对地方分类网站了解不多,初
- 有Godaddy主机用户说想配置一个Javaservlet,首先需要做的就是在localbox里汇编它。可以把类文档上载到WEB-INF/c
- 在一个著名博客上的评论一天可能被几百个读者浏览。随着博客寿命的延长,读者会越多,您会发现一个简单的评论会映射您自己。每个博客评论通常都是永久
- 信息服务器IIS是BACKOFFICE系列产品 * 能最强大、最流行的应用程序,它与整个BACKOFFICE组件一样,IIS也是围绕WINDO
- 1.脚本vim环境在脚本中通常要显示一些脚本信息,这些信息可以通过对vim设定使其自动出现/etc/vimrc 此文件是vim的主配置文件,
- 1.Apache Rewrite的主要功能 就是实现URL的跳转和隐藏真实地址,基于Perl语言的正则表达式规范。平时帮助我们实现拟静态,拟
- 最近做一个项目,需要用centos做数据服务器,用mysql数据库,就需要安装mysql数据库,之前没接触过cen
- 一、 前言随着各大网站纷纷推出邮箱收费服务,广大网民正在逐渐适应 "有偿服务"的概念,与此同时,他们也对收费邮箱的服务质
- 距北京奥运会开幕不到一个月,奥运比赛的绝大部分赛程均已敲定。16天跌宕起伏的赛事充满了令人眼花缭乱的看点,为了方便读者找到每天比赛的重点,我
- 为了助力社区门户的运营建设,康盛创想(Comsenz)全新推出的社区论坛系统Discuz! 7.2版本进一步优了产品细节,在版块管理上新增了
- 北京时间11月3日消息,千橡互动集团董事长兼首席执行官陈一舟今日做客腾讯科技互联网大会访谈室时表示,公司发展重心仍然保持在人人网上。持续在较
- 研究起因由于近些日子我的VPS遭受攻击,不管是win的还是linux的都遭受了UDP攻击,流量剧增不一会DOWN机了,这让我很恼火,非常想知
- 一个中心是指以用户体验为中心,两个基本点是指以寻找产品差异化,寻找盈利模式点。那么四项基本原则是针对一个中心,即用户体验为中心的阐述。我们在
- 建立博客有助于打造卓越企业的核心要件。企业的核心需求如下所示:妙点子好产品能见度训练有素的团队,为企业的成功而努力不懈提升业务的创意,改善公
- 一,准备工作 1,登录进VPS控制面板,准备好随时重启VPS。 2,关闭Web Server先,过高的负载会导致后面的操作很难进行,甚至直接
- 最近总是有用户向我要求“怎么不在软件里加点VIP的视频?”“可以看特别的频道或电影吗”诸多这样的问题。存在即是合理,想必做视频网站永远都无意
- 本文实例为大家分享了Linux内存泄漏检测的shell脚本,供大家参考,具体内容如下#!/bin/shif [ $# -ne 1 ]; th
- 在第17届年度电子娱乐会议(17th Annual Digital Entertainment Conference),动视暴雪的首席财务官