环境准备


  • Docker
  • docker-compose
  • mysql rpm安装包

实现步骤


  1. 编写 Dockerfile
FROM centos:7-mysql
ADD mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar /opt/
RUN rpm -ivh /opt/*.rpm --force --nodeps
# 暴露MySQL默认端口3306
EXPOSE 3306

# 将本地的mysql_setup.sh脚本复制到容器内的指定目录(这里选择/usr/local/bin目录)
COPY mysql_setup.sh /usr/local/bin/mysql_setup.sh
# 给复制到容器内的脚本添加可执行权限
RUN chmod +x /usr/local/bin/mysql_setup.sh

RUN sh /usr/local/bin/mysql_setup.sh

# 设置容器启动时执行的命令,启动MySQL服务
CMD ["/usr/sbin/mysqld"]
  1. 编写 mysql_setup.sh
#!/bin/bash

# 配置MySQL服务启动参数,这里主要用于设置初始密码以及允许远程访问等相关配置,注意密码为000000,实际使用中可按需调整安全性更高的密码
echo 'user = root' >> /etc/my.cnf

# 初始化MySQL,以非安全模式初始化(无初始密码)并指定运行用户为mysql
/usr/sbin/mysqld --initialize-insecure --user=mysql

# 启动MySQL服务,使用mysqld_safe命令在后台启动,并等待一段时间确保服务启动成功
/usr/sbin/mysqld &
sleep 5

# 设置root用户密码
/usr/bin/mysqladmin -u root password '000000'

# 授予root用户远程访问的所有权限,并刷新权限使其生效
/usr/bin/mysql -uroot -p000000 -e "GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '000000' WITH GRANT OPTION; FLUSH PRIVILEGES;"

# 修改本地root用户登录的密码(确保本地和远程密码一致)
/usr/bin/mysql -uroot -p000000 -e "ALTER USER 'root'@'%' IDENTIFIED BY '000000';"

3.构建镜像

docker build -t mysql .
  1. 启动测试
docker run --name test -d mysql
76da14243fcde421c024fdfa1f5baa40ef9dc2a964b8ba2f74eb1e3df9ea90c7

docker exec test mysql -uroot -p000000 -e "show databases";
 
mysql: [Warning] Using a password on the command line interface can be insecure.
Database
information_schema
mysql
performance_schema
sys