通过docker-compose部署mysql
环境
- Linux 版本:CentOS 7.9 64位操作系统
- Docker 版本:19.03
- Docker Compose 版本:v2.7.0
资料参考
- Basic Steps for MySQL Server Deployment with Docker
- More Topics on Deploying MySQL Server with Docker
- Docker-从入门到实践
- Overview of docker compose CLI
在/data/mysql
下创建文件夹
也可以按照自己的习惯在适当位置创建相关文件夹
1 |
|
- conf:mysql配置文件所在文件夹
- datadir:数据持久化文件夹
- logs:日志文件夹
在/conf
下创建文件my.cnf
文件内容
1 |
|
在/mysql
下创建文件docker-compose.yml
1 |
|
部分解释:
- ==–lower_case_table_names=1==:忽略表名大小写,容器创建并运行后在配置无法生效
- /data/mysql/conf/my.cnf:/etc/my.cnf:挂载配置文件
- /data/mysql/datadir:/var/lib/mysql:持久化数据
- /data/mysql/logs:/logs:挂载配置logs
- TZ=Asia/Shanghai:设置时区
- MYSQL_RANDOM_ROOT_PASSWORD=true:当这个变量为真时(这是它的默认状态,除非 MYSQL_ROOT_PASSWORD 被设置或 MYSQL_ALLOW_EMPTY_PASSWORD 设置为真),当Docker容器启动时,会为服务器的root用户生成一个随机密码。密码打印到stdout容器中,可以通过查看容器的日志找到,MYSQL_ROOT_PASSWORD和MYSQL_ALLOW_EMPTY_PASSWORD不建议使用,这样设置密码是不安全的
- MYSQL_ROOT_HOST=%:默认情况下,MySQL 创建 ‘root‘@’localhost’帐户。此帐户只能从容器内部连接,如从容器内 连接到 MySQL 服务器中所述。要允许来自其他主机的 root 连接,请设置此环境变量。例如, 172.17.0.1默认值 Docker 网关 IP 允许来自运行容器的主机的连接。该选项只接受一个条目,但允许使用通配符(例如, MYSQL_ROOT_HOST=172...*或 MYSQL_ROOT_HOST=%)。
- MYSQL_DATABASE=gitea:此变量允许您指定要在映像启动时创建的数据库的名称。MYSQL_USER 如果用和 提供了用户名和密码 MYSQL_PASSWORD,则创建用户并授予对此数据库的超级用户访问权(对应于GRANT ALL)。指定的数据库由 CREATE DATABASE IF NOT EXIST语句创建,因此如果数据库已经存在,则该变量无效。
- MYSQL_USER=gitea和MYSQL_PASSWORD=hpwMqVNj74@0C23:这些变量一起用于创建用户并设置该用户的密码,并且该用户被授予对 MYSQL_DATABASE 变量指定的数据库的超级用户权限。MYSQL_USER 和 都是 MYSQL_PASSWORD 创建用户所必需的——如果两个变量中的任何一个未设置,则忽略另一个。如果两个变量都已设置但未设置 MYSQL_DATABASE ,则创建的用户没有任何权限。
如果您挂载的数据目录不为空,则以下任何变量都不会产生任何影响,因为那时不会尝试进行服务器初始化(有关更多详细信息,请参阅 持久化数据和配置更改 )。文件夹中的任何预先存在的内容,包括任何旧的服务器设置,在容器启动期间都不会被修改。
布尔变量包括 MYSQL_RANDOM_ROOT_PASSWORD、 MYSQL_ONETIME_PASSWORD、 MYSQL_ALLOW_EMPTY_PASSWORD和 , MYSQL_LOG_CONSOLE 通过将它们设置为任何非零长度的字符串来使它们为真。因此,将它们设置为例如 “ 0 ”、“ false ”或 “ no ”不会使它们为假,而是实际上使它们为真。这是 MySQL 服务器容器的一个已知问题
无需使用此机制来创建 root 超级用户,默认情况下创建超级用户时使用的密码由 和 的描述中讨论的任一机制设置 MYSQL_ROOT_PASSWORD , MYSQL_RANDOM_ROOT_PASSWORD除非 MYSQL_ALLOW_EMPTY_PASSWORD 为真。
详细可以查看官网资料
执行命令
docker compose up -d
- up:创建和启动容器
- -d:后台运行
- 结果图如下↓
docker logs mysql
查看日志,部分结果图如下↓
docker logs mysql 2>&1 | grep GENERATED
查看mysql初始化的root用户密码1
2022-07-22 15:24:28+08:00 [Note] [Entrypoint]: GENERATED ROOT PASSWORD: 8L4IrZFs7r8zvYBr2jm0GESRw6596L61
验证
使用熟悉的数据库操作工具进行 ip:3306 账户:root 密码:8L4IrZFs7r8zvYBr2jm0GESRw6596L61 测试链接,连接成功时可以看到成功创建库gitea
,用户表gitea
成功创建,用户gitea
对库gitea
有所有的操作权限。通过账户:gitea
和密码:hpwMqVNj74@0C23
也可以成功链接。
不使用docker-compose
将docker-pompose.yml转换成docker run 来执行,其余操作不便
1 |
|
-env
有多个也可以修改为如下格式--env-file=/data/mysql/docker.env
,前提是创建docker.evn文件,内容如下↓
1 |
|
个人并未尝试上述方法,如果执行出现错误可以参考官方文档进行修改,直达链接。
windows 环境下docker创建
原理同linux环境,文件路径改为windows下绝对路径类似这样--env-file=windows文件地址\mysql.env -v windows文件地址\conf\my.cnf:/etc/mysql/my.cnf