在 Ubuntu 上使用 Docker 时,持久化存储通常指:容器删除或重启后,数据依然保留。Docker 提供几种常见方式,最推荐的是 Volume(卷) 和 Bind Mount(绑定挂载)。
docker volume create mydata
查看卷:
docker volume ls
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-v mydata:/var/lib/mysql \
mysql:8
✅ 数据保存在:
/var/lib/docker/volumes/mydata/_data
docker volume inspect mydata
适合:配置文件、日志、代码
docker run -d \
--name nginx \
-v /home/ubuntu/nginx:/usr/share/nginx/html \
-p 80:80 \
nginx
✅ 宿主机目录 /home/ubuntu/nginx 的内容会直接映射到容器中
⚠️ 注意权限问题(尤其是非 root 用户)
| 方式 | 推荐场景 | 管理方便 | 安全性 |
|---|---|---|---|
| Volume | 数据库、重要数据 | ✅ | ✅ |
| Bind Mount | 配置、代码、日志 | ✅ | ⚠️ |
version: "3"
services:
mysql:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- mysql-data:/var/lib/mysql
volumes:
mysql-data:
启动:
docker compose up -d
docker run --rm \
-v mydata:/data \
-v $(pwd):/backup \
busybox \
tar czf /backup/mydata.tar.gz -C /data .
✅ 数据库 → 用 Volume
✅ 配置/日志 → Bind Mount
❌ 不要只放容器内部
如果你有 具体场景(MySQL / Redis / 网站 / 自建服务),我可以给你更精确的配置示例。