【赵渝强老师】Docker的数据持久化

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 在生产环境中使用Docker时,为了实现数据的持久化和共享,可以通过数据卷(Data Volumes)和数据卷容器(Data Volume Containers)两种方式来管理数据。数据卷是一个独立于容器的挂载目录,可以跨多个容器共享和重用。数据卷容器则是一种特殊容器,用于维护数据卷,便于数据迁移和共享。本文通过示例详细介绍了这两种方法的使用步骤。

b043.png    

在生产环境中使用Docker时,一方面,往往需要对数据进行保存或者在多个容器之间进行数据共享;另一方面,在Docker的容器被删除销毁后,并不保留容器状态的信息。那么如何实现信息的持久化操作呢?这必然涉及容器的数据管理操作和数据的持久化。

   

在Docker容器中,实现数据的管理(或者说实现数据的持久化),主要可以通过两种方式来实现。视频讲解如下:



一、数据卷(Data Volumes)

   

数据卷的本质其实是一个挂载目录,类似使用Linux的mount命令挂载目录。数据卷可以供一个或多个容器使用,可以在不同的容器之间共享和重用数据卷。对数据卷的修改会立即生效。数据卷与容器彼此独立,对数据卷的更新不会影响镜像。


提示:即使容器被删除,数据卷默认也会一直存在,直到删除数据卷为止。

   

在Docker中可以使用-mount和-v两种方式给容器挂载数据卷,下图展示了数据卷与容器的关系。


   

下面通过一个示例来演示如何使用Docker的数据卷。


(1)创建一个名为myvolume的数据卷。

docker volume create myvolume


(2)查看所有的数据卷,如下图所示。

docker volume ls



(3)使用“docker inspect volume”命令查看数据卷的详细信息,如下图所示。

docker inspect myvolume


提示:从图中可以看出,myvolume被挂载到了“/var/lib/docker/volumes/myvolume/_data”目录下,即在默认情况下,创建的数据卷将会被自动挂载到宿主机的“/var/lib/docker/volumes/”目录下。


(4)启动一个容器,并使用myvolume数据卷。这里使用了Nginx镜像创建了一个容器,并将容器的80端口映射到了宿主机的1234端口,容器的名称是mynginx。

docker run -d -p 1234:80 --name mynginx --mount type=volume,source=myvolume,target=/usr/share/nginx/html/ nginx


其中参数如下:

  • --mount:指定在容器启动时挂载数据卷
  • type:指定数据卷挂载的方式


二、数据卷容器(Data Volume Containers)

 

数据卷容器是一种特殊的容器,它的作用是用来维护数据卷,它可以在多个容器之间共享数据信息。利用数据卷容器也可以很方便地完成数据迁移。下图展示了数据卷、数据卷容器和容器之间的关系。



下面通过一个示例来演示如何使用Docker的数据卷容器。

(1)创建一个数据卷容器dbdata,并在其中创建一个数据卷挂载到“/dbdata”下。

docker run -it -v /dbdata --name dbdata centos


(2)在数据卷容器dbdata中生成一些测试文件,执行下面的语句,如下图所示。


(3)创建一个容器db1,并使用--volumes-from来挂载dbdata容器中的数据卷。

docker run -it --volumes-from dbdata --name db1 centos


(4)在容器db1中查看目录“/dbdata”,就可以看到数据卷容器中的数据文件了,如下图所示。


(5)在容器db1的“/dbdata”目录下生成了一个新的文件b.txt。

echo "Hello Docker" > b.txt


(6)创建一个容器db2,并使用参数--volumes-from来挂载dbdata容器中的数据卷。

docker run -it --volumes-from dbdata --name db2 centos


(7)在容器db2中查看目录“/dbdata”,如下图所示。

提示:通过上面示例可以看出,容器db1和db2都挂载同一个数据卷到相同的“/dbdata”目录下。三个容器的任何一方在该目录下的写入,其他容器都可以看到。这样便可以很方便地实现不同容器之间的数据共享,并且,利用这样的方式能很容易地实现容器数据迁移。




