---
title:
slug:
description:
creation: 2026-06-17
lastmod: " 2026-06-17"
image: cover.png
math:
license:
hidden: false
draft: false
categories:
tags:
  - docker
  - 数据持久化
  - 卷
  - 绑定挂载
---

# 数据持久化

## 为什么需要数据持久化

每个容器都具备其运行所需的一切，无需依赖主机上任何预安装的依赖项。由于容器独立运行，它们对主机和其他容器的影响极小。但这种隔离也意味着容器默认无法直接访问主机上的数据。

启动容器时，会使用镜像提供的文件和配置。每个容器都可以创建、修改和删除文件，且不会影响其他容器。删除容器时，这些文件更改也会被删除。对于数据库等应用，我们需要在容器重启后保留数据。

## 卷（Volumes）

卷是一种存储机制，它能够在单个容器的生命周期之外持久化数据。

创建一个卷：
```console
docker volume create log-data
````

在启动容器时挂载卷：

```console
docker run -d -p 80:80 -v log-data:/logs docker/welcome-to-docker
```

## 绑定挂载（Bind Mounts）

`-v`（或 `--volume`）和 `--mount` 标志都允许你在本地计算机和 Docker 容器之间共享文件或目录。

- **`-v`** ：简单方便，主机位置不存在时自动创建目录。
- **`--mount`** ：提供更精细的控制，适合生产部署。

## 文件权限

使用 `:ro`（只读）或 `:rw`（读写）标志：

```console
docker run -v HOST-DIRECTORY:/CONTAINER-DIRECTORY:rw nginx
```

## 卷 vs 绑定挂载

- **卷**：适合持久化数据，生命周期独立于容器。
- **绑定挂载**：适合开发环境中的实时文件共享。

## 管理卷

- `docker volume ls` — 列出所有卷
- `docker volume rm <volume-name-or-id>` — 删除卷
- `docker volume prune` — 删除所有未使用的卷

详细的端口映射与数据持久化结合使用，请参考 [Docker 基础与架构](app://obsidian.md/Docker%20%E5%9F%BA%E7%A1%80%E4%B8%8E%E6%9E%B6%E6%9E%84) 和 [网络与端口](app://obsidian.md/%E7%BD%91%E7%BB%9C%E4%B8%8E%E7%AB%AF%E5%8F%A3)。