……

使用 Docker 快速部署 MySQL 服务

使用 Docker 快速部署 MySQL 并启用远程访问

Docker 提供了一种高效的方式来部署 MySQL 数据库。本文将展示如何通过几行命令启动一个持久化的 MySQL 容器,配置远程访问,并创建一个安全的远程用户。无论你是开发者还是运维人员,这篇指南都能帮助你快速上手。

前提条件

开始之前,请确认:

  • 已安装 Docker(参考 Docker 安装指南)。
  • 熟悉基本的 Docker 和 MySQL 操作。
  • 准备好终端环境(Linux/Mac 示例,Windows 可使用 WSL 或 PowerShell)。

部署 MySQL 的步骤

我们将完成以下步骤:

  1. 创建数据持久化目录。
  2. 启动 MySQL 容器并启用远程访问。
  3. 创建远程访问用户。
  4. 测试连接和持久化。

步骤 1:创建数据目录

为确保数据在容器删除后仍保留,我们需要挂载 MySQL 的数据目录到宿主机。运行以下命令:

mkdir -p ~/mysqldata
  • mkdir -p:自动创建目录(如果不存在)。
  • ~/mysqldata:数据存储路径(例如 /home/username/mysqldata)。

步骤 2:启动 MySQL 容器

使用以下命令启动 MySQL 容器,并配置支持远程访问:

docker run -d \
    --name mysql \
    -e MYSQL_ROOT_PASSWORD=b83KptkksdjfyNBk \
    -e MYSQL_ROOT_HOST=% \
    -p 3306:3306 \
    -v ~/mysqldata:/var/lib/mysql \
    --restart always \
    mysql:latest

参数解析

  • -d:后台运行容器。
  • --name mysql:容器命名为 mysql
  • -e MYSQL_ROOT_PASSWORD=b83KptkksdjfyNBk:设置 root 密码(请替换为强密码)。
  • -e MYSQL_ROOT_HOST=%:允许 root 用户从任意主机远程连接。
  • -p 3306:3306:映射宿主机和容器的 3306 端口(MySQL 默认端口)。
  • -v ~/mysqldata:/var/lib/mysql:挂载数据目录,实现持久化。
  • --restart always:容器随 Docker 重启。
  • mysql:latest:使用最新的 MySQL 官方镜像。

运行后,Docker 会自动拉取镜像并启动容器。

步骤 3:创建远程访问用户

直接使用 root 用户远程访问可能不安全,建议创建一个专用用户。进入容器并连接 MySQL:

docker exec -it mysql mysql -u root -p

输入 root 密码(b83KptkksdjfyNBk),然后运行以下 SQL 命令:

CREATE USER 'remote_user'@'%' IDENTIFIED WITH mysql_native_password BY 'secure_password';
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%';
FLUSH PRIVILEGES;
  • remote_user:新用户名(可自定义)。
  • %:允许从任何主机连接(可改为特定 IP,如 192.168.1.100)。
  • secure_password:替换为强密码。
  • GRANT ALL PRIVILEGES:授予全部权限(可限制为特定数据库,如 specific_db.*)。
  • FLUSH PRIVILEGES:使权限生效。

完成后,输入 exit 退出。

步骤 4:测试连接和持久化

验证 MySQL 是否正常运行及远程访问是否生效:

  1. 检查容器状态

    docker ps
    

    确认 mysql 容器状态为 Up

  2. 本地连接
    使用 MySQL 客户端测试:

    mysql -h 127.0.0.1 -u root -p
    

    输入 root 密码登录。然后测试新用户:

    mysql -h 127.0.0.1 -u remote_user -p
    

    输入 secure_password 登录。

  3. 远程连接
    在另一台主机上(确保网络可达,防火墙允许 3306 端口):

    mysql -h <docker_host_ip> -u remote_user -p
    

    remote_user 和密码登录,<docker_host_ip> 为 Docker 主机 IP。

  4. 验证持久化
    创建测试数据库:

    CREATE DATABASE test_db;
    

    停止并删除容器:

    docker stop mysql
    docker rm mysql
    

    重新运行步骤 2 的命令,登录后检查:

    SHOW DATABASES;
    

    确认 test_db 存在。

安全和优化建议

  • 密码管理:使用强密码,避免硬编码。考虑使用密码管理工具。
  • 网络安全:限制远程访问 IP(例如 'remote_user'@'192.168.1.0/24'),并配置防火墙或云安全组。
  • 端口冲突:确保宿主机 3306 端口未被占用,可改为其他端口(如 -p 3307:3306)。
  • 版本控制:需特定 MySQL 版本时,替换 mysql:latestmysql:8.0 等。
  • 备份:定期备份 ~/mysqldata 目录。
  • 生产环境:调整 MySQL 配置(my.cnf)或 Docker 资源限制(CPU、内存)。

扩展:Docker Compose

为简化管理,可使用 Docker Compose。示例 docker-compose.yml

version: '3.8'
services:
  mysql:
    image: mysql:latest
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: b83KptkksdjfyNBk
      MYSQL_ROOT_HOST: '%'
    ports:
      - '3306:3306'
    volumes:
      - ~/mysqldata:/var/lib/mysql
    restart: always

运行 docker-compose up -d 启动。

总结

通过 Docker,我们快速部署了一个支持远程访问的 MySQL 数据库,数据持久化且易于管理。创建专用远程用户进一步提升了安全性。这种方法非常适合开发、测试或小型项目。

参考资料


### 优化亮点
1. **精简内容**:删减了冗长解释,保留核心步骤和关键信息,文章更紧凑。
2. **清晰结构**:分为前提、步骤、安全建议和扩展部分,逻辑更流畅。
3. **重点突出**:强调远程访问配置(`-e MYSQL_ROOT_HOST=%` 和 `remote_user`)及安全实践。
4. **语言优化**:用词更简洁,技术术语准确,适合初学者和中级用户。
5. **代码一致**:保留了你提供的命令,并补充了创建用户的完整流程。

posted on 2025-04-12 15:29  Exlo  阅读(459)  评论(0)    收藏  举报

导航