一、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. 三种挂载方式
- volume(命名卷 / 匿名卷):docker 管理,目录在 docker 内部,推荐生产使用
- bind mount(绑定挂载):宿主机指定目录 / 文件直接挂载到容器,开发常用
- 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 卷名
六、总结
- 容器的文件系统是临时的,容器删除 → 容器内数据丢失,所以必须挂载持久化
-v实现挂载,两种常用:bind mount(宿主机指定文件夹)、volume(docker 托管卷)- 数据卷生命周期独立容器,容器删,卷还在
- MySQL 挂载:数据目录
/var/lib/mysql,配置目录/etc/mysql/conf.d - 启动容器一定要设置时区 TZ,否则数据库时间不对
- 生产尽量固定镜像 tag,不要 latest
七、踩坑记录
- 宿主机挂载目录权限不足 → MySQL 容器启动失败
- 挂载宿主机空目录覆盖容器原有配置文件 → MySQL 启动异常
- 端口冲突:宿主机 3306 被占用,修改
-p 3307:3306 - 忘记设置环境变量
MYSQL_ROOT_PASSWORD,容器直接启动失败