【技术】Docker 部署 MySQL

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:目录挂载,将容器内部的目录映射到宿主机。参数格式为:宿主机地址:容器内部地址。挂载的目的是方便用户在宿主机上直接操作文件,文件的修改会和容器内部同步。
相关推荐
掉头发的王富贵5 小时前
【StarRocks】极限十分钟入门StarRocks
数据库·sql·mysql
SamDeepThinking10 小时前
一条UPDATE语句在MySQL 8.0中到底加了几把锁?
后端·mysql·程序员
Patrick_Wilson1 天前
从「改个端口」到 502:Next.js on k8s 的容器端口、Service 映射与 env 覆盖
docker·kubernetes·next.js
Suroy1 天前
DockerView-Go:用 Go 写一个终端 Docker 监控工具,顺便做了个 Web 仪表盘
docker
云恒要逆袭1 天前
运行你的第一个Docker容器
后端·docker·容器
李白客2 天前
KES新版MySQL兼容能力再升级意味着什么?
mysql·国产数据库
宋均浩2 天前
# Docker 镜像瘦身实战:从 1.2G 到 80MB 的五个优化步骤
ci/cd·docker
程序员老赵3 天前
10 分钟部署 OpenCode:Docker 一键安装,浏览器打开就能用 AI 写代码(附完整命令与排错)
docker·容器·ai编程
WangMingHua1113 天前
LM Studio Docker 部署——本地大模型一键启动
docker