当前位置: 首页 > news >正文

Docker技术系列文章,第四篇——容器数据管理

        在容器化应用的开发与部署过程中,数据管理是至关重要的一环。容器的生命周期通常较为短暂,若不妥善管理容器内的数据,一旦容器被删除或重新创建,数据可能会丢失。Docker 提供了一系列强大的数据管理机制,确保容器中的数据能够安全存储、持久化以及方便地在不同容器间共享。本篇文章将深入探讨 Docker 容器数据管理的相关知识,包括数据卷、数据持久化以及数据卷容器等内容。​

一、数据持久化的重要性​

在传统的应用部署中,数据通常存储在服务器的文件系统中。而在容器化环境下,容器是高度可移植和可替换的。当一个容器停止或被删除时,其默认的可写层中的数据也会随之消失。例如,一个运行数据库的容器,如果没有对其数据进行特殊处理,当容器重新启动或被替换时,数据库中的所有数据都将丢失,这对于业务系统来说是不可接受的。因此,实现容器数据的持久化是保障应用数据安全和连续性的关键。​

二、数据卷(Volumes)​

1. 什么是数据卷​

数据卷是 Docker 提供的一种特殊目录,它绕过了联合文件系统(Union File System),直接将宿主机的目录或文件挂载到容器中。数据卷可以在容器之间共享和重用,并且对数据卷的修改会直接反映在宿主机上,不受容器生命周期的影响。这意味着即使容器被删除,数据卷中的数据依然存在。​

2. 创建和使用数据卷​

创建数据卷​

可以使用docker volume create命令创建一个数据卷。例如,创建一个名为myvolume的数据卷:

docker volume create myvolume

执行该命令后,Docker 会在宿主机的默认数据卷存储路径(通常是/var/lib/docker/volumes/)下创建一个名为myvolume的目录。​

查看数据卷列表​

使用docker volume ls命令可以查看所有已创建的数据卷:

docker volume ls

 输出结果类似如下:

DRIVER VOLUME NAME​

local myvolume

在容器中使用数据卷​

当启动容器时,可以通过-v选项将数据卷挂载到容器内的指定目录。例如,启动一个基于ubuntu镜像的容器,并将myvolume数据卷挂载到容器的/data目录:

docker run -it --name mycontainer -v myvolume:/data ubuntu bash

这里-it选项表示以交互模式运行容器并分配一个伪终端,--name选项为容器指定名称为mycontainer,-v选项后面跟着数据卷名称:容器内挂载点的格式。进入容器后,可以在/data目录下进行文件操作,这些操作会直接反映到宿主机上的数据卷目录中。​

3. 数据卷挂载

挂载主机目录作为数据卷​

除了使用 Docker 管理的数据卷,我们还可以直接将宿主机上的一个目录挂载到容器中作为数据卷。例如,将宿主机的/home/user/data目录挂载到容器的/app/data目录:

docker run -it --name mycontainer -v /home/user/data:/app/data ubuntu bash

这种方式的好处是可以方便地在宿主机和容器之间共享数据,并且可以利用宿主机已有的数据。​

读写权限设置​

默认情况下,数据卷的挂载是可读可写的。但我们也可以通过在-v选项后添加:ro来设置数据卷为只读模式。例如:

docker run -it --name mycontainer -v myvolume:/data:ro ubuntu bash 

这样,容器内对/data目录的写入操作将被拒绝,只能读取数据卷中的内容。​

三、数据持久化示例​

1. 以 MySQL 数据库为例​

假设我们要在 Docker 中运行一个 MySQL 数据库,并确保其数据能够持久化。首先,创建一个数据卷用于存储 MySQL 的数据:

docker volume create mysql_data

 然后,启动 MySQL 容器,将mysql_data数据卷挂载到容器内 MySQL 数据存储的目录(通常是/var/lib/mysql):

docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=rootpassword -v mysql_data:/var/lib/mysql mysql:latest

