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

相关推荐
真上帝的左手7 分钟前
30. 技术专题-‌应用框架组件-关系型数据库-MySQL-Mybatis
数据库·分布式·mysql·中间件·mybatis
为思念酝酿的痛13 分钟前
MySQL表的连接
数据库·mysql
无言听风雨丶17 分钟前
Linux 容器本质探秘:Cgroup 与 Namespace 深度解析与实战
linux·运维·服务器·kubernetes
万联WANFLOW17 分钟前
CVE-2026-98432 等漏洞自查:AI 查出的 Linux、Windows 漏洞,运维怎么确认受不受影响
linux·运维·windows·网络安全
OPEN-F32 分钟前
Ubuntu 自动登录后 GNOME 远程桌面连不上?一次登录钥匙环锁定的排查与永久修复
linux·运维·ubuntu
数字新视界32 分钟前
机房动环监控系统在提升数据中心能效与安全中的应用探索
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
硅基手札42 分钟前
【Linux 内核专栏 19】20 · 嵌入式子系统 — GPIO·pinctrl·clock·regulator
linux·运维·单片机·linux内核·嵌入式开发·调试定位
默|笙1 小时前
【Linux网络】传输层协议TCP(3)滑动窗口、流量控制
linux·网络·tcp/ip
bksczm1 小时前
MySQL之存储引擎
数据库·mysql
计算机毕设定制辅导-无忧学长2 小时前
《基于微信小程序健康习惯激励系统设计与实现》
java·spring boot·mysql·微信小程序·uniapp·健康习惯激励系统