Docker系列-第五篇Docker容器数据卷

1.是什么

在生产环境中使用 Docker,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及容器的数据管理操作 。
容器中的管理数据主要有两种方式 :

  • 数据卷 ( Data Volumes ) : 容器内数据直接映射到本地主机环境;
  • 数据卷容器( Data Volume Containers ) : 使用特定容器维护数据卷。

一句话:有点类似我们Redis里面的rdb和aof文件

  • 将运用与运行的环境打包形成容器运行 ,运行可以伴随着容器,但是我们对数据的要求希望是持久化的
  • 容器之间希望有可能共享数据

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

为了能保存数据在docker中我们使用卷。

2.能干什么

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

数据卷 ( Data Volumes ) 是一个可供容器使用的特殊目录,它将主机操作系统目录直接映射进容器,类似于 Linux 中的 mount 行为 。

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

特点:
1:数据卷可在容器之间共享或重用数据
2:对数据卷内数据的修改会立马生效,无论是容器内操作还是本地操作;
3:数据卷中的更改不会包含在镜像的更新中
4:数据卷的生命周期一直持续到没有容器使用它为止

  • 容器的持久化
  • 容器间继承+共享数据

3.数据卷

3.1容器内添加-直接命令添加

3.1.1命令

命令: docker run -it -v /宿主机绝对路径目录:/容器内目录 镜像名

docker run -it -v /dataVolume:/dataVloumeContainer centos /bin/bash

查看容器内时候创建成功

查看宿主机是否创建成功

3.1.2查看数据卷是否挂载成功

命令:docker inspect 容器ID

上面的“RW”:true 标识具有读写权限

3.1.3容器和宿主机之间数据共享

主要是在dataVolume 和dataVolumeContainer 两个挂载的目录下演示数据是否共享

上图主要演示在centos docker容器和宿主机中往test.txt文件中写数据,看双方数据是否一致。

结果在centos docker容器中编辑的test.txt文件能同步到宿主机中的test.txt文件中。

在宿主机中编辑的test.txt文件也能同步到centos docker 容器的test.txt中。

3.1.4容器停止退出后,主机修改后数据是否同步

演示步骤:

  • 退出centos docker容器(exit 命令,退出并停止容器)
  • 在宿主机的dataVolume上执行 echo "java world">>test02.txt
  • docker ps -a 查询刚才停止退出的容器id
  • docker start 容器id
  • docker attach 容器id
  • 查看dataVolumeContainer目录下是否有新建的test02.txt和之前的text.txt

3.1.5命令(带权限)

命令: docker run -it -v /宿主机绝对路径目录:/容器内目录:ro 镜像名

添加了ro之后,只允许宿主机进行单项的操作,容器内目录只有读的权限

3.2容器内添加-DockerFile添加

Java EE Hello.java---->Hello.class

Docker images---->DockerFile(dokcer编程)

基于 Dockerfile 创建镜像是常见的方式。 Dockerfile 是一个文本文件,利用给定的指令描述基于某个父镜像创建新镜像的过程 。

DockerFile

  • step1

根目录下新建mydocker文件夹并进入

  • step2

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

VOLUME["/dataVolumeContainer","/dataVolumeContainer2","/dataVolumeContainer3"]

说明:

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

  • step3

File构建

# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","/dataVolumeContainer2"]
CMD echo "finished,--------success1"
CMD /bin/bash
  • step4

build后生成镜像

获得一个新镜像ng/centos

 docker build -f /mydocker/dockerfile -t ng/centos .

  • step5

run容器

  • step6

通过上述步骤,容器内的卷目录地址已经知道对应的主机目录地址哪??

docker会默认生成一个,通过docker inspet 可以查看具体路径

  • step7

验证容器和宿主机之间是否数据共享

  • step8

备注

Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied
解决办法:在挂载目录后多加一个--privileged=true参数即可

4.数据卷容器

4.1是什么

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

如果用户需要在多个容器之间共享一些持续更新的数据,最简单的方式是使用数据卷容器 。 数据卷容器也是一个容器,但是它的目的是专门提供数据卷给其他容器挂载。

4.2总体介绍

以上一步新建的镜像ng/centos为模板并运行容器dc01/dc02/dc03

它们已经具有容器卷

  • /dataVolumeContainer1
  • /dataVolumeContainer2

4.3容器间传递共享(--volumes-from)

  • step 1

先启动一个父容器dc01

docker run -it --name dc01  ng/centos /bin/bash

在dataVolumeContainer2新增内容

  • step 2

dc02/dc03继承自dc01 (主要使用--volumes-from)

docker run -it --name dc02 --volumes-from dc01 ng/centos
docker run -it --name dc03 --volumes-from dc01 ng/centos

dc02 dc03容器继承与dc01容器,并在dc2容器的dataVolumeContainer2文件夹下,新增dc02_add.txt文件。

此时可以看到,dc01 dc03容器也有新增加的文件。

并在dc03容器的dataVolumeContainer2文件夹下,新增dc03_add.txt文件。此时可以看到,dc01 dc02容器也有新增加的文件。

  • step 3

删除dc01,dc02修改后dc03可否访问------->是可以访问的

删除dc01容器

docker container rm -f  dc01 
  • step 4

删除dc02后dc03可否访问---->是可以访问的

  • step 5

新建dc04继承dc03后再删除dc03

docker run -it --name dc04 --volumes-from dc03 ng/centos
docker container rm -f dc03

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

微信公众号


