一、安装 Docker
1. 卸载旧版本(如果存在)
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2. 安装必要的依赖包
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
3. 添加 Docker 仓库
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
4. 更新 yum 软件包索引
sudo yum makecache fast
5. 安装 Docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io
6. 启动并设置 Docker 开机自启
sudo systemctl start docker
sudo systemctl enable docker
7. 验证 Docker 是否安装成功
sudo docker run hello-world
如果看到 "Hello from Docker!" 字样,表示安装成功。
二、拉取 MySQL 8.0.32 镜像
sudo docker pull mysql:8.0.32
三、创建数据持久化和配置文件目录
1. 创建数据持久化目录
sudo mkdir -p /opt/mysql_data
2. 创建 MySQL 配置文件目录
sudo mkdir -p /opt/mysql_conf
3. 设置目录权限
为了避免权限问题,确保 Docker 容器内的 MySQL 用户可以访问这些目录,需要设置正确的权限。
sudo chown -R 999:999 /opt/mysql_data
sudo chown -R 999:999 /opt/mysql_conf
说明:
999:999
是官方 MySQL Docker 镜像中mysql
用户的 UID 和 GID。
四、编写 MySQL 配置文件
1. 创建 my.cnf
文件
sudo vi /opt/mysql_conf/my.cnf
2. 添加以下内容
[mysqld]
# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
# 允许远程连接
bind-address=0.0.0.0
# 其他配置(可选)
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
说明:
bind-address=0.0.0.0
:允许 MySQL 监听所有网络接口的连接请求。- 字符集设置确保数据库使用 UTF-8 编码。
五、运行 MySQL 容器
sudo docker run -d \
--name mysql8 \
-p 3306:3306 \
-v /opt/mysql_data:/var/lib/mysql \
-v /opt/mysql_conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-e MYSQL_ROOT_PASSWORD=你的密码 \
--restart unless-stopped \
mysql:8.0.32
参数说明:
-d
:后台运行容器。--name mysql8
:容器名称。-p 3306:3306
:端口映射。-v /opt/mysql_data:/var/lib/mysql
:数据持久化目录映射。-v /opt/mysql_conf/my.cnf:/etc/mysql/conf.d/my.cnf
:挂载自定义配置文件。-e MYSQL_ROOT_PASSWORD=你的密码
:设置 root 用户密码,请自行替换。--restart unless-stopped
:设置容器重启策略。
六、验证 MySQL 容器运行状态
1. 查看容器状态
sudo docker ps
应看到 mysql8
容器正在运行。
2. 查看容器日志
sudo docker logs mysql8
确保日志中没有错误信息,如出现类似以下内容,表示启动成功:
[Note] [Entrypoint]: MySQL init process done. Ready for start up.
[System] [MY-010931] [Server] /usr/sbin/mysqld: ready for connections.
七、配置 MySQL 允许远程连接
1. 进入容器内部
sudo docker exec -it mysql8 bash
2. 登录 MySQL
mysql -u root -p
输入之前设置的密码。
3. 创建远程用户并授予权限
CREATE USER 'remote_user'@'%' IDENTIFIED BY '用户密码';
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
说明:
'remote_user'
:替换为您希望创建的用户名。'用户密码'
:替换为该用户的密码。'%'
:表示允许从任何主机连接。
4. 退出 MySQL 和容器
EXIT;
exit
八、配置防火墙
1. 开放 3306 端口
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
2. 验证防火墙配置
sudo firewall-cmd --zone=public --query-port=3306/tcp
返回 yes
表示端口已开放。
九、验证数据持久化
1. 创建测试数据库
sudo docker exec -it mysql8 mysql -u root -p -e "CREATE DATABASE testdb;"
2. 重启容器
sudo docker restart mysql8
3. 验证数据库是否存在
sudo docker exec -it mysql8 mysql -u root -p -e "SHOW DATABASES;"
应看到 testdb
数据库仍然存在。
十、设置容器随 Docker 启动
由于在运行容器时使用了 --restart unless-stopped
参数,容器会在 Docker 服务启动时自动启动。您可以通过以下命令验证:
sudo systemctl restart docker
sudo docker ps
mysql8
容器应在 Docker 重启后自动启动。
注意事项
- 权限问题:
- 确保数据持久化目录
/opt/mysql_data
和配置文件目录/opt/mysql_conf
的所有者和权限正确。 - 可以通过以下命令设置权限:
sudo chown -R 999:999 /opt/mysql_data sudo chown -R 999:999 /opt/mysql_conf
- 确保数据持久化目录
- 防火墙配置:
- 确保防火墙已开放 3306 端口,允许远程连接。
- 安全性:
- 远程用户应设置强密码。
- 在生产环境中,尽量限制允许连接的 IP 地址,不要使用
%
通配符。 - 考虑使用防火墙或安全组进一步限制访问。
- 数据备份:
- 在对数据目录进行任何删除或清空操作之前,务必备份重要数据。
- 错误处理:
- 如果在启动容器时遇到
--initialize specified but the data directory has files in it. Aborting.
错误,说明数据目录已存在文件,导致初始化失败。需要清空数据目录并确保权限正确。解决方法:sudo docker stop mysql8 sudo docker rm mysql8 sudo rm -rf /opt/mysql_data/* sudo chown -R 999:999 /opt/mysql_data
然后重新运行容器。
- 如果在启动容器时遇到
总结
通过本教程,您已经成功在 CentOS 7 上使用 Docker 搭建了 MySQL 8.0.32,配置了数据持久化,允许了远程连接,并设置了容器随 Docker 启动。整个过程包括安装 Docker、拉取 MySQL 镜像、配置 MySQL、运行容器和验证功能。希望本教程对您有所帮助。
转载本站文章请保留原文链接,如文章内说明不允许转载该文章,请不要转载该文章,谢谢合作。