Windows 11 安装 Docker Toolbox 基于 VirtualBox
2022-12-02
阅读 {{counts.readCount}}
评论 {{counts.commentCount}}
## 前言
先明确一点,这是一个过时的方案,也不被官方推荐,以后也不会再更新。如今win10、win11上安装docker,官方推荐方法是去官网下载一个安装程序,然后是基于wsl2运行docker,但我对wsl的印象一直不好,还是喜欢以前的VirtualBox方案。外加wsl2的docker用了一段时间不是遇到bug就是性能有问题,果断卸载,换回熟悉的老方案。
## 折腾
由于docker官方已停止提供下载,最后一个版本 `19.03.1` 只能在github下载,顺手下载一个最新版 `VirtualBox`
[https://github.com/docker-archive/toolbox/releases](https://github.com/docker-archive/toolbox/releases)
[https://www.virtualbox.org/wiki/Downloads](https://www.virtualbox.org/wiki/Downloads)
<br>
安装 `VirtualBox`
![](/api/file/getImage?fileId=63326457da74050013014817)
<br>
安装 `Docker Toolbox` , 可选项如图勾选
![](/api/file/getImage?fileId=63326457da74050013014816)
<br><br>
万事俱备 打开桌面的 `Docker Quickstart Terminal`
遇到报错如下
![](/api/file/getImage?fileId=63326685da74050013014819)
意思是CPU的VT-X/AMD-V没打开,但实际上现代CPU和主板都支持这个功能,且会默认开启,我这里也在BIOS检查了,是开启状态。
无奈这里只能改写脚本,以关闭VTX检查。
<br>
在 `Toolbox` 安装目录 `C:\Program Files\Docker Toolbox`
有一个 `start.sh` 文件 ,找到69行这句话
`"${DOCKER_MACHINE}" create -d virtualbox $PROXY_ENV "${VM}"`
改为
`"${DOCKER_MACHINE}" create -d virtualbox --virtualbox-no-vtx-check $PROXY_ENV "${VM}"`
<br>
再次启动桌面 `Docker Quickstart Terminal`
我这次网络给力是一次通过了
如果你遇到 `boot2docker.iso` 下载不动,一直0%
可以先关闭脚本,然后自己去github下载这个iso文件
放到截图红框所在位置,再重新启动脚本即可。
下载 `boot2docker.iso` 的链接 [https://github.com/boot2docker/boot2docker/releases](https://github.com/boot2docker/boot2docker/releases)
<br>
![](/api/file/getImage?fileId=63326e27da7405001301481e)
<br><br>
直到看到这个界面说明安装完成了
![](/api/file/getImage?fileId=63326e82da7405001301481f)
此时 `cmd` `powershell` 等均已支持docker指令
![](/api/file/getImage?fileId=63326f4eda74050013014820)
<br><br>
最后做点简单配置
先打开 `Oracle VM VirtualBox` 停止正在运行的docker虚拟机
![](/api/file/getImage?fileId=63326fcbda7405001301483a)
<br>
右击default虚拟机进设置
开启VXT/AMDV选项
处理器数量拉到绿色部分满格
内存大小给到物理机的50% 我这里16G内存给了8G
![](/api/file/getImage?fileId=633271e2da7405001301483d)
<br>
在网络里点端口转发
可以看到他已经给了默认的ssh端口
可以用自己的shell软件去连接 IP和端口看截图,用户名密码默认是 `docker` `tcuser`
需要注意连之前必须先在 `VirtualBox` 中启动虚拟机才行,建议使用无界面启动
![](/api/file/getImage?fileId=633271e2da7405001301483c)
顺便可以把mysql和redis的端口映射提前设置好 需要重启虚拟机生效
![](/api/file/getImage?fileId=633272bfda74050013014849)
<br><br>
最后一步
如果嫌docker镜像下载速度慢可以用镜像源
需要用ssh连接到虚拟机内部linux系统
(ip 127.0.0.1 端口 50582 用户名 docker 密码 tcuser)
(如果你不方便用ssh连虚拟机,也有一个办法是在cmd输入命令`docker-machine ssh default` 据说也可以连接,我没试过太麻烦。。。我用finalshell习惯了)
然后输入指令
`sudo sed -i "s|EXTRA_ARGS='|EXTRA_ARGS='--registry-mirror=https://hub-mirror.c.163.com |g" /var/lib/boot2docker/profile`
重启虚拟机
然后用 `docker info` 查看是否已添加镜像
可以看到最后有这句话说明添加成功
```shell
Registry Mirrors:
https://hub-mirror.c.163.com/
```
<br><br>
## END
至此大功告成
顺便贴一下常用的mysql和redis镜像的命令
```shell
## 密码这里记得换成你自己的!!!
docker run -d -p 3306:3306\
-e "TZ=Asia/Shanghai"\
--restart=always\
--name mysql\
-e MYSQL_ROOT_PASSWORD='换成你自己的密码'\
-m 4000M\
--oom-kill-disable\
--memory-swap=-1\
mysql:8
docker run -d -p 6379:6379\
-e "TZ=Asia/Shanghai"\
--restart=always\
-m 1000M\
--oom-kill-disable\
--memory-swap=-1\
--name redis\
redis
```
<br><br>
补充:关于开机启动
首先到安装目录 `C:\Program Files\Docker Toolbox`
找到 `docker-start.cmd`
如果直接创建一个快捷方式,并粘贴到目录
`C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup`
可以实现开机启动docker
但是这个方法有个很傻的地方
开机会有个cmd黑色窗口,全程播报启动进程
大约持续20秒启动成功后,窗口才会消失
且中途不能关闭窗口,否则启动会意外中断
<br><br>
这里只能取巧的方法,用VBScript再来个脚本,让上一个脚本后台运行
所以需要先在 `C:\Program Files\Docker Toolbox` 目录下
新建一个文本文件,命名为 `docker-start.vbs`
核心内容是
```vbscript
createobject("wscript.shell").run "docker-start.cmd",0
```
<br>
如果电脑配置低开机慢的话,还可以再加一个延迟10秒启动在最前面
```vbscript
WScript.Sleep 10000
```
<br>
随后把这个 `docker-start.vbs` 创建一个快捷方式
快捷方式复制到启动目录即可
`C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup`
亲测不设置延迟启动,进入桌面5秒左右自动启动虚拟机,10秒左右可以正常使用docker容器