Docker之快速搞定容器数据卷

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 前面我们介绍了镜像和容器,通过镜像我们可以启动多个容器,但是我们发现当我们的容器停止获取删除后,我们在容器中的应用的一些数据也丢失了,这时为了解决容器的数据持久化,我们需要通过容器数据卷来解决这个问题,本文我们就来介绍下容器数据卷。


 前面我们介绍了镜像和容器,通过镜像我们可以启动多个容器,但是我们发现当我们的容器停止获取删除后,我们在容器中的应用的一些数据也丢失了,这时为了解决容器的数据持久化,我们需要通过容器数据卷来解决这个问题,本文我们就来介绍下容器数据卷。

1.是什么

 Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据做为镜像的一部分保存下来,那么当容器删除后,数据自然也就没有了。为了能保存数据在docker中我们使用卷。简单来说,容器卷就相当于Redis中持久化方式的RDB和AOF。

2.解决了什么问题

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

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

特点:

   数据卷可在容器之间共享或重用数据

   卷中的更改可以直接生效

   数据卷中的更改不会包含在镜像的更新中

   数据卷的生命周期一直持续到没有容器使用它为止

   持久化,容器间继承和共享数据

3.数据卷

 首先我们来看看数据卷的使用方式

3.1 直接命令添加

3.1.1 挂载数据卷

添加的命令

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

image.png

我们发现执行了该命令后,在宿主机中会添加mydatavolume文件夹,同时在容器中的根目录中也有了datavolumecontainer文件夹。

image.png

这表示数据卷挂载成功了。同时我们也可以通过前面介绍的 docker inspect 容器名称ID来查看容器的 json数据

image.png

3.1.2 数据共享操作

 数据卷挂载成功后,我们来看看容器和宿主机之间的数据共享,我们先在宿主机的mydatavolume目录中创建一个文件。然后到容器的datavolumecontainer目录中查看是否有相同的文件,然后我们再反过来测试。

image.png

然后我们发现在容器中也有了相同的文件,而且内容也一致。反过来

image.png

这就说明容器和宿主机中的数据实现了数据共享

3.3.3 容器停止数据共享

 接下来我们把容器停止掉,然后在宿主机中更新数据,然后启动容器我们看看数据是否还能同步。

image.png

更新宿主机中的数据

image.png

启动原来的容器查看。

image.png

3.3.4 权限管理

 前面我们介绍的共享的权限是在容器中具有读写的权限。通过docker inspect 容器ID 我们也可以看到

image.png

我们可以修改该权限

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

image.png

查看状态

image.png

宿主机添加文件

image.png

容器中查看

image.png

创建文件或者修改文件会失败

image.png

3.2 DockerFile添加

 DockerFile下篇文章我们会专门来介绍,此处我们先来使用看看效果。

3.2.1 mydocker文件夹

 在根目录下创建mydocker文件夹

image.png

3.2.2 VOLUM指令

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

   说明:

   出于可移植和分享的考虑,用-v 主机目录:容器目录这种方法不能够直接在Dockerfile中实现。

   由于宿主机目录是依赖于特定宿主机的,并不能够保证在所有的宿主机上都存在这样的特定目录。

3.2.3 File构建

 构建File文件

image.png

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

3.2.4 build新镜像

docker build -f /mydocker/dockerfile1 -t bobokaoya/centos .

image.png

3.2.5 run一个新容器

 根据上面新创建的镜像我们来run一个新容器

image.png

那么如此一来,对应的宿主机的映射地址在哪呢?docker inspect 容器ID来查看

image.png

容器的 共享目录中创建 文件。

image.png

去宿主中的映射目录中查看

image.png

搞定~

注意

   Docker挂载主机目录Docker访问出现cannot open directory .: Permission denied

   解决办法:在挂载目录后多加一个–privileged=true参数即可

4.数据卷容器

 命名的容器挂载数据卷,其它容器通过挂载这个(父容器)实现数据共享,挂载数据卷的容器,称之为数据卷容器,我们在前面的案例基础上来介绍

4.1 启动一个父容器

docker run -it --name dc01 bobokaoya/centos

image.png

然后在共享目录中创建文件

image.png

4.2 创建两个子容器

创建dc02

docker run -it --name dc02 --volumes-from dc01 bobokaoya/centos

image.png

同时在dc02中修改了文件

我们在创建dc03容器,同时继承dc01

docker run -it --name dc03 --volumes-from dc01 bobokaoya/centos

image.png