JAVA程序猿成长之路
分享资源,记录程序猿成长点滴。专注于Java,Spring,SpringBoot,SpringCloud,分布式,微服务。

原文地址:https://www.cnblogs.com/niugang0920/p/12185896.html

时间: 2024-10-02 22:02:41

Docker系列-第五篇Docker容器数据卷的相关文章

Docker系列-第八篇Docker常用安装

一.总体步骤 1.搜索镜像 2.拉取镜像 3.查看镜像 4.启动镜像 5.停止容器 6.移除容器 二.安装Tomcat 2.1 docker push方式安装tomcat https://hub.docker.com/_/tomcat docker hub上每个镜像怎么使用,都有对应的说明,这个说明对于每个镜像的安装和使用都很有帮助 2.1.1.docker hub上面查找tomcat镜像 2.1.2.从docker hub上拉取tomcat镜像到本地 2.1.3.docker images查看

【Docker】第五篇 Docker 数据管理

一.基本介绍 数据管理的原因:Docker中的容器一旦删除,容器本身的rootfs文件系统就会被删除,容器中的所有数据就会被删除.为了对一些需要持久化的数据,不随容器删除而删除,所以我们可以通过多个容器中共享数据. 容器管理数据的主要方式: 数据卷(Date Volumes):容器内数据直接映射到本地主机环境 数据卷容器(Data Volumes Containers):使用特定容器维护数据卷 二.数据卷 1.创建数据卷 2.挂载Host的目录作为数据卷 三.数据卷容器 四.备份.恢复和迁移数据

Docker系列-第七篇Docker构建SpringBoot应用

1.基于Dockerfile构建SpringBoot镜像 1.1准备工作 将SpringBoot项目通过maven打成jar包 mvn clean package #使用maven打包项目 1.2使用Dockerfile构建镜像 step1 在存放jar所在目录下创建Dockerfile文件 touch Dockerfile step2 编辑Dockerfile增加以下内容 FROM java:8 MAINTAINER niugang<[email protected]> RUN mkdir

Docker系列-第四篇Docker镜像

1.镜像是什么 镜像是一种轻量级.可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码.运行时.库.环境变量和配置文件. 1.1UnionFS(联合文件系统) UnionFS(联合文件系统):Union文件系统(UnionFS)是一种分层.轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single

8天入门docker系列 —— 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署

原文:8天入门docker系列 -- 第五天 使用aspnetcore小案例熟悉容器互联和docker-compose一键部署 这一篇继续完善webnotebook,如果你读过上一篇的内容,你应该知道怎么去挂载webnotebook日志和容器的远程访问,但是这些还远不够,webnotebook 总要和一些数据库打交道吧,比如说mysql,mongodb,redis,通常情况下这些存储设备要么是以容器的方式承载,要么是由DBA在非容器环境下统一管理. 一:webnotebook连接容器redis

【Docker系列教程之三】Docker容器是如何工作的

在上一篇的文章中,我给大家主要介绍了一下 Docker 环境的搭建,简单的讲解了一下 Docker 架构,以及用 Docker 命令简单演示了一下如何拉去一个 images 镜像.本篇我们将剖析一下 Docker 容器是如何工作的,学习好Docker容器工作的原理,我们就可以自己去管理我们的容器了. Docker架构 在上一篇文章的学习中,我们简单地讲解了Docker的基本架构.了解到了 Docker 使用的是 C/S 结构,即客户端/服务器体系结构.明白了 Docker 客户端与 Docker

Docker系列(五):Docker存储管理

因Docker采用分层文件系统,对容器做的修改都发生在最上层(可写层),这样使得容器可以重复利用.然而,在容器停止时文件系统的最上层(可写层)就消失了,这样容器产生的数据也就无法保存.所以为了持久化存储容器的数据,通常会挂载容器外的存储来保存容器产生的数据,其主要的形式有如下两种方式:1)数据卷2)数据(卷)容器 1.数据卷概念:数据卷是经过特殊设计的目录,可以绕过联合文件系统(UFS),为一个或多个容器提供访问. 设计目的:数据卷设计的目的,在于数据的永久化,它完全独立于容器的生命周期,因此,

docker 12 docker容器数据卷

数据卷概念 ♣我们知道,当我们把一个运行中的容器关闭后,容器里的数据就没有了(如果你做了docker commit操作,数据会保留到新的镜像里面).所以我们就需要用容器数据卷把容器数据进行持久化储存. ♣还有一种情况,就是希望容器之间能共享数据,这时也需要容器数据卷. ♣一句话,数据卷就是用来解决数据持久化和数据共享的. ♣卷就是目录或者文件,存在一个或者多个容器中,由docker宿主机挂载到容器上,但是不属于联合文件系统,因此能绕过联合文件系统提供一些用于持久化存储或者共享数据的特性. ♣卷的

(九) Docker 容器数据卷(挂载)

一.容器数据卷 docker 容器数据卷是容器在运行过程中持久化数据的一种方式,卷是目录或文件,存在于一个或多个容器中,由docker 挂载到容器,但不属于联合文件系统,因此能够绕过Union File System  提供一些用于持续存储或共享数据的特性:卷的设计目的就是数据持久化,完全独立于容器的生命周期,因此docker不会在容器删除时,删除其挂载的数据卷. 特点: 数据卷可在容器之间共享或重用数据. 卷中的更改可以直接生效. 数据卷中的更改,不会包含在镜像中的更新. 数据卷的生命周期一直