docker部署命令行 — 启动一个 MySQL 数据库服务 并且把它的数据存储挂载到卷(volume)里
挂载卷的配置写法:
version: "3"
services:db:image: mysqlvolumes:- mysql_data:/var/lib/mysqlvolumes: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 会用默认设置来建它。
🎯 总结这段配置做了什么:
- 启动一个 MySQL 容器。
- 容器里 MySQL 会把数据写到
/var/lib/mysql
。 - 我们挂了一个卷
mysql_data
到这个路径上,相当于让这些数据保存到了“硬盘”里。 - 即使你以后删除了容器,卷还在,数据库数据不会丢。
📘 详细举个例子说明:
假设你正在开发一个电商网站,需要一个数据库服务保存订单数据。
你写了这个 docker-compose.yml
,运行:
sudo docker-compose up -d
这会发生什么:
-
Docker 自动下载 MySQL 镜像并运行它。
-
它会创建一个卷叫
mysql_data
,就像一个隐藏的U盘。 -
MySQL 启动后,创建数据库文件、表结构、写入数据……
-
所有这些数据,其实都写到了卷
mysql_data
里面(不在容器里)。 -
你以后就算运行:
sudo docker-compose down
容器会删掉,但数据还保留在
mysql_data
卷中。 -
你再运行:
sudo docker-compose up -d
容器重新建一个,但卷还在!MySQL 会发现原来的数据库还在,继续使用。
🧠 更简单的比喻:
概念 | 类比 |
---|---|
容器 | 临时开的数据库软件 |
卷 | 一个专门保存数据的U盘 |
挂载卷 | 把U盘插进容器,让它写入里面 |
down | 把软件关闭 |
up | 重新打开软件 |
数据还在 | 因为U盘没拔,数据没丢 |