我们发现dc03中也看到dc02修改的数据,说明共享是成功的。

4.3 删除dc01,查看dc02和dc03是否共享

 我们停掉dc01并删除,dc02和dc03之间的数据还是共享的

image.png

dc02修改,然后查看dc03

image.png

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


相关实践学习
DataV Board用户界面概览
本实验带领用户熟悉DataV Board这款可视化产品的用户界面
阿里云实时数仓实战 - 项目介绍及架构设计
课程简介 1)学习搭建一个数据仓库的过程,理解数据在整个数仓架构的从采集、存储、计算、输出、展示的整个业务流程。 2)整个数仓体系完全搭建在阿里云架构上,理解并学会运用各个服务组件,了解各个组件之间如何配合联动。 3 )前置知识要求   课程大纲 第一章 了解数据仓库概念 初步了解数据仓库是干什么的 第二章 按照企业开发的标准去搭建一个数据仓库 数据仓库的需求是什么 架构 怎么选型怎么购买服务器 第三章 数据生成模块 用户形成数据的一个准备 按照企业的标准,准备了十一张用户行为表 方便使用 第四章 采集模块的搭建 购买阿里云服务器 安装 JDK 安装 Flume 第五章 用户行为数据仓库 严格按照企业的标准开发 第六章 搭建业务数仓理论基础和对表的分类同步 第七章 业务数仓的搭建  业务行为数仓效果图  
相关文章
|
24天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
181 77
|
5天前
|
搜索推荐 安全 数据安全/隐私保护
7 个最能提高生产力的 Docker 容器
7 个最能提高生产力的 Docker 容器
74 35
|
4天前
|
Ubuntu Linux 开发工具
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
Docker 是一个开源的容器化平台,允许开发者将应用程序及其依赖项打包成标准化单元(容器),确保在任何支持 Docker 的操作系统上一致运行。容器共享主机内核,提供轻量级、高效的执行环境。本文介绍如何在 Ubuntu 上安装 Docker,并通过简单步骤验证安装成功。后续文章将探讨使用 Docker 部署开源项目。优雅草央千澈 源、安装 Docker 包、验证安装 - 适用场景:开发、测试、生产环境 通过以上步骤,您可以在 Ubuntu 系统上成功安装并运行 Docker,为后续的应用部署打下基础。
docker 是什么?docker初认识之如何部署docker-优雅草后续将会把产品发布部署至docker容器中-因此会出相关系列文章-优雅草央千澈
|
10天前
|
存储 Kubernetes 开发者
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
Docker 是一种开源的应用容器引擎,允许开发者将应用程序及其依赖打包成可移植的镜像,并在任何支持 Docker 的平台上运行。其核心概念包括镜像、容器和仓库。镜像是只读的文件系统,容器是镜像的运行实例,仓库用于存储和分发镜像。Kubernetes(k8s)则是容器集群管理系统,提供自动化部署、扩展和维护等功能,支持服务发现、负载均衡、自动伸缩等特性。两者结合使用,可以实现高效的容器化应用管理和运维。Docker 主要用于单主机上的容器管理,而 Kubernetes 则专注于跨多主机的容器编排与调度。尽管 k8s 逐渐减少了对 Docker 作为容器运行时的支持,但 Doc
71 5
容器化时代的领航者:Docker 和 Kubernetes 云原生时代的黄金搭档
|
16天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
43 3
实战~如何组织一个多容器项目docker-compose
|
10天前
|
Unix Linux Docker
CentOS停更沉寂,RHEL巨变限制源代:Docker容器化技术的兴起助力操作系统新格局
操作系统是计算机系统的核心软件,管理和控制硬件与软件资源,为用户和应用程序提供高效、安全的运行环境。Linux作为开源、跨平台的操作系统,具有高度可定制性、稳定性和安全性,广泛应用于服务器、云计算、物联网等领域。其发展得益于庞大的社区支持,多种发行版如Ubuntu、Debian、Fedora等满足不同需求。
38 4
|
26天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
80 3
|
4月前
|
Linux Docker 容器
Docker操作 :容器命令
Docker操作 (四)
210 56
|
3月前
|
安全 Shell Linux
docker进入容器命令
docker进入容器命令
101 1
|
4月前
|
应用服务中间件 Shell nginx
Docker容器操作基础命令
关于Docker容器操作基础命令的教程,涵盖了从启动、查看、删除容器到端口映射和容器信息获取的一系列常用命令及其使用方法。
127 14