容器数据管理
Docker 容器的数据卷、绑定挂载等数据管理方式
📋 目录
数据卷(Volume)
什么是数据卷
数据卷是 Docker 管理的持久化存储,独立于容器的生命周期。
创建数据卷
# 创建数据卷
docker volume create my-volume
# 创建数据卷并指定驱动
docker volume create --driver local my-volume
# 创建数据卷并指定选项
docker volume create \
--driver local \
--opt type=none \
--opt device=/path/to/data \
--opt o=bind \
my-volume使用数据卷
# 使用数据卷
docker run -d -v my-volume:/data nginx:latest
# 使用匿名数据卷
docker run -d -v /data nginx:latest
# 使用命名数据卷
docker run -d --mount source=my-volume,target=/data nginx:latest管理数据卷
# 列出所有数据卷
docker volume ls
# 查看数据卷详细信息
docker volume inspect my-volume
# 删除数据卷
docker volume rm my-volume
# 删除所有未使用的数据卷
docker volume prune绑定挂载(Bind Mount)
什么是绑定挂载
绑定挂载将宿主机的目录或文件直接挂载到容器中。
使用绑定挂载
# 绑定挂载目录
docker run -d -v /host/path:/container/path nginx:latest
# 绑定挂载文件
docker run -d -v /host/file:/container/file:ro nginx:latest
# 使用 --mount 语法
docker run -d \
--mount type=bind,source=/host/path,target=/container/path \
nginx:latest挂载选项
# 只读挂载
docker run -d -v /host/path:/container/path:ro nginx:latest
# 读写挂载(默认)
docker run -d -v /host/path:/container/path:rw nginx:latest
# 使用 --mount 语法
docker run -d \
--mount type=bind,source=/host/path,target=/container/path,readonly \
nginx:latest临时文件系统(tmpfs)
什么是 tmpfs
tmpfs 是存储在内存中的临时文件系统,容器停止后数据会丢失。
使用 tmpfs
# 使用 tmpfs
docker run -d --tmpfs /tmp nginx:latest
# 指定 tmpfs 大小
docker run -d --tmpfs /tmp:rw,noexec,nosuid,size=100m nginx:latest
# 使用 --mount 语法
docker run -d \
--mount type=tmpfs,destination=/tmp,tmpfs-size=100m \
nginx:latesttmpfs 选项
rw:读写(默认)ro:只读noexec:禁止执行nosuid:禁止 setuidsize:大小限制
数据持久化策略
数据卷 vs 绑定挂载
| 特性 | 数据卷 | 绑定挂载 |
|---|---|---|
| 管理方式 | Docker 管理 | 用户管理 |
| 位置 | Docker 存储目录 | 用户指定 |
| 可移植性 | 高 | 低 |
| 性能 | 好 | 取决于宿主机 |
| 适用场景 | 生产环境 | 开发环境 |
选择建议
- 生产环境:使用数据卷
- 开发环境:使用绑定挂载
- 临时数据:使用 tmpfs
数据备份与恢复
备份数据卷
# 备份数据卷
docker run --rm \
-v my-volume:/data \
-v $(pwd):/backup \
ubuntu:20.04 \
tar czf /backup/backup.tar.gz /data恢复数据卷
# 恢复数据卷
docker run --rm \
-v my-volume:/data \
-v $(pwd):/backup \
ubuntu:20.04 \
tar xzf /backup/backup.tar.gz -C /迁移数据卷
# 导出数据卷
docker run --rm \
-v my-volume:/data \
ubuntu:20.04 \
tar czf - /data > backup.tar.gz
# 导入数据卷
docker run --rm \
-v my-volume:/data \
-i ubuntu:20.04 \
tar xzf - -C /data < backup.tar.gz实用示例
数据库数据持久化
# MySQL 数据持久化
docker run -d \
--name mysql \
-v mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=password \
mysql:8.0应用配置挂载
# 挂载配置文件
docker run -d \
--name nginx \
-v $(pwd)/nginx.conf:/etc/nginx/nginx.conf:ro \
nginx:latest开发环境挂载
# 挂载源代码目录
docker run -it \
--name dev \
-v $(pwd):/workspace \
-w /workspace \
node:16 \
/bin/bash