温馨提示×

ubuntu docker怎么存数据

小樊
43
2026-09-01 10:02:21
栏目: 智能运维

在 Ubuntu 上使用 Docker 存数据,核心思想是:不要只把数据放在容器内部,因为容器一旦删除,里面的数据就没了。常见做法有以下几种:


一、最推荐:使用「数据卷(Volume)」

Docker 自己管理的一块存储空间,安全、易备份。

1. 创建并使用 volume

docker volume create mydata

docker run -d \
  --name mysql \
  -v mydata:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=123456 \
  mysql
  • mydata:volume 名
  • /var/lib/mysql:容器内数据目录

2. 查看 volume

docker volume ls
docker volume inspect mydata

3. 备份 volume

docker run --rm \
  -v mydata:/data \
  -v $(pwd):/backup \
  ubuntu tar czf /backup/mydata.tar.gz -C /data .

二、最简单:使用「主机目录挂载(Bind Mount)」

直接把 Ubuntu 上的文件夹挂进容器。

docker run -d \
  --name nginx \
  -v /home/ubuntu/html:/usr/share/nginx/html \
  nginx
  • /home/ubuntu/html:Ubuntu 本机目录
  • 文件改了马上生效,适合开发

⚠️ 注意权限问题(尤其在 Ubuntu 上):

sudo chmod -R 777 /home/ubuntu/html

(生产环境不建议 777)


三、临时数据:容器层(不推荐长期使用)

docker run ubuntu touch /tmp/test.txt
  • 容器删了数据就没
  • 只适合测试

四、生产环境建议

  • ✅ 数据库(MySQL / PostgreSQL):用 volume
  • ✅ 配置文件:用 bind mount
  • ✅ 日志:挂载到主机或集中收集(ELK / Loki)
  • ❌ 不要把重要数据只放容器里

五、Docker Compose 示例

version: "3"
services:
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
    volumes:
      - dbdata:/var/lib/mysql

volumes:
  dbdata:

如果你能说一下:

  • 是 数据库 / 文件 / 日志?
  • 用 docker run 还是 compose?
  • 是 开发还是生产?

我可以直接给你一套最合适的 Ubuntu + Docker 存数据方案。

0 踩