从零搭建:VMware + Ubuntu + Docker + MySQL 完整指南


📘 从零搭建:VMware + Ubuntu + Docker + MySQL 完整指南

适用场景:在 Windows 笔记本上用虚拟机跑 Ubuntu,再用 Docker 部署 MySQL,并实现从 Windows 本地连接数据库。


一、准备工作:下载所需软件

1.1 下载 VMware Workstation Pro

  • 官网地址Broadcom 支持门户
  • 版本选择 :17.x 系列(目前对个人用户免费
  • 注意事项
    • 需要注册一个 Broadcom 账号才能下载。
    • 下载 for Windows.exe 安装包。
    • ⚠️ 易错点:注册时请填写真实邮箱和国家/地区,否则可能因出口合规审核不通过而无法下载。

1.2 下载 Ubuntu 镜像(ISO)

  • 官网地址Ubuntu 下载页
  • 推荐版本Ubuntu 22.04 LTS(稳定,教程多)或 24.04 LTS
  • 架构选择64-bit (amd64)
  • 版本类型Desktop(桌面版)Server(服务器版) 都可以,桌面版带图形界面,调试更方便。
  • ⚠️ 易错点:如果下载速度慢,可以使用国内镜像站(如清华、中科大镜像源)下载。

二、安装 VMware 并创建 Ubuntu 虚拟机

2.1 安装 VMware

  • 双击下载的 .exe 文件,按提示完成安装。
  • ⚠️ 重要 :安装完成后不要开启 Windows 的 Hyper-V 功能,否则 VMware 可能无法正常运行或导致蓝屏。
  • 🔴 特别提醒(联想小新等机型) :如果开启 BIOS 中的虚拟化(VT-x)后蓝屏,请在 Windows 功能中关闭 Hyper-V、虚拟机平台、Windows 虚拟机监控程序平台,然后重启电脑。

2.2 创建虚拟机

  1. 打开 VMware,点击 "创建新的虚拟机"
  2. 选择 "典型(推荐)""稍后安装操作系统"
  3. 客户机操作系统选择 "Linux" → 版本选择 "Ubuntu 64 位"
  4. 设置虚拟机名称和存储位置。
  5. 磁盘大小 :建议 20GB 以上 ,并选择 "将虚拟磁盘存储为单个文件"
  6. 点击 "自定义硬件"
    • 内存 :建议分配 2GB ~ 4GB(不低于 2GB)。
    • 处理器 :至少 2 核
    • 网络适配器 :选择 "NAT 模式"(便于联网,后续也可改桥接)。
    • CD/DVD :选择 "使用 ISO 镜像文件",浏览选择你下载的 Ubuntu ISO。
  7. 点击 "完成"

2.3 安装 Ubuntu 系统

  1. 点击 "开启此虚拟机"
  2. 选择 "Try or Install Ubuntu" → 选择语言为 "中文(简体)""English" → 点击 "安装 Ubuntu"
  3. 键盘布局默认即可,选择 "正常安装" 并勾选 "安装时下载更新"(可选,建议勾选以获取最新补丁)。
  4. 安装类型选择 "清除整个磁盘并安装 Ubuntu"(虚拟机内无重要数据,选这个最省心)。
  5. 设置用户名、计算机名和密码(请务必记住密码)。
  6. 等待安装完成,重启虚拟机。

三、Ubuntu 基础配置

3.1 更换软件源(加速 apt 下载)

Ubuntu 默认源在国外,速度较慢,建议换成国内镜像源。

  1. 打开终端(Ctrl + Alt + T)。

  2. 备份原有源列表:

    bash 复制代码
    sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
  3. 编辑源列表(以阿里云镜像为例):

    bash 复制代码
    sudo nano /etc/apt/sources.list

    删除原有内容,粘贴以下内容(适用于 Ubuntu 22.04 Jammy):

    复制代码
    deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

    💡 提示 :如果你装的是 Ubuntu 24.04,请将 jammy 替换为 noble

  4. 保存(Ctrl+O,回车,Ctrl+X)并更新:

    bash 复制代码
    sudo apt update

3.2 安装 VMware Tools(增强交互)

安装此工具后可以实现文件拖拽、剪贴板共享、自适应窗口大小等功能。

bash 复制代码
sudo apt install open-vm-tools open-vm-tools-desktop -y
sudo reboot

四、安装 Docker 和 Docker Compose

4.1 安装 Docker

bash 复制代码
sudo apt install docker.io -y

4.2 启动 Docker 并设置开机自启

bash 复制代码
sudo systemctl start docker
sudo systemctl enable docker

验证安装:

bash 复制代码
docker --version

4.3 安装 Docker Compose 插件(新版)

⚠️ 注意 :新版 Docker Compose 命令是 docker compose(中间是空格,不是连字符),不要和旧版 docker-compose 混淆。

步骤一:添加 Docker 官方 GPG 密钥和软件源(使用阿里云镜像,国内访问更快)
bash 复制代码
# 1. 安装依赖
sudo apt update
sudo apt install -y ca-certificates curl gnupg

# 2. 创建密钥目录并下载 GPG 密钥(使用阿里云镜像)
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# 3. 添加 Docker APT 源(阿里云镜像)
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. 更新软件包列表
sudo apt update

# 5. 安装 Docker Compose 插件
sudo apt install -y docker-compose-plugin
验证安装
bash 复制代码
docker compose version

正常会显示类似 Docker Compose version v2.x.x 的信息。


五、配置 Docker 镜像加速器(解决拉取镜像慢/失败问题)

由于 Docker Hub 在国内访问不稳定,需要配置国内镜像加速器。

  1. 编辑 Docker 配置文件:

    bash 复制代码
    sudo nano /etc/docker/daemon.json
  2. 写入以下内容(使用阿里云和 DaoCloud 镜像):

    json 复制代码
    {
      "registry-mirrors": [
        "https://registry.cn-hangzhou.aliyuncs.com",
        "https://docker.m.daocloud.io"
      ],
      "dns": ["114.114.114.114", "223.5.5.5"]
    }
  3. 保存退出(Ctrl+O,回车,Ctrl+X),然后重启 Docker:

    bash 复制代码
    sudo systemctl restart docker
  4. 验证是否生效:

    bash 复制代码
    sudo docker info | grep -A 1 "Registry Mirrors"

六、使用 Docker Compose 部署 MySQL

6.1 创建工作目录

bash 复制代码
mkdir -p ~/docker/mysql/{data,conf.d}
cd ~/docker

6.2 创建 docker-compose.yml 文件

bash 复制代码
nano docker-compose.yml

粘贴以下内容(⚠️ 请务必将密码 your_strong_password 替换为你自己的强密码):

yaml 复制代码
services:
  mysql:
    image: mysql:8.0
    container_name: mysql-container
    environment:
      MYSQL_ROOT_PASSWORD: your_strong_password   # 🔴 请修改为你的密码
    ports:
      - "3306:3306"
    volumes:
      - ~/docker/mysql/data:/var/lib/mysql
      - ~/docker/mysql/conf.d:/etc/mysql/conf.d

⚠️ 易错点

  • 文件中不要写 version: '3.8' 这一行,新版 Docker Compose 已弃用该字段,写了会报警告。
  • 不要 同时设置 MYSQL_USER=root,这会与 MYSQL_ROOT_PASSWORD 冲突,导致容器启动失败。
  • 密码中尽量不要包含特殊字符(如 $!&),避免 shell 解析错误。

保存退出(Ctrl+O,回车,Ctrl+X)。

6.3 启动 MySQL 容器

bash 复制代码
sudo docker compose up -d

6.4 验证容器是否正常运行

bash 复制代码
sudo docker ps

如果看到 mysql-containerSTATUSUp,说明启动成功。


七、解决 Windows 客户端连接 MySQL 的认证问题(错误 1251)

MySQL 8.0 默认使用 caching_sha2_password 认证插件,而一些旧版客户端(如 SQLyog、Navicat 早期版本)默认使用 mysql_native_password,会导致连接报错 1251

7.1 修改 root 用户的认证方式

在 Ubuntu 终端执行以下命令(替换密码为你的实际密码):

bash 复制代码
sudo docker exec -it mysql-container mysql -uroot -p你的密码 -e "ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码'; FLUSH PRIVILEGES;"

示例 (假设密码是 123456):

bash 复制代码
sudo docker exec -it mysql-container mysql -uroot -p123456 -e "ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; FLUSH PRIVILEGES;"

⚠️ 安全提示 :命令行中直接暴露密码可能会有安全风险,生产环境建议使用 -p 交互式输入。

7.2 验证认证方式是否修改成功

bash 复制代码
sudo docker exec -it mysql-container mysql -uroot -p你的密码 -e "SELECT host, user, plugin FROM mysql.user WHERE user='root';"

如果 plugin 列显示为 mysql_native_password,则修改成功。


八、从 Windows 连接 Ubuntu 中的 MySQL

8.1 获取 Ubuntu 虚拟机的 IP 地址

在 Ubuntu 终端执行:

bash 复制代码
ip a

找到类似 ens33 网卡的 inet 地址,例如 192.168.160.128

8.2 在 Windows 上测试网络连通性

打开 Windows 命令提示符(Win + R,输入 cmd):

bash 复制代码
ping 192.168.160.128   # 替换为你的实际 IP

8.3 配置 MySQL 允许远程连接(如果上一步已执行 ALTER USER 则此步可跳过)

如果修改认证方式后仍无法连接,可以检查一下授权:

bash 复制代码
sudo docker exec -it mysql-container mysql -uroot -p你的密码 -e "SELECT host, user FROM mysql.user;"

确保 root 用户的 host 列为 %(允许任意 IP 连接)。

8.4 检查 Ubuntu 防火墙(如果启用了 ufw)

bash 复制代码
sudo ufw status

如果防火墙开启,需要放行 3306 端口:

bash 复制代码
sudo ufw allow 3306

8.5 在 Windows 上使用客户端连接

以 SQLyog 为例:

  • MySQL 主机地址 :Ubuntu 的 IP(如 192.168.160.128
  • 用户名root
  • 密码:你设置的密码
  • 端口3306

点击 "测试连接",如果显示成功,就大功告成了!


九、常用 Docker 命令速查

操作 命令
查看运行中的容器 sudo docker ps
查看所有容器(含已停止) sudo docker ps -a
启动容器 sudo docker compose up -d
停止并删除容器 sudo docker compose down
查看容器日志 sudo docker logs mysql-container
进入容器内部 sudo docker exec -it mysql-container bash
在容器内执行 MySQL 命令 sudo docker exec -it mysql-container mysql -uroot -p
备份所有数据库 sudo docker exec mysql-container mysqldump -uroot -p --all-databases > backup.sql
恢复数据库 `cat backup.sql

十、常见问题速查表

问题现象 可能原因 解决方法
开启虚拟化后 Windows 蓝屏 Hyper-V 与 VMware 冲突 关闭 Windows 功能中的 Hyper-V、虚拟机平台
sudo: docker-compose: command not found 安装的是新版插件,命令是 docker compose 使用 docker compose(空格)代替 docker-compose(连字符)
failed to resolve reference 镜像拉取网络问题 配置 daemon.json 中的 registry-mirrors
no such host DNS 解析失败 daemon.json 中添加 "dns": ["114.114.114.114"]
容器启动后立即退出 环境变量配置错误(如 MYSQL_USER=root 检查 docker-compose.yml,删除冲突的环境变量
Windows 连接报错 1251 认证插件不兼容 执行 ALTER USER ... IDENTIFIED WITH mysql_native_password
Windows ping 不通 Ubuntu VMware 网络模式问题 尝试改为桥接模式,或检查虚拟网卡设置

附录:推荐的国内镜像源地址

用途 镜像地址
Ubuntu APT 源 http://mirrors.aliyun.com/ubuntu/
Docker 镜像加速器 https://registry.cn-hangzhou.aliyuncs.com
Docker 镜像加速器 https://docker.m.daocloud.io
Docker APT 源 https://mirrors.aliyun.com/docker-ce/linux/ubuntu
Ubuntu ISO 下载 https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/

📝 文档版本 :1.0

📅 最后更新 :2026-08-06

👤 适用环境:Windows 10/11 + VMware Workstation Pro 17.x + Ubuntu 22.04/24.04 LTS + Docker 26.x + MySQL 8.0


如果后续还有补充或修改需求,随时告诉我,我可以帮你更新这份文档。

相关推荐
tianyu2342 小时前
MySQL字符串处理函数完全指南:从入门到实战
mysql·字符串·函数·截取
天空之外1362 小时前
Docker安装MySQL 8.4 LTS、Docker安装Redis 7.4.x、Docker安装MinIO
java·mysql·docker
空谷有来人3 小时前
docker安装redis
redis·docker·容器
Ai拆代码的曹操4 小时前
K8s 实战:CrashLoopBackOff 状态下 kubectl logs 拿不到日志的三层排查方案
linux·docker·kubernetes
XR风云5 小时前
docker buildx 忽略容器镜像服务的证书校验的方法
运维·docker·容器
小白说大模型5 小时前
【MYSQL】MYSQL学习的一大重点:索引(下)- B+树
b树·学习·mysql
2601_949816686 小时前
mega fusion:从公开信息出发梳理外汇投教内容建设与投教内容
mysql
代码代码快快显灵6 小时前
MYSQL-DAY2
数据库·mysql
TechWJ6 小时前
从 MySQL 迁到 KingbaseES 之后:用 MCP 排查一条慢 SQL
数据库·sql·mysql·国产数据库·kingbasees·mcp·kes