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

相关推荐
~黄夫人~16 小时前
Linux 权限管理:用户组 + 特殊权限 + ACL 解析
linux·运维·计算机·学习笔记·权限管理
heimeiyingwang17 小时前
企业供应链 AI 优化:需求预测与智能调度
大数据·数据库·人工智能·机器学习
山岚的运维笔记17 小时前
SQL Server笔记 -- 第73章:排序/对行进行排序
数据库·笔记·后端·sql·microsoft·sqlserver
XLYcmy18 小时前
智能体大赛 目录
数据库·ai·llm·prompt·agent·检索·万方
盟接之桥18 小时前
盟接之桥EDI软件:API数据采集模块深度解析,打造企业数据协同新引擎
java·运维·服务器·网络·数据库·人工智能·制造
2501_9071368218 小时前
离线工具箱 内含53个小工具
linux·服务器·网络
时空潮汐18 小时前
神卓N600 NAS身份核验功能深度解析
linux·运维·网络·神卓nas·神卓n600 pro·家庭轻nas
哈哈浩丶18 小时前
安卓系统全流程启动
android·linux·驱动开发
小李独爱秋18 小时前
模拟面试:用自己的话解释一下lvs的工作原理
linux·运维·面试·职场和发展·操作系统·lvs
一路往蓝-Anbo19 小时前
第 7 章:内存地图 (Memory Map) 深度设计——DDR 与 SRAM
linux·stm32·单片机·嵌入式硬件·网络协议