这里-d选项表示在后台运行容器,-e选项用于设置环境变量,MYSQL_ROOT_PASSWORD是 MySQL 的 root 用户密码。此时,MySQL 数据库的数据会存储在mysql_data数据卷中,即使容器被删除或重新启动,数据依然存在。

容器内的 MySQL 数据目录(/var/lib/mysql)通过数据卷挂载到了宿主机上的mysql_data数据卷目录。当容器运行时,对数据库的写入操作会直接保存在宿主机的数据卷中,从而实现数据的持久化。​

四、数据卷容器

1. 什么是数据卷容器​

数据卷容器是一个专门用于提供数据卷供其他容器挂载的容器。通过使用数据卷容器,可以方便地在多个容器之间共享数据卷,并且可以对数据卷进行集中管理。​

2. 创建和使用数据卷容器​

创建数据卷容器​

首先,创建一个数据卷容器。例如,创建一个基于ubuntu镜像的数据卷容器,并在容器内创建一个数据卷挂载点:

docker run -it --name data_container -v /shared_data ubuntu bash

在这个容器内,可以在/shared_data目录下创建和管理数据。​

从其他容器挂载数据卷容器的数据卷​

现在,我们可以启动其他容器,并将数据卷容器的数据卷挂载到这些容器中。例如,启动一个新的容器app_container,并挂载data_container的数据卷:

docker run -it --name app_container --volumes-from data_container ubuntu bash

这里--volumes-from选项指定了要从哪个数据卷容器挂载数据卷。此时,app_container容器可以访问和修改data_container容器中/shared_data目录下的数据,就像这些数据是在自己的容器内一样。

3. 数据卷容器的优势​

  • 数据共享:多个容器可以通过挂载同一个数据卷容器的数据卷来共享数据,方便在不同容器之间传递数据。​
  • 数据备份和恢复:可以通过对数据卷容器的数据卷进行备份,实现多个容器数据的统一备份。在需要恢复数据时,只需将备份的数据卷挂载到相应的容器即可。

 通过本文对 Docker 容器数据管理的详细介绍,仔细阅读本篇文章后对数据卷、数据持久化以及数据卷容器等概念有了深入的理解,并且掌握了在实际应用中如何有效地管理容器数据,确保数据的安全和持久化。这对于构建可靠的容器化应用系统至关重要。

相关文章:

  • Windows 10/11 RDP | 冻结 / 挂起
  • 《Python实战进阶》No34:卷积神经网络(CNN)图像分类实战
  • ambiq apollo3 ADC实例程序注释
  • 认识 Express.js:Node.js 最流行的 Web 框架
  • Android面试之基础算法总结
  • 【R语言可视化】人口金字塔
  • Windows系统添加路由
  • 什么是ETL
  • Mac上Github加速方案
  • MySQL-视图
  • 子数组 之 logTrick算法,求解或,与,LCM,GCD
  • 详细讲解c++中线程类thread的实现,stl源码讲解之thread
  • HarmonyOs-ArkUI List组件
  • 【论文阅读】基于思维链提示的大语言模型软件漏洞发现与修复方法研究
  • 【NUUO 摄像头】(弱口令登录漏洞)
  • 苏宁开放平台关键字搜索接口接入教程‌
  • 第三天 函数定义与参数传递 - 模块与包管理
  • 红宝书第十四讲:详解JavaScript集合类型:Map、Set、WeakMap
  • mysql高级,mysql体系结构,mysql引擎,存储过程,索引,锁
  • Linux-数据结构-哈夫曼树-哈希表-内核链表
  • 大连地区网站建设/培训课程总结
  • 吕梁市住房与城乡建设厅网站/武汉seo技术
  • 上海网站建设网页制作怎么样/如何获取热搜关键词
  • 做网站怎么做/搜索引擎排名谷歌
  • 做网站一般费用多少/nba最新消息新闻
  • 山东省住房和城乡建设委员会网站/友链交易平台