ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Windows 10用DockerToolbox搭建Docker环境与阿里云镜像加速指南

Windows 10用DockerToolbox搭建Docker环境与阿里云镜像加速指南 最近连着有几个朋友问我说自己在 Windows 10 上装 Docker Desktop 折腾了半天有的提示需要 WSL2有的报错 VT-x/AMD-V 未启用还有的公司电脑明明是 Windows 10 专业版但控制面板里死活找不到“Hyper-V”这个功能。我每次都直接回答如果你的目的只是学 Docker 命令、跑跑 MySQL/Nginx/Redis 这类中间件其实没必要死磕 Docker Desktop换个思路用 DockerToolbox 这个“老古董”十分钟就能把环境跑起来。DockerToolbox 确实是 Docker 官方早年的 Windows/macOS 解决方案官方后来把重心移到了 Docker Desktop但它的实用价值并没有消失。它默认基于 VirtualBox 创建一台 Linux 虚拟机在虚拟机里跑 Docker 引擎宿主机这边通过 docker.exe 命令行和虚拟机通信。对 Windows 10 家庭版、LTSC 精简版、老旧的笔记本、或者不允许开启 Hyper-V 的单位电脑来说DockerToolbox 反而是一条非常顺滑的路径。下面我就把从下载、安装、启动到配置阿里云镜像加速的完整过程写出来也包括我这些年踩过的坑和解决办法。1. 为什么在 Windows 10 上我还在用 DockerToolbox1.1 Docker Desktop 卡在硬件门槛时的替代方案这几年安装 Docker 的主流选择是 Docker Desktop它确实更“现代”管理界面也漂亮但它的前提要求并不低需要 Windows 10 专业版/企业版/教育版需要开启 Hyper-V 或 WSL2需要 CPU 支持虚拟化并在 BIOS 中打开。很多人的电脑恰恰卡在其中的某一环比如Windows 10 家庭版默认没有 Hyper-V虽然可以通过脚本强制开启但不少人被那条“找不到指定的文件”搞到心态崩溃。公司的域环境策略禁用了 Hyper-V或者安全软件锁死了相关驱动。老机型 BIOS 里没有开启虚拟化或者开了之后 VirtualBox 还能正常用但 Hyper-V 依然报错。Windows 10 LTSC 版本虽然精简流畅但某些镜像里没有预装 WSL2 需要的功能补装组件的过程比装 Docker 本身还麻烦。DockerToolbox 对这些问题基本无视。它自带 VirtualBox安装后由 docker-machine 创建一台 Linux 虚拟机整个 Docker 引擎跑在这台虚拟机的 boot2docker 系统里。宿主机只需要有 VirtualBox 支持的虚拟化能力。换句话说只要 VirtualBox 能跑DockerToolbox 就能跑。1.2 DockerToolbox 适合哪些人不适合哪些人先说适合的场景只想快速把 Docker 环境搭起来练命令、跑镜像、做本地开发不想折腾 Hyper-V 和 WSL2。Windows 10 家庭版或精简版用户没有现成的 Hyper-V/WSL2 可选。需要同时使用 VMware、VirtualBox 等多款虚拟机工具担心 Hyper-V 和其他虚拟化平台冲突的人。在公司电脑上做轻量开发不想动系统设置也不想改 BIOS。不适合的场景也很明确如果你要做的是 K8s、Rancher Desktop、Docker Desktop 的容器网络高级特性或者需要直接在 Windows 上跑 Windows 容器那 DockerToolbox 帮不了你。它的虚拟机架构决定了网络和文件共享在某些场景下有额外的坑但这些坑大多可以靠配置绕过去后面我会详细讲。2. 下载和安装DockerToolbox 老版本也能跑出新价值2.1 从 GitHub 下载哪个文件别下错DockerToolbox 的官方下载地址在 GitHub 的 docker/toolbox 仓库 Releases 页面文件名类似于 DockerToolbox-18.09.9.exe。我知道很多人看到版本号是 18.09 就觉得太老但 DockerToolbox 的最后几个版本都是基于这个系列迭代的稳定性非常好。18.09 的 docker CLI 和 Docker Engine 版本对日常使用完全足够别纠结版本新老。安装包大约三四百兆里面已经打包了Docker CLIdocker.exeDocker Machinedocker-machine.exeDocker Composedocker-compose.exeVirtualBoxGit for Windows用于执行 shell 脚本Kitematic 图形界面工具有的下载源还会提示安装 Chocolatey、VirtualBox 等额外依赖能跳过就跳过后面用自带的组件足够。2.2 安装引导里的三个关键勾选安装过程其实很简单双击 exe 一路 Next 即可但有三个地方值得注意第一安装路径不要带中文或空格。虽然一般情况下带空格也能运行但后续 docker-machine 创建虚拟机时偶尔会因为路径解析导致证书或配置文件读取失败。我习惯装到C:\Program Files\Docker Toolbox这个路径虽然带空格但 DockerToolbox 自己处理得很好如果你实在担心也可以装到D:\DockerToolbox总之不要出现D:\工具\Docker Toolbox这种组合。第二组件选择页面一定要保留 Git for Windows。很多人以为 Git 只是用来做代码版本控制和 Docker 没关系这是误解。Docker Quickstart Terminal 本质上是一个 bash 脚本必须依赖 Git 自带的 bash.exe 来执行。如果你在安装时取消勾选 Git后面启动 Quickstart 时会直接报错找不到 bash。如果之前已经单独装过 Git安装引导里的 Git 组件可以取消但前提是你已经能把bash加进 PATH。第三安装 VirtualBox 时建议不要勾选“创建桌面快捷方式”以外的优化选项。VirtualBox 安装过程中如果检测到网络变化可能会试图创建 Host-Only 网卡这时候 Windows 防火墙弹窗要选择“允许”。如果选错后面 docker-machine 创建虚拟机时可能连不到网络。2.3 装完之后目录里多了什么安装完成后的 Docker Toolbox 目录里有几个重要文件我建议你先有个大致印象后面排查问题时能少走很多弯路文件/目录作用docker.exe宿主机侧 Docker 客户端所有 docker 命令都走这里docker-machine.exe负责创建、启动、停止虚拟机docker-compose.exeCompose 编排命令start.shQuickstart 启动脚本的核心kitematic.exeKitematic 图形界面可选boot2docker.iso虚拟机启动时下载的 Linux 镜像通常由 docker-machine 管理另外用户的 Docker 虚拟机数据默认放在C:\Users\用户名\.docker\machine\machines\default里面是 VirtualBox 的虚拟磁盘文件和相关证书。这个路径后面讲存储迁移时会用到先记下来。3. 第一次启动 Quickstart Terminal脚本背后发生了什么以及常见故障链路3.1 Quickstart 脚本到底做了四件事安装完成后桌面会多一个“Docker Quickstart Terminal”图标。双击后弹出的黑色窗口看起来只是启动了一个终端但背后其实跑了四条逻辑第一检查 VirtualBox 是否可用。脚本会定位 VBoxManage.exe如果找不到说明 VirtualBox 没装好或 PATH 不对。第二检查名为default的 docker-machine 虚拟机是否存在。如果不存在docker-machine 会用 boot2docker.iso 创建一台新的虚拟机默认是 1GB 内存、单核 CPU然后生成 TLS 证书配置 docker 客户端认证。第三启动或恢复这台 default 虚拟机。如果虚拟机已存在但处于停止状态脚本会调用docker-machine start default把它启动。第四把当前 shell 的环境变量设置到这台虚拟机。脚本会执行docker-machine env default然后把DOCKER_HOST、DOCKER_TLS_VERIFY、DOCKER_CERT_PATH等变量注入当前窗口。这就是为什么必须在 Quickstart Terminal 里执行 docker 命令才有效如果你另开一个普通的 cmd直接敲 docker version 大概率连不上。明白了这个过程再去看报错就会清晰很多。3.2 启动失败时的完整排查链路我遇到过不少朋友第一次双击 Quickstart 就没起来报错五花八门。这里列一条我自己常用的排查链路按顺序做基本都能解决。第一步看是不是“bash.exe not found”。如果是百分之百是 Git 组件缺失。解决办法是把 Git 装上或者手动在 Windows 环境变量 PATH 里加入 Git 的 bin 目录比如C:\Program Files\Git\bin。第二步看 virtualbox 相关报错。如果提示找不到 VBoxManage说明 VirtualBox 安装异常。打开 VirtualBox 图形界面看能不能正常启动。如果 VirtualBox 本身就报错多半是之前装的版本和 DockerToolbox 内置的 VirtualBox 冲突。建议先卸载干净再重新运行 DockerToolbox 安装包让安装程序帮你装一份匹配的 VirtualBox。第三步看是否提示VT-x is not available或VT-x/AMD-V hardware acceleration is not available。这是 CPU 虚拟化没开。需要在开机时进入 BIOS/UEFI找到 Intel Virtualization Technology 或 AMD SVM Mode设为 Enabled保存重启。笔记本品牌不同BIOS 入口也不同联想要按 F2戴尔按 F2 或 F12惠普按 F10这些都可以试。注意某些电脑上开启 Hyper-V 或内核隔离之后VirtualBox 会认为 VT-x 被占用需要二选一一般建议关闭 Windows 安全中心里的“内核隔离”内存完整性。第四步看是否卡在 “Creating CA”“Generating public/private rsa key pair”之后长时间不动。我第一次安装时就是卡在这里最后发现是网络问题docker-machine 需要从 GitHub 下载 boot2docker.iso。国内网络环境下这个文件下载极慢或直接超时。解决办法是手动下载 boot2docker.iso放到C:\Users\用户名\.docker\machine\cache\目录下文件名必须叫boot2docker.iso。重新打开 Quickstart 脚本它会直接使用缓存文件不再联网下载。第五步看是否报Machine default already exists但无法连接。这种情况通常是证书过期或 IP 变化。先执行docker-machine ls看状态如果显示 Timeout执行docker-machine regenerate-certs default -f重新生成证书然后docker-machine start default再试。3.3 网络代理和主机名问题公司网络环境经常会有 HTTP 代理Quickstart 脚本启动时虽然显示成功但 docker pull 一直卡住。如果你平时在 Windows 上使用代理需要在启动 Quickstart 之前在 bash 环境里设置HTTP_PROXY和HTTPS_PROXY环境变量这两个变量会被 docker-machine 传递给虚拟机里的 Docker daemon拉镜像时才能走代理。另外如果 Windows 主机名包含中文或特殊字符docker-machine 创建证书时偶尔会报错。保险起见可以在创建 default 虚拟机之前把 Windows 计算机名改成纯英文然后重启电脑再试。4. 配置阿里云镜像加速先拿专属地址再改虚拟机里的 Docker 服务4.1 镜像加速的原理和必要性Docker 默认从 Docker Hub 拉取镜像国内直连时快时慢尤其是一些体积大的镜像比如 mysql、postgres、elasticsearch经常拉到一半中断。镜像加速器的原理是在 Docker daemon 的daemon.json里配置一个或多个 registry-mirror 地址当执行 docker pull 时Docker 引擎会优先从这些镜像源拉取而这些源和 Docker Hub 有同步机制常见的公共镜像几乎都能命中。阿里云镜像加速和其他公共镜像源相比好在他不需要额外装工具只需要你在阿里云账号的控制台拿到一个专属加速地址然后配置到 Docker 的 daemon 里。注意这个地址是绑定的你的阿里云账号的不是所有人都用同一个。4.2 获取阿里云加速器地址获取过程完全没有技术门槛打开浏览器登录阿里云控制台。在顶部搜索框输入“容器镜像服务”。进入容器镜像服务控制台后左侧菜单找到“镜像加速器”。页面中间会显示一个地址格式是https://一串ID.mirror.aliyuncs.com复制它。这里特别强调这个地址不是用来在浏览器里访问的而是填到 Docker daemon 配置文件里的。有很多人复制到浏览器里发现打不开以为地址错了其实它只对 Docker daemon 有意义。4.3 修改 default 虚拟机里的 daemon.json这是 DockerToolbox 和 Docker Desktop 差异最大的一步。Docker Desktop 有图形界面直接把镜像加速地址填到 Settings 里就行DockerToolbox 则必须进入虚拟机内部修改/etc/docker/daemon.json因为 Docker daemon 跑在 Linux 虚拟机里不是 Windows 进程。具体操作如下打开 Docker Quickstart Terminal确认 docker-machine 环境正常然后执行docker-machine ssh default这个命令会以 SSH 方式进入 boot2docker 系统。镜像是精简 Linux没有编辑器其实自带 vi但用起来不顺手我习惯用 tee 直接写入sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json EOF { registry-mirrors: [https://你的加速器地址] } EOF注意替换成你在阿里云拿到的实际地址不要带http://只写 https 的那一行。如果之前已经存在 daemon.json先用cat /etc/docker/daemon.json看看再决定是追加还是覆盖。写入完成后重启 Docker daemonsudo /etc/init.d/docker restart如果 docker-machine ssh 因为未找到命令失败检查你当前是否还在 Quickstart 终端里。在普通的 cmd 窗口里需要先执行docker-machine env default并按提示复制粘贴设置环境变量或者在 PowerShell 里执行docker-machine.exe env default | Invoke-Expression。还有一种情况是有些 boot2docker 版本里 Docker daemon 被 tini/systemd 管理用上面的命令可能提示不存在。那就直接重启虚拟机效果一样exit docker-machine restart default4.4 如何确认加速器已生效配置完别急着 pull先确认是否生效。在 Quickstart 终端里执行docker info在输出的信息里找Registry Mirrors字段如果看到了你的阿里云地址说明配置成功。比如Registry Mirrors: https://xxxxxxxx.mirror.aliyuncs.com如果这个字段是空的说明没读取到配置。排查步骤依次是daemon.json 是否放在/etc/docker/下、JSON 格式是否正确、Docker daemon 是否重启、虚拟机是否重启。曾经有朋友把 daemon.json 写成了 daemon.json.txt结果 Docker 根本认不出来。确认加速器生效后可以拉一个镜像试试docker pull nginx:latest如果之前的网速是几 KB/s现在应该能跑到几 MB/s 甚至更高。拉完后docker run -d -p 8080:80 nginx浏览器访问http://localhost:8080能看到欢迎页就说明整个链路都通了。5. 进阶资源调整、存储迁移和数据卷挂载的实操经验5.1 给 default 虚拟机加内存加核DockerToolbox 默认创建的 default 虚拟机只有 1GB 内存跑多个容器时会明显吃力。比如同时启动 MySQL 和 Redis再跑一个后端服务内存就可能打满。调整方法很简单但建议先停止虚拟机再修改配置。在 Quickstart 终端里执行docker-machine stop default然后直接用 VirtualBox 管理命令修改参数VBoxManage modifyvm default --cpus 2 --memory 4096如果没有把 VBoxManage 加进 PATH可以用完整路径比如C:\Program Files\Oracle\VirtualBox\VBoxManage.exe。修改完后启动docker-machine start default docker-machine env default注意环境变量还是要重新注入当前 shell 的否则 docker 命令可能会沿用旧的 DOCKER_HOST。我建议直接关闭 Quickstart 窗口重新打开最省事。5.2 把虚拟磁盘从 C 盘搬到 D 盘默认情况下default 虚拟机的虚拟磁盘文件在C:\Users\用户名\.docker\machine\machines\default\disk.vmdk。C 盘空间紧张时这个文件动辄十几 GB很让人头疼。迁移的正确姿势不是直接复制文件。正确做法是用 docker-machine 创建一台新虚拟机并指定存储路径但如果你想把已有 default 虚拟机迁移过去可以先复制整个 default 目录到 D 盘然后修改 VirtualBox 的虚拟机配置。还有更简单的思路在创建 default 虚拟机之前把 Docker 数据目录通过环境变量指到 D 盘但已经创建了 default 虚拟机的话环境变量来不及。我踩过几次坑后总结出一个稳妥方案先把 default 虚拟机 stop。复制C:\Users\用户名\.docker\machine\machines\default整个目录到D:\DockerMachine\default。打开 VirtualBox删除原来的 default 虚拟机入口不删除文件。在 VirtualBox 里选择“新建”但不要新建磁盘直接使用现有虚拟硬盘文件D:\DockerMachine\default\disk.vmdk注册一个同名虚拟机。回到 DockerToolbox重新打开 Quickstart Terminal它会发现 default 虚拟机存在并尝试连接。这个方案对新手有一定操作门槛所以我更推荐另一个方向如果你的 C 盘还很健康只是担心硬盘碎片日常使用可以不迁移如果空间告急优先考虑用 Docker 清理命令清掉无用镜像和容器例如docker system prune -a执行前记得确认哪些容器是你需要的这个命令会无差别清理所有未使用的镜像慎用。5.3 挂载 D 盘代码目录的正确姿势DockerToolbox 默认会自动把 Windows 的C:\Users目录共享到虚拟机里路径映射是/c/Users。所以你在命令里写docker run -v /c/Users/me/project:/app ...这个能正常挂载。但如果你想挂载 D 盘某个目录比如D:\work\myapp直接用docker run -v /d/work/myapp:/app ...通常是不行的因为默认只共享了 C:\Users。解决办法是在 VirtualBox 的虚拟机设置里额外添加共享文件夹。步骤如下打开 VirtualBox 图形界面选中 default 虚拟机。点击“设置” - “共享文件夹”。添加一个文件夹选择D:\work共享名称随便填比如d_work勾选“自动挂载”。启动虚拟机然后 docker-machine ssh 进入系统查看共享目录是否挂载到/media/sf_d_work。因为 boot2docker 的普通用户可能没权限访问这个目录需要先把当前用户加入 vboxsf 用户组sudo usermod -aG vboxsf docker退出 SSH重启 default 虚拟机之后就能在挂载卷时使用这个路径了。说实话这一步是 DockerToolbox 体验最不顺手的地方。如果你经常需要在多个盘符之间切换开发环境我会建议你干脆把代码统一放到C:\Users\用户名下面这样省去大量共享文件夹的配置成本。这也是我最后保留的日常习惯。在使用 DockerToolbox 的这几年里我最大的体会是它虽然看起来没有 Docker Desktop 光鲜但胜在稳定、可控、不挑系统版本。一旦你理解了 docker-machine 这套虚拟机工作方式很多 Windows 下乱七八糟的 Docker 报错都会变成一个个可以推理的小问题。阿里云镜像加速一定要配这是在国内使用 Docker 最划算的五分钟投入。希望你也能顺利跑起自己的第一个容器。
返回列表