如何在 Docker 容器外部持久化数据

DockerDockerBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

Docker 容器提供了一种强大且高效的方式来打包和部署应用程序,但管理持久数据可能是一项挑战。在本教程中,你将学习如何在 Docker 容器外部持久化数据,确保即使容器停止或删除,你的重要数据仍然可访问且安全。

Docker 容器简介

Docker 是一个广受欢迎的容器化平台,它允许开发者将应用程序及其依赖项打包到称为容器的隔离、可移植且可重现的环境中。这些容器可以在不同的计算环境中一致地运行,从而更轻松地开发、部署和管理应用程序。

什么是 Docker 容器?

Docker 容器是一个轻量级、独立且可执行的软件包,它包含运行应用程序所需的一切,包括代码、运行时、系统工具、系统库和设置。容器相互隔离,并且与主机操作系统隔离,无论底层基础设施如何,都能确保一致且可预测的行为。

Docker 容器的优点

  • 可移植性:Docker 容器可以在任何安装了 Docker 的机器上运行,确保在不同环境中行为一致。
  • 可扩展性:容器可以轻松地向上或向下扩展,从而更轻松地应对应用程序需求的波动。
  • 高效性:容器比传统虚拟机更轻量级、更高效,因为它们共享主机操作系统的内核。
  • 可重现性:Docker 容器提供了一种一致且可靠的方式来打包和分发应用程序,确保它们在任何地方都能以相同的方式运行。

Docker 架构

Docker 使用客户端 - 服务器架构,其中 Docker 客户端与 Docker 守护进程(服务器)通信以执行命令和管理容器。Docker 守护进程负责构建、运行和分发 Docker 容器。

graph LD subgraph Docker 架构 客户端 -- 通信 --> 守护进程 守护进程 -- 构建、运行、分发 --> 容器 end

开始使用 Docker

要开始使用 Docker,你需要在系统上安装 Docker 引擎。你可以从 Docker 官方网站(https://www.docker.com/get-started)下载并安装 Docker。安装完成后,你可以使用 docker 命令行工具与 Docker 守护进程进行交互并管理你的容器。

使用 Docker 卷实现数据持久化

使用 Docker 容器时的一个关键挑战是数据持久化问题。默认情况下,容器内存储的数据是临时的,这意味着当容器停止或删除时数据会丢失。为了克服这个问题,Docker 提供了一个名为“卷”的功能,它允许你在容器外部持久化数据。

什么是 Docker 卷?

Docker 卷是一种独立于容器生命周期来存储和管理数据的方式。卷存储在主机文件系统上(或者对于远程卷存储在远程主机上),并且可以挂载到一个或多个容器中。这使得即使容器停止、删除或重新创建,数据也能持久存在。

Docker 卷的类型

Docker 支持几种类型的卷:

  1. 命名卷:这些卷被分配一个唯一的名称,并存储在主机文件系统上由 Docker 管理的位置。
  2. 绑定挂载:绑定挂载允许你将主机文件系统上的一个目录直接映射到容器中。
  3. 匿名卷:这些是由 Docker 创建和管理的临时卷,当容器被删除时会被移除。

创建和使用 Docker 卷

要创建一个命名卷,你可以使用 docker volume create 命令:

docker volume create my - volume

然后你可以使用 -v--mount 标志将卷挂载到容器中:

docker run -v my - volume:/app ubuntu

或者

docker run --mount source = my - volume,target = /app ubuntu

备份和恢复 Docker 卷

要备份一个 Docker 卷,你可以使用带有 --volumes - from 标志的 docker run 命令来创建一个挂载该卷的容器,然后使用像 tar 这样的工具来创建卷数据的存档:

docker run --rm --volumes - from my - container - v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /app

要恢复该卷,你可以使用相同的 tar 命令将数据提取回卷中:

docker run --rm -v my - volume:/restore -v $(pwd):/backup ubuntu bash -c "cd /restore && tar xvf /backup/backup.tar --strip 1"

通过理解和利用 Docker 卷,你可以确保应用程序数据在单个容器的生命周期之外仍然持久存在,从而更轻松地管理和维护基于 Docker 的应用程序。

数据持久化的实际用例

Docker 卷是一项强大的功能,可应用于各种需要数据持久化的用例。以下是一些可以利用 Docker 卷的常见场景:

数据库存储

Docker 卷最常见的用例之一是存储数据库数据。数据库通常需要持久存储,以确保在容器停止或删除时数据不会丢失。通过将 Docker 卷挂载到数据库容器的数据目录,可以确保数据库数据存储在容器外部,并在容器生命周期事件中持续存在。

docker run -d --name db -v db-data:/var/lib/postgresql/data postgres

媒体和文件存储

Docker 卷还可用于存储媒体文件、用户生成的内容以及其他需要在容器生命周期之外持久存在的文件类型。这对于 Web 应用程序、内容管理系统和其他需要持久文件存储的服务特别有用。

docker run -d --name web -v web-content:/var/www/html nginx

配置和日志数据

除了存储应用程序数据外,Docker 卷还可用于持久化配置文件、日志数据以及对应用程序正常运行至关重要的其他类型的元数据。这有助于故障排除、审计和维护基于 Docker 的基础设施。

docker run -d --name app -v app-config:/etc/app -v app-logs:/var/log/app myapp

备份和恢复

Docker 卷还可用作备份和恢复过程的基础。通过定期备份存储在卷中的数据,可以确保在发生故障或灾难时能够轻松恢复应用程序。

docker run --rm --volumes-from db -v $(pwd):/backup ubuntu tar cvf /backup/db-backup.tar /var/lib/postgresql/data

通过理解和利用这些实际用例,可以有效地利用 Docker 卷来确保基于 Docker 的应用程序的长期可靠性和可用性。

总结

在本教程结束时,你将全面了解如何使用 Docker 卷在容器外部持久化数据。你还将探索数据持久化的实际用例,使你能够构建强大且可扩展的基于 Docker 的应用程序,这些应用程序能够可靠地存储和检索关键数据。