Docker的部署(以centos7部署mysql为例)(day3)

centos7中yum源失效问题解决:yum源失效导致docker安装失败问题解决

day2的内容:MyBatis-Plus 核心功能详解:条件构造器、Service 封装与批量优化实践

前言

本文详细记录了在 CentOS 7 虚拟机环境中,通过 Docker 容器化方式部署 MySQL 8.0+ 数据库的完整过程。包括环境准备、容器部署、数据持久化、端口映射、防火墙配置,以及如何从宿主机(Windows/macOS)使用 Navicat 成功连接数据库。适用于开发测试及学习场景。

📚 目录(点击跳转对应章节)

一、环境说明
[二、停止并清理原有 MariaDB(如有)](#二、停止并清理原有 MariaDB(如有))
[三、安装 Docker](#三、安装 Docker)
四、创建数据与配置目录
[五、启动 MySQL 8.0 容器](#五、启动 MySQL 8.0 容器)
六、验证容器运行状态
[七、配置防火墙放行 3306 端口](#七、配置防火墙放行 3306 端口)
[八、获取虚拟机 IP 地址](#八、获取虚拟机 IP 地址)
[九、Navicat 连接配置](#九、Navicat 连接配置)
十、验证远程连通性
十一、开机自启机制说明


一、环境说明

  • 操作系统:CentOS Linux release 7.9
  • 虚拟化平台:VMware Workstation(网络模式:桥接)
  • Docker 版本:Docker CE
  • 目标数据库:MySQL 8.0
  • 客户端工具:Navicat Premium(版本 >= 15)

二、停止并清理原有 MariaDB(如有)

CentOS 7 默认安装 MariaDB,为避免冲突,建议先停止并卸载:

bash 复制代码
# 停止服务
sudo systemctl stop mariadb

# 卸载相关包(可选,若已安装)
sudo yum remove -y mariadb-server mariadb mariadb-libs

注意:如需保留数据,请提前备份 /var/lib/mysql 目录。


三、安装 Docker

若系统未安装 Docker,执行以下命令:

bash 复制代码
# 安装依赖
sudo yum install -y yum-utils

# 添加 Docker 官方仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 Docker
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 启动并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker

验证安装:

bash 复制代码
docker --version

四、创建数据与配置目录

为实现数据持久化和自定义配置,创建挂载目录:

bash 复制代码
sudo mkdir -p /opt/mysql8/data
sudo mkdir -p /opt/mysql8/conf.d

# 设置权限(MySQL 容器内用户 UID 为 999)
sudo chown -R 999:999 /opt/mysql8/data

若需兼容旧客户端,可在 /opt/mysql8/conf.d/my.cnf 中添加:

ini 复制代码
[mysqld]
default_authentication_plugin=mysql_native_password

五、启动 MySQL 8.0 容器

执行以下命令运行容器:

bash 复制代码
docker run -d \
  --name mysql8 \
  --restart=always \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v /opt/mysql8/data:/var/lib/mysql \
  -v /opt/mysql8/conf.d:/etc/mysql/conf.d \
  -p 3306:3306 \
  mysql:8.0

参数说明:

  • --restart=always:确保容器随 Docker 服务自动重启;
  • -e MYSQL_ROOT_PASSWORD=123:设置 root 密码(仅用于测试,生产环境请使用强密码);
  • -v:挂载数据和配置目录,实现持久化;
  • -p 3306:3306:将宿主机 3306 端口映射到容器内部。

六、验证容器运行状态

bash 复制代码
# 查看容器是否运行
docker ps -f name=mysql8

# 测试连接(通过容器内部)
docker exec -it mysql8 mysql -u root -p123 -e "SELECT VERSION();"

预期输出:

复制代码
+-----------+
| VERSION() |
+-----------+
| 8.0.45    |
+-----------+

七、配置防火墙放行 3306 端口

由于虚拟机需对外提供服务,必须开放端口:

bash 复制代码
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

验证:

bash 复制代码
firewall-cmd --list-ports | grep 3306

八、获取虚拟机 IP 地址

在虚拟机中执行:

bash 复制代码
ip addr show

找到主网卡(如 ens33)的 IPv4 地址,例如:

bash 复制代码
inet 192.168.35.142/24

该 IP(192.168.35.142)即为 Navicat 连接时的主机地址。


九、Navicat 连接配置

在宿主机(Windows/macOS)上打开 Navicat,新建 MySQL 连接:

  • 连接名:任意(如 VM-MySQL)
  • 主机:(虚拟机 IP根据实际情况填写)
  • 端口3306
  • 用户名root
  • 密码123

点击"测试连接",成功后即可保存并使用。

注意:

  1. 确保虚拟机网络为桥接模式,且与宿主机在同一局域网;

  2. 若提示认证插件错误,请升级 Navicat 至 15+ 版本,或在 MySQL 中执行:

    sql 复制代码
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123';
    FLUSH PRIVILEGES;

十、验证远程连通性

在宿主机命令行测试端口连通性:

bash 复制代码
telnet 192.168.35.142 3306

若连接成功(屏幕变黑或出现乱码),说明网络和端口均正常。


十一、开机自启机制说明

  • Docker 服务 :通过 systemctl enable docker 设置为系统级开机自启;

  • MySQL 容器 :通过 --restart=always 参数由 Docker 自动管理重启;

  • 验证容器重启策略:

    bash 复制代码
    docker inspect mysql8 --format='{{.HostConfig.RestartPolicy.Name}}'

    输出应为 always

通过以上的操作成功用docker部署了mysql并且使用navicat连接上了mysql

相关推荐
无限码力5 小时前
华为OD技术面真题 - 数据库MySQL - 3
数据库·mysql·华为od·八股文·华为od技术面八股文
heartbeat..5 小时前
Redis 中的锁:核心实现、类型与最佳实践
java·数据库·redis·缓存·并发
Prince-Peng5 小时前
技术架构系列 - 详解Redis
数据结构·数据库·redis·分布式·缓存·中间件·架构
cooldream20095 小时前
Vim 报错 E325:swap 文件冲突的原理、处理流程与彻底避免方案
linux·编辑器·vim
i建模5 小时前
在 Rocky Linux 上安装轻量级的 XFCE 桌面
linux·运维·服务器
虾说羊5 小时前
redis中的哨兵机制
数据库·redis·缓存
_F_y5 小时前
MySQL视图
数据库·mysql
2301_790300965 小时前
Python单元测试(unittest)实战指南
jvm·数据库·python
若风的雨6 小时前
WC (Write-Combining) 内存类型优化原理
linux
YMWM_6 小时前
不同局域网下登录ubuntu主机
linux·运维·ubuntu