在 Docker 中安装 MySQL
对于开发者,安装 MySQL 不是什么难事,但是往往步骤比较多。我记录了一个 Docker compose 模板,能直接启动一个配置好的 MySQL 容器,用于开发。
Docker compose
1 | version: '3' |
配置说明
容器卷
MySQL 有三个存放数据的目录:
/var/lib/mysql
:数据目录/var/log/mysql
:日志目录/etc/mysql/conf.d
:配置文件目录
1️⃣最重要的当然是数据目录。
2️⃣配置文件目录可用可不用,因为可以使用启动参数。如果要用的话,创建一个 my.cnf
,内容为
1 | [client] |
实际上就是配置了字符集,因此完全可以用启动参数代替。
3️⃣日志目录最不重要。
mysqld 启动参数
使用如下命令查看(选项很多,保存到文件中再查看):
1 | docker run -it --rm mysql:5.7 --verbose --help > mysqld_args.txt |
配置文件中的大部分选项都可以被启动参数代替,很适合快速创建容器。
启动命令是:
1 | mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --character-set-client-handshake=FALSE |
--character-set-server
和 --collation-server
很容易理解。
--character-set-client-handshake
的意思是:
Don’t ignore client side character set value sent during handshake.
即优先采用客户端的字符集,默认为 TRUE
。我设置为了 FALSE
,强制客户端使用服务端的字符集。
healthcheck
测试命令是:
1 | out=$$(mysqladmin ping -h 127.0.0.1 -u root --password=$$MYSQL_ROOT_PASSWORD); echo $$out | grep 'mysqld is alive' || { echo $$out; exit 1; } |
$$
是为了转义$
,因此 shell 命令中的$
都需要双写;- 如果命令的退出码为 0,则代表 healthy;否则,是 unhealthy;
- 这个命令可以当作一个模板:如果
mysqladmin ping
返回内容包括mysqld is alive
,则正常退出。否则,打印返回内容,并设置退出码为 1;