在 Ubuntu 上使用 Docker 时,“持久化”通常指容器数据在容器删除或重启后仍然存在。常见做法有以下几种,从最常用到高级依次说明:
Docker 管理的卷,最安全、最常用
docker volume create mydata
docker run -d \
-v mydata:/var/lib/mysql \
--name mysql \
mysql:8
/var/lib/mysql 是容器内路径mydata 是 host 上的 Docker 卷docker volume inspect mydata
数据由 Docker 管理,位于
/var/lib/docker/volumes/
适合你知道路径、需要直接操作文件
docker run -d \
-v /home/ubuntu/data:/app/data \
--name myapp \
myimage
/home/ubuntu/data:Ubuntu 本机目录/app/data:容器内目录✅ 重启、删除容器数据都在
⚠️ 注意权限问题(uid/gid)
docker-compose.ymlversion: "3"
services:
mysql:
image: mysql:8
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
db_data:
启动:
docker compose up -d
docker commit mycontainer myimage:latest
-v /home/ubuntu/nginx.conf:/etc/nginx/nginx.conf
sudo chown -R 1000:1000 /home/ubuntu/data
Ubuntu 默认不用 SELinux,但可用 AppArmor
df -h /var/lib/docker
| 方式 | 是否推荐 | 场景 |
|---|---|---|
| Volume | ✅✅✅ | 数据库、生产 |
| Bind Mount | ✅✅ | 配置文件、日志 |
| commit | ❌ | 临时调试 |
| 容器内部 | ❌ | 会丢 |
如果你愿意,可以告诉我:
我可以直接给你一套可复制的配置。