首页 > 其他分享 >Docker学习路线5:在 Docker 中实现数据持久化

Docker学习路线5:在 Docker 中实现数据持久化

时间:2023-07-14 19:22:26浏览次数:39  
标签:volume 容器 持久 路线 挂载 Docker my docker

Docker 可以运行隔离的容器,包括应用程序和其依赖项,与主机操作系统分离。默认情况下,容器是临时的,这意味着容器中存储的任何数据在终止后都将丢失。为了解决这个问题并在容器生命周期内保留数据,Docker 提供了各种数据持久化方法。

  • Docker 卷
  • 绑定挂载
  • Docker tmpfs 挂载

Docker 卷

Docker 卷是持久化 Docker 容器生成和使用的数据的首选方法。卷是主机机器上的目录,Docker 用它来存储文件和目录,可以超出容器生命周期。Docker 卷可以在容器之间共享,并提供各种好处,如易于备份和数据迁移。

要创建卷,请使用以下命令:

docker volume create volume_name

要使用卷,请在您的 docker run 命令中添加 --volume (或 -v)标志:

docker run --volume volume_name:/container/path image_name

绑定挂载

绑定挂载允许您将主机机器上的任何目录映射到容器内的目录。这种方法在开发环境中很有用,当您需要修改主机系统上的文件,并且这些更改应立即在容器中生效时。

要创建绑定挂载,请在您的 docker run 命令中使用 --mount 标志,并将 type=bind 添加到其中:

docker run --mount type=bind,src=/host/path,dst=/container/path image_name

Docker tmpfs 挂载

Docker tmpfs 挂载允许您在容器的内存中直接创建临时文件存储。在 tmpfs 挂载中存储的数据快速且安全,但一旦容器终止,数据将丢失。

要使用 tmpfs 挂载,请在您的 docker run 命令中添加 --tmpfs 标志:

docker run --tmpfs /container/path image_name

通过采用这些方法,您可以确保容器生命周期内的数据持久性,增强 Docker 容器的实用性和灵活性。请记住选择最适合您用例的方法,无论是首选 Docker 卷,方便的绑定挂载,还是快速且安全的 tmpfs 挂载。

临时文件系统

默认情况下,Docker 容器内的存储是短暂的,这意味着容器内部进行的任何数据更改或修改只会持续到容器运行的时间。一旦容器停止并移除,所有相关的数据都将丢失。这是因为 Docker 容器的本质是无状态的。

这种临时或短暂的存储称为“临时容器文件系统”。这是 Docker 的一个重要特性,因为它能够在不考虑容器状态的情况下,在不同的环境中快速、一致地部署应用程序。

临时文件系统与数据持久性

任何存储在容器的临时文件系统中的数据在容器停止或移除时都会丢失,这对应用程序的数据持久性构成了挑战。对于像数据库这样需要在多个容器生命周期中保持数据持久性的应用程序,这是特别有问题的。

为了克服这些挑战,Docker 提供了几种数据持久性的方法,例如:

  • :Docker 管理的存储选项,存储在容器的文件系统之外,允许数据在容器重新启动和删除时持久化。
  • 绑定挂载:将主机机器的目录或文件映射到容器中,有效地将主机的存储与容器共享。
  • tmpfs 挂载:内存中的存储,适用于仅需要在容器生命周期内持久化数据的情况。

通过实施这些策略,Docker 确保应用程序数据可以在单个容器的生命周期之外得以保留,使得可以处理有状态的应用程序。

卷挂载(Volume Mounts)

卷挂载是将主机系统上的文件夹或文件映射到容器内部的文件夹或文件的一种方式。这使得即使容器被删除,数据仍然可以在容器外部保持。此外,多个容器可以共享同一个卷,使得容器之间的数据共享变得容易。

创建卷(Creating a Volume)

要在Docker中创建一个卷,您需要运行以下命令:

docker volume create my-volume

此命令将创建名为my-volume的卷。您可以使用以下命令查看创建的卷的详细信息:

docker volume inspect my-volume

将卷挂载到容器(Mounting a Volume in a Container)

要将卷挂载到容器中,您需要在运行容器时使用-v--mount标志。以下是一个例子:

使用-v标志:

docker run -d -v my-volume:/data your-image

使用--mount标志:

docker run -d --mount source=my-volume,destination=/data your-image

在上面的两个示例中,my-volume是我们之前创建的卷的名称,/data是卷将被挂载到容器内的路径。

在多个容器之间共享卷(Sharing Volumes Between Containers)

要在多个容器之间共享卷,只需在多个容器上挂载相同的卷即可。以下是如何在运行不同映像的两个容器之间共享my-volume的示例:

docker run -d -v my-volume:/data1 image1docker run -d -v my-volume:/data2 image2

