【docker】#3 | 数据卷挂载

一、Docker 命令别名(可选配置,提升敲命令效率)

编辑用户环境变量文件 ~/.bashrc(bash)或 ~/.zshrc(zsh)

复制代码
# 示例别名
alias d='docker'
alias dps='docker ps'
alias dpsa='docker ps -a'
alias di='docker images'
alias drm='docker rm -f'
alias dri='docker rmi'

生效命令:

复制代码
source ~/.bashrc

配置完成后,直接输入 d 等价于 docker,简化日常命令输入。


二、基础启动 MySQL 容器(无数据卷版本,作为对照)

复制代码
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql

参数解释

表格

参数 作用
-d 后台守护进程运行容器
--name mysql 指定容器名称
-p 3306:3306 端口映射:宿主机端口:容器内端口
-e TZ=Asia/Shanghai 设置容器时区为上海,解决时间差问题
-e MYSQL_ROOT_PASSWORD=123 设置 root 用户密码
mysql 使用 mysql 镜像(默认 latest 最新版)

❗ 无挂载的致命问题

容器删除之后,容器内部所有 MySQL 数据全部丢失。 容器是临时环境,数据保存在容器可写层,容器销毁,数据跟着销毁。

这就是为什么需要【数据卷挂载】。


三、Docker 数据卷(Volume)核心概念

1. 什么是数据卷

数据卷是宿主机上独立的文件目录,用来实现容器和宿主机的数据共享、持久化存储。 数据卷生命周期独立于容器:删除容器,数据卷不会自动删除。

2. 三种挂载方式

  1. volume(命名卷 / 匿名卷):docker 管理,目录在 docker 内部,推荐生产使用
  2. bind mount(绑定挂载):宿主机指定目录 / 文件直接挂载到容器,开发常用
  3. tmpfs mount:挂载到宿主机内存,临时存储,重启丢失

学习重点:-v 参数,是挂载核心参数 语法:-v 宿主机资源:容器内目录[:权限]


四、MySQL 带数据卷挂载完整版命令(bind mount 绑定挂载)

复制代码
docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  # 挂载数据目录:持久化数据库数据
  -v /mydata/mysql/data:/var/lib/mysql \
  # 挂载配置目录:自定义my.cnf
  -v /mydata/mysql/conf:/etc/mysql/conf.d \
  mysql:8.0

建议固定镜像版本 mysql:8.0,不要直接用 latest,避免版本不兼容。

挂载说明

  • /mydata/mysql/data:宿主机目录,存放数据库真实数据
  • /var/lib/mysql:MySQL 容器内部存放数据的目录
  • 挂载之后: 宿主机目录 和 容器目录双向同步;删除容器,宿主机 /mydata 下的数据还在

权限补充(可选)

:ro 只读挂载(容器只能读,不能写) :rw 读写挂载(默认)


五、常用数据卷管理命令

复制代码
# 查看所有数据卷
docker volume ls

# 查看数据卷详情
docker volume inspect 卷名

# 创建命名数据卷
docker volume create mysql-data

# 删除未使用的数据卷(清理垃圾)
docker volume prune

# 删除指定数据卷
docker volume rm 卷名

六、总结

  1. 容器的文件系统是临时的,容器删除 → 容器内数据丢失,所以必须挂载持久化
  2. -v 实现挂载,两种常用:bind mount(宿主机指定文件夹)、volume(docker 托管卷)
  3. 数据卷生命周期独立容器,容器删,卷还在
  4. MySQL 挂载:数据目录 /var/lib/mysql,配置目录 /etc/mysql/conf.d
  5. 启动容器一定要设置时区 TZ,否则数据库时间不对
  6. 生产尽量固定镜像 tag,不要 latest

七、踩坑记录

  1. 宿主机挂载目录权限不足 → MySQL 容器启动失败
  2. 挂载宿主机空目录覆盖容器原有配置文件 → MySQL 启动异常
  3. 端口冲突:宿主机 3306 被占用,修改 -p 3307:3306
  4. 忘记设置环境变量 MYSQL_ROOT_PASSWORD,容器直接启动失败
相关推荐
像风一样自由20209 小时前
52.Docker部署大模型应用从本地开发到服务化运行
运维·人工智能·docker·容器·大模型·智能体
sxgzzn9 小时前
如何利用电缆故障定位在线监测系统提升供电安全?
运维·重构·无人机·开关柜局放在线监测·gis局放在线监测
mengchanmian10 小时前
VSFTP 服务器搭建(Centos)
运维·服务器·centos
别动我齐刘海12 小时前
Linux 系统调试学习1
linux·运维·服务器·c++·学习·机器学习·机器人
陈陈CHENCHEN13 小时前
【Kubernetes】纯 IPv6 K8s 用 socat 打通 IPv4 服务
云原生·容器·kubernetes
不像程序员的程序媛13 小时前
linux常见文本操作命令
linux·运维·服务器
wangbing112513 小时前
开发指南149-IotDB-常用命令
linux·运维·iotdb
Dovis(誓平步青云)13 小时前
常用命令藏得太深?怎么做一个快捷命令坞
运维·前端·自动化·音视频·prometheus
江湖有缘14 小时前
Docker实战 | 使用Docker部署rmoments社交平台
jvm·docker·oracle