挂载卷的配置写法:

version: "3"
services:
  db:
    image: mysql
    volumes:
      - mysql_data:/var/lib/mysql

volumes:
  mysql_data:

这段 docker-compose.yml 配置非常典型,是用来启动一个 MySQL 数据库服务 并且把它的数据存储挂载到卷(volume)里。


✅ 整段配置的解释:

version: "3"

👉 告诉 Docker 使用 Compose 配置的第 3 版格式。这是配置文件的版本,跟你用的 Docker 版本有关(v3 是最常见的标准版)。


services:

👉 定义服务列表,可以理解为你要启动的一组“微服务程序”。


  db:

👉 定义了一个服务,名字叫 db,你可以随便起名,但这里代表“数据库服务”(Database)。


    image: mysql

👉 告诉 Docker 从网上拉一个镜像,名字是 mysql,这是官方提供的 MySQL 数据库镜像。

就像你告诉 Docker:“去下载一个 MySQL 程序来跑起来”。


    volumes:
      - mysql_data:/var/lib/mysql

👉 这是最关键的一行!意思是:

把一个叫 mysql_data(外接硬盘)挂载到这个容器内部的路径 /var/lib/mysql 上。

/var/lib/mysql 恰好是 MySQL 在容器中存储所有数据库文件的地方!


volumes:
  mysql_data:

👉 这一段是在底下声明:

我定义了一个叫 mysql_data 的卷,Docker 帮我自动创建它。

你不写配置内容没关系,Docker 会用默认设置来建它。


🎯 总结这段配置做了什么:

  1. 启动一个 MySQL 容器。
  2. 容器里 MySQL 会把数据写到 /var/lib/mysql
  3. 我们挂了一个卷 mysql_data 到这个路径上,相当于让这些数据保存到了“硬盘”里。
  4. 即使你以后删除了容器,卷还在,数据库数据不会丢。

📘 详细举个例子说明:

假设你正在开发一个电商网站,需要一个数据库服务保存订单数据。

你写了这个 docker-compose.yml,运行:

sudo docker-compose up -d

这会发生什么:

  1. Docker 自动下载 MySQL 镜像并运行它。

  2. 它会创建一个卷叫 mysql_data,就像一个隐藏的U盘。

  3. MySQL 启动后,创建数据库文件、表结构、写入数据……

  4. 所有这些数据,其实都写到了卷 mysql_data 里面(不在容器里)。

  5. 你以后就算运行:

    sudo docker-compose down
    

    容器会删掉,但数据还保留在 mysql_data 卷中。

  6. 你再运行:

    sudo docker-compose up -d
    

    容器重新建一个,但卷还在!MySQL 会发现原来的数据库还在,继续使用。


🧠 更简单的比喻:

概念 类比
容器 临时开的数据库软件
一个专门保存数据的U盘
挂载卷 把U盘插进容器,让它写入里面
down 把软件关闭
up 重新打开软件
数据还在 因为U盘没拔,数据没丢
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