在此示例中,image1image2将可以访问存储在my-volume中的相同数据。

删除卷(Removing a Volume)

要删除卷,您可以使用docker volume rm命令后跟卷名称:

docker volume rm my-volume

这就是卷挂载在Docker中的基本知识。您可以使用它们高效且安全地在容器之间持久化和共享数据。

最后

为了方便其他设备和平台的小伙伴观看往期文章,链接奉上:

公众号 Let us Coding牛客知乎开源中国CSDN思否掘金InfoQ简书博客园慕课51CTOhelloworld腾讯开发者社区阿里开发者社区

看完如果觉得有帮助,欢迎点赞、收藏关注

标签:volume,容器,持久,路线,挂载,Docker,my,docker
From: https://www.cnblogs.com/xiaowange/p/17554800.html

相关文章

  • cpuset.cpus.effective: no such file or directory (修改 docker cgroup 版本的方法)
    要切换使用v1版cgroup,需要做如下配置: vim/etc/default/grub   GRUB_CMDLINE_LINUX="systemd.unified_cgroup_hierarchy=0" update-grubreboot  完美解决 ......
  • docker 镜像中的文件不是最新的
    Docker镜像中的文件不是最新的在使用Docker构建和管理容器时,我们经常会遇到镜像中的文件不是最新的问题。这可能是因为我们在构建镜像时没有更新文件,或者在拉取镜像时使用的是旧版本。本文将介绍为什么会出现这种情况,并提供相应的解决方案。1.Docker镜像是什么?在深入讨论问题之......
  • docker 检查SQL Server实例的TCP/IP协议是否已启用
    检查SQLServer实例的TCP/IP协议是否已启用作为一名经验丰富的开发者,我将帮助你学习如何检查SQLServer实例的TCP/IP协议是否已启用。以下是整个流程以及每一步需要做的事情。流程步骤描述1连接到SQLServer实例2查询是否已启用TCP/IP协议3根据查询结果判断TC......
  • Docker部署Jmeter+Grafana+InfluxDB
      一:服务器配置Hosthssh505HostName180.184.138.70Port22Userroot前置条件:windows需通过softether客户端连接VPN本机ip:192.168.1.44二:安装docker安装命令:aptinstalldocker.io验证版本:2种方式docker--versiondocker-v出现版本信息则意味着安装成功:Docker......
  • docker命令
    查看启动中的容器:dockersps 查看所有容器:dockersps -a查看镜像:dockersearchgrafana根据镜像名称拉取镜像:dockerpullgrafana/grafana生成grafana容器:dockerrun-d--namesunlin-grafana-p3000:3000grafana/grafana进入grafana容器:dockerexec-it  sunlin-gr......
  • Docker安装ElasticSearch
    Docker安装ElasticSearch标签(空格分隔):linux安装ElasticSearch版本:elasticsearch:7.10.1mkdir-p/usr/local/elasticsearch/configmkdir-p/usr/local/elasticsearch/datachmod777-R/usr/local/elasticsearch/echo"http.host:0.0.0.0">>/usr/local/el......
  • docker安装的metabase存储从h2改成mysql
    1、在mysql创建好数据库和相关用户,并授权CREATEDATABASEmetabase;CREATEUSERmetabase@'172.17.0.0/24'IDENTIFIEDBY'123456';GRANTUSAGEONmetabase.*TO'metabase@'172.17.0.0/24';FLUSHPRIVILEGES; 看一下metabase容器的启动命令,history|grep......
  • docker 配置MySQL主从复制
    启动mysql容器(配置主服务器)dockerrun-p3307:3306--namemysql-master\-v/tmp/mysql/mysql-master/log:/var/log/mysql\-v/tmp/mysql/mysql-master/data:/var/lib/mysql\-v/tmp/mysql/mysql-master/conf:/etc/mysql\-eMYSQL_ROOT_PASSWORD=root\-dmysql:5.7......
  • docker 配置MySQL主从复制
    启动mysql容器(配置主服务器)dockerrun-p3307:3306--namemysql-master\-v/tmp/mysql/mysql-master/log:/var/log/mysql\-v/tmp/mysql/mysql-master/data:/var/lib/mysql\-v/tmp/mysql/mysql-master/conf:/etc/mysql\-eMYSQL_ROOT_PASSWORD=root\-dmysql:5.7......
  • docker 配置MySQL主从复制
    启动mysql容器(配置主服务器)dockerrun-p3307:3306--namemysql-master\-v/tmp/mysql/mysql-master/log:/var/log/mysql\-v/tmp/mysql/mysql-master/data:/var/lib/mysql\-v/tmp/mysql/mysql-master/conf:/etc/mysql\-eMYSQL_ROOT_PASSWORD=root\-dmysql:5.7......