容器数据管理

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:latest

tmpfs 选项

  • rw:读写(默认)
  • ro:只读
  • noexec:禁止执行
  • nosuid:禁止 setuid
  • size:大小限制

数据持久化策略

数据卷 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

📚 参考资源


相关笔记