【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,容器直接启动失败
相关推荐
vibecode1 小时前
网站服务器失去响应怎么解决?我把连接超时和读超时这两段计时拆开跑了一遍
运维·服务器
工业一体机老司机2 小时前
Docker部署工控机采集服务 Compose编排与开机自启
运维·docker·容器
迪康Defender3 小时前
终端供应链安全:应用白名单与软件正版化检测落地|终端安全治理实践
运维·服务器·网络·安全·web安全·自动化·运维开发
万联WANFLOW5 小时前
异地厂区视频监控远程运维:从组网到安全的实施要点
运维·网络·安全·企业组网·sdwan
十碗饭吃不饱6 小时前
SSH 密钥认证详解:原理、实操、参数、排错与加固
运维·ssh
echoarts6 小时前
服务器连不上?FileZilla 改被动模式就好了
运维·服务器·其他
无言听风雨丶7 小时前
Redis 运维实战与排错
运维·数据库·redis
QXWZ_IA7 小时前
变电站数字孪生巡检的能力分层、数据接入与空间计算边界
运维·服务器·空间计算
miaobinfei8 小时前
docker拉取dify镜像,执行docker compose up -d 报错
运维·docker·容器
女神下凡8 小时前
芯参谋(85):Linux_PPI_NAND_驱动开发指南
linux·运维·arm开发·驱动开发·单片机·嵌入式硬件·设计规范