Docker 部署 MySQL

Docker 安装
如果已经安装了 Docker 跳过此步骤。如果没有安装 Docker 可以参考我的另一篇文章Ubuntu 安装 Docker。也可以参考Docker 官网文档安装。
MySQL 部署
不废话,直接上命令,罗列几个场景。
不挂载宿主机目录
数据、日志、配置都在容器内部。
bash
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:latest \
--lower_case_table_names=1
参数解释:
- --name mysql:给容器起个名字,方便后续管理。
- -e :运行环境变量配置。
- MYSQL_ROOT_PASSWORD=123456:通过环境变量设置 root 用户的密码(必填,否则容器启动失败)。
- -d:后台运行。
- mysql:latest:使用的镜像和标签。
- --lower_case_table_names=1:配置MySQL不区分大小写。
数据配置持久化
数据、日志、配置挂载在宿主机,方便查看修改。
注意权限:将数据、日志、配置的文件夹的所有者和组修改为 999
bash
sudo chown -R 999:999 /data/mysql/data /data/mysql/conf /data/mysql/logs
因为 MySQL 官方 Docker 镜像里,MySQL 服务是以一个名叫 mysql 的系统用户来运行的,而这个用户的 UID 和 GID 在镜像中被硬编码为 999。
当你把宿主机的一个目录(比如 /data/mysql/data)挂载到容器里,如果这个目录的所有者不是 999,容器内的 mysql 用户就没有权限在里面读写文件,MySQL 会启动失败,报类似 Permission denied 的错误。
所以我们需要提前在宿主机上,把这个目录的所有者改成 999,这样容器里的 mysql 用户才能顺畅使用它。
bash
docker run -d \
--name mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
-v /data/mysql/logs:/var/log/mysql \
mysql:latest \
--lower_case_table_names=1
参数解释:
- -v:目录挂载,将容器内部的目录映射到宿主机。参数格式为:
宿主机地址:容器内部地址。挂载的目的是方便用户在宿主机上直接操作文件,文件的修改会和容器内部同步。