Docker安装mysql

xiaolv
13
2023-10-26

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 docker

mysql容器自启动

# 启动时加入参数 --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

动物装饰