使用 Docker 快速部署 MySQL 服务
使用 Docker 快速部署 MySQL 并启用远程访问
Docker 提供了一种高效的方式来部署 MySQL 数据库。本文将展示如何通过几行命令启动一个持久化的 MySQL 容器,配置远程访问,并创建一个安全的远程用户。无论你是开发者还是运维人员,这篇指南都能帮助你快速上手。
前提条件
开始之前,请确认:
- 已安装 Docker(参考 Docker 安装指南)。
- 熟悉基本的 Docker 和 MySQL 操作。
- 准备好终端环境(Linux/Mac 示例,Windows 可使用 WSL 或 PowerShell)。
部署 MySQL 的步骤
我们将完成以下步骤:
- 创建数据持久化目录。
- 启动 MySQL 容器并启用远程访问。
- 创建远程访问用户。
- 测试连接和持久化。
步骤 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 是否正常运行及远程访问是否生效:
-
检查容器状态:
docker ps确认
mysql容器状态为Up。 -
本地连接:
使用 MySQL 客户端测试:mysql -h 127.0.0.1 -u root -p输入 root 密码登录。然后测试新用户:
mysql -h 127.0.0.1 -u remote_user -p输入
secure_password登录。 -
远程连接:
在另一台主机上(确保网络可达,防火墙允许 3306 端口):mysql -h <docker_host_ip> -u remote_user -p用
remote_user和密码登录,<docker_host_ip>为 Docker 主机 IP。 -
验证持久化:
创建测试数据库: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:latest为mysql: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. **代码一致**:保留了你提供的命令,并补充了创建用户的完整流程。
浙公网安备 33010602011771号