相关文章
|
7天前
|
存储 安全 应用服务中间件
【赵渝强老师】Docker的体系架构
Docker采用客户端-服务器架构,客户端与守护进程通过sockets或RESTful API通信。守护进程负责构建、运行和分发容器。镜像仓库(如Docker Hub和Harbor)存储镜像,容器则基于镜像创建,是运行应用的安全平台。
【赵渝强老师】Docker的体系架构
|
17天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
56 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
7天前
|
Kubernetes 负载均衡 Linux
【赵渝强老师】Docker三剑客
本文介绍了Docker容器中的三个重要工具:Docker Compose、Docker Machine 和 Docker Swarm。Docker Compose用于定义和运行多容器应用,通过YAML文件简化容器管理。Docker Machine支持远程主机上的Docker安装和管理,适用于跨平台使用。Docker Swarm则提供集群管理功能,实现负载均衡和故障迁移,适合大规模部署。文中还提供了相关示例和架构图,帮助读者更好地理解和使用这些工具。
|
7天前
|
存储 关系型数据库 Linux
【赵渝强老师】什么是Docker的镜像
Docker镜像是一个只读模板,包含应用程序及其运行所需的依赖环境。镜像采用分层文件系统,每次修改都会以读写层形式添加到原只读模板上。内核bootfs用于加载Linux内核,根镜像相当于操作系统,上方为应用层。镜像在物理存储上是一系列文件的集合,默认存储路径为“/var/lib/docker”。
|
7天前
|
API Docker 容器
【赵渝强老师】构建Docker Swarm集群
本文介绍了如何使用三台虚拟主机构建Docker Swarm集群。首先在master节点上初始化集群,然后通过特定命令将node1和node2作为worker节点加入集群。最后,在master节点上查看集群的节点信息,确认集群构建成功。文中还提供了相关图片和视频教程,帮助读者更好地理解和操作。
|
7天前
|
调度 Docker 容器
【赵渝强老师】Docker Swarm集群的体系架构
Docker Swarm自1.12.0版本起集成至Docker引擎,无需单独安装。它内置服务发现功能,支持跨多服务器或宿主机创建容器,形成集群提供服务。相比之下,Docker Compose仅限于单个宿主机。Docker Swarm采用主从架构,Swarm Manager负责管理和调度集群中的容器资源,用户通过其接口发送指令,Swarm Node根据指令创建容器运行应用。
|
7天前
|
应用服务中间件 网络安全 数据安全/隐私保护
【赵渝强老师】使用Docker Machine远程管理Docker
Docker Machine 是 Docker 官方提供的远程管理工具,可帮助开发人员在远程主机或虚拟机上安装和管理 Docker 环境。本文介绍了如何在远程主机上安装 Docker 并配置免密码登录,以及使用 Docker Machine 管理远程 Docker 主机的常用命令。
|
7天前
|
NoSQL Redis Docker
【赵渝强老师】使用Docker Compose管理容器
Docker Compose 通过 YAML 文件管理多个容器,简化复杂系统的部署和管理。本文介绍了 Docker Compose 的基本概念,并通过一个包含 Redis DB 和 Python Web 模块的示例,展示了如何使用 Docker Compose 部署和管理多容器应用。手动部署和 Docker Compose 部署的对比突显了 Docker Compose 在系统复杂度增加时的优势。
|
7天前
|
Docker 容器
【赵渝强老师】Docker的None网络模式
Docker容器在网络方面实现了逻辑隔离,提供了四种网络模式:bridge、container、host和none。其中,none模式下容器具有独立的网络命名空间,但不包含任何网络配置,仅能通过Local Loopback网卡(localhost或127.0.0.1)进行通信。适用于不希望容器接收任何网络流量或运行无需网络连接的特殊服务。
|
7天前
|
Docker 容器
【赵渝强老师】Docker的Host网络模式
Docker容器在网络环境中是隔离的,可通过配置不同网络模式(如bridge、container、host和none)实现容器间或与宿主机的网络通信。其中,host模式使容器与宿主机共享同一网络命名空间,提高性能但牺牲了网络隔离性。