Docker安装mysql
题目:Docker安装mysql,设置映射配置文件my.cnf、数据库日志目录、数据存放目录;设置mysql容器自动启动,设置docker开机自启动,将mysql容器注册成服务形式。
环境:centos7.9、安装docker、配置阿里云镜像加速
一、拉取mysql镜像
可参考docker hub官方网站Docker Hub Container Image Library | App Containerization
docker pull mysql:5.7
docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 c20987f18b13 20 months ago 448MB二、运行容器,查看目录内容
# 容器可看作一个最小化虚拟机 有自己的端口、网络等信息
# mysql容器的启动需要指定root密码
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7查看目录内容
docker exec -it mysql /bin/bash
# 配置文件目录
cd /etc/mysql
ls -l
total 8
drwxr-xr-x. 2 root root 62 Dec 21 2021 conf.d
lrwxrwxrwx. 1 root root 24 Dec 21 2021 my.cnf -> /etc/alternatives/my.cnf
-rw-r--r--. 1 root root 839 Aug 3 2016 my.cnf.fallback
-rw-r--r--. 1 root root 1200 Sep 7 2021 mysql.cnf
drwxr-xr-x. 2 root root 24 Dec 21 2021 mysql.conf.d
# 数据目录
cd /var/lib/mysql
ls
auto.cnf client-cert.pem ib_logfile0 ibtmp1 private_key.pem server-key.pem
ca-key.pem client-key.pem ib_logfile1 mysql public_key.pem sys
ca.pem ib_buffer_pool ibdata1 performance_schema server-cert.pem
#日志目录
cd /var/log/mysql
ls
error.log三、重新运行容器并挂载目录
# 删除容器
docker rm -f $(docker ps -aq)
# 创建目录 不创建也可以
mkdir -p /home/mysql/{conf,data,log}
# 启动容器并挂载目录
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -v /home/mysql/conf:/etc/mysql/ -v /home/mysql/data:/var/lib/mysql/ -v /home/mysql/log:/var/log/mysql/ mysql:5.7
# 挂载后配置文件目录下为空
# 采用官方文档中的挂载方法
cd /home/mysql/conf
vim my.cnf
docker run -d -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=123456 -v /home/mysql/conf:/etc/mysql/conf.d/ -v /home/mysql/data:/var/lib/mysql/ -v /home/mysql/log:/var/log/mysql/ --restart=always mysql:5.7
# 参数解释
-d 后台启动
-p 映射端口
--name 指定容器名称
-v 挂载卷
-e 环境变量
mysql的环境变量:
MYSQL_ROOT_PASSWORD(必选)
此变量是必需的,并指定将为 MySQLroot超级用户帐户设置的密码。在上面的例子中,它被设置为my-secret-pw
MYSQL_DATABASE
此变量是可选的,允许您指定要在映像启动时创建的数据库的名称。如果提供了用户/密码(见下文),则该用户将被授予对此数据库的超级用户访问权限(对应于GRANT ALL)
MYSQL_USER, MYSQL_PASSWORD
这些变量是可选的,用于创建新用户和设置该用户的密码。该用户将被授予MYSQL_DATABASE变量指定的数据库的超级用户权限(见上文)。要创建用户,这两个变量都是必需的。
请注意,无需使用此机制来创建超级用户超级用户,默认情况下会使用MYSQL_ROOT_PASSWORD变量指定的密码创建该用户。
MYSQL_ALLOW_EMPTY_PASSWORD
这是一个可选变量。设置为非空值,例如yes,以允许使用 root 用户的空白密码启动容器。注意:yes除非您真的知道自己在做什么,否则不建议将此变量设置为,因为这将使您的 MySQL 实例完全不受保护,从而允许任何人获得完全的超级用户访问权限。
...
# 可选参数
--privileged=true 加了后容器内的root权限即容器外的root权限连接并创建数据库测试成功
四、docker自启动和容器自启动
docker自启动
systemctl enable dockermysql容器自启动
# 启动时加入参数 --restart=always
# 或者执行命令
docker update --restart=always五、将mysql容器注册为系统服务
编写一个启动脚本docker-mysql.sh
#!/bin/bash
# 停止并删除已存在的同名容器(如果有的话)
docker stop docker-mysql
docker rm -f docker-mysql
# 使用Docker命令启动容器
docker run -d -p 3306:3306 --name docker-mysql -e MYSQL_ROOT_PASSWORD=123456 -v /home/mysql/conf:/etc/mysql/conf.d/ -v /home/mysql/data:/var/lib/mysql/ -v /home/mysql/log:/var/log/mysql/ --restart=always --privileged=true mysql:5.7注册为服务
vim /etc/systemd/system/docker-mysql.service
# 写入以下内容
[Unit]
Description=My Docker Container Service
Requires=docker.service
After=docker.service
[Service]
ExecStart=/root/docker-mysql.sh
Restart=always
[Install]
WantedBy=default.target
# 保存退出
systemctl daemon-reload
systemctl start docker-mysql