Win10家庭版安装Docker

作为一名所谓的"技术狂热者",直到此刻才开始认真审视Docker,实在是有些自抽耳光。

1. 前言

过去的两年间断断续续接触了一些Docker,但一直都处于偶尔用一下的程度,总是因为因为或这样或那样的愿意没有进行系统的研究,这次就让本文作为开篇吧,希望以此为契机将DevOps正式推动下去。

2. 安装

关于安装部分,特别感谢一下底部参考链接中的 Windows10家庭版安装docker攻略 ,其叙述的已经足够详细了。本文虽然名为安装,其实更偏向于让安装起来的Docker正常运行,因此本小节不会对安装细节进行过多的着墨,这里只给出相对于参考链接,有以下几点需要注意:

  1. 针对boot2docker.iso文件,参考链接中的作者是建议进行本地文件拷贝覆盖。但根据笔者的经验,拷贝覆盖似乎没啥用,你启动的时候它还是会下载,因此笔者个人建议读者可以挑个比较特殊的时间(例如吃午饭前),让它慢慢下载吧。
  2. 其它部分就放在专门的“问题"小节了。

3. 问题

本文出现的最大意义就是解决在安装过程中可能出现的问题,提供一站式解决方案。

3.1 "open //./pipe/docker_engine: The system cannot find the file specified. "

关于这一部分,笔者分别参考了多篇文章,其中需要着重提及的是 GitHub - ISSUE ,其基本就是此类问题的集中讨论地。

避过笔者是按照以上链接中的方法均失败了,最终还是参考了Docker Machine on Windows - How To Setup You Hosts 中的方法,采取重建名为default的docker-machine 来让 docker version 正常显示。

# 删除 default
docker-machine rm default
# 重建, 如果重建的过程不再出问题,那 docker version将正常展示
docker-machine create --driver virtualbox default
3.2 镜像加速

不得不说,相较于Linux下的配置,Windows下的配置格外闹心,倒不是难以配置,而是能够找到的资料彼此冲突。最终笔者使用如下方式配置成功:

# 1. 启动 Docker Quickstart Terminal 并登录 默认的docker-machine VM bash
docker-machine ssh

# 2. 修改配置文件
sudo vi /var/lib/boot2docker/profile
# 配置文件格式如下
EXTRA_ARGS='
--label provider=virtualbox
# 不要怀疑,以下格式就是这样的, 不要被上面这个 --lable provider=xxx迷惑了; 最开端也是两个 - ,而不是网上文章里的 - 。
--registry-mirror https://mirror.ccs.tencentyun.com
--registry-mirror http://172.16.3.3:8093
# 配置这个可以解决maven插件 dockerfile-maven-plugin 推送镜像时候登录失败的问题, 可以不带端口, 只需要IP即可。
--insecure-registry 81.68.158.xx
--insecure-registry 172.16.3.3:8093
--insecure-registry 172.16.3.3:8094
'
CACERT=/var/lib/boot2docker/ca.pem
DOCKER_HOST='-H tcp://0.0.0.0:2376'
DOCKER_STORAGE=aufs
DOCKER_TLS=auto
SERVERKEY=/var/lib/boot2docker/server-key.pem
SERVERCERT=/var/lib/boot2docker/server.pem

export "NO_PROXY=xxxx"

# 3. 退出docker VM bash 并重启之
exit
docker-machine restart

# 4. 验证
docker info
#	在输出的信息中查看是否有形如:
#       Insecure Registries:
# 			81.xx.xxx.66
# 			127.0.0.0/8
#		Registry Mirrors:
# 			https://mirror.ccs.tencentyun.com/

# 5. 补充
以上这些步骤,可以通过 docker-machine create --engine-registry-mirror=https://mirror.ccs.tencentyun.com/ -d virtualbox default 在创建docker-machine时完成。

参考链接:

  1. Windows上Docker Toolbox修改镜像源 其中还涉及到对于"默认镜像源"的设置。
  2. Docker在Windows下配置国内仓库 - 腾讯云
3.3 无法访问启动的容器

经过前面一番折磨后,我们终于能够从国内镜像站里拉取到相应的镜像并成功启动,但很快发现使用预想的地址无法访问相应的应用,例如使用 localhost 无法访问到nginx等。

这是因为 在使用docker-toolbox安装的docker其实依然是运行在Linux上的。我们在Windows中运行docker,实际上还是在Windows下先安装了一个Linux环境,然后在这个系统中运行的docker。也就是说,服务中使用的localhost指的是这个Linux环境的地址,而不是我们的宿主环境Windows10。

理解了上述原理,解下来就简单了:

  1. 在Docker Quickstart Terminal中使用docker-machine ip default获取到Linux虚拟机的IP,一般都会是192.168.99.100。
  2. 在宿主机(也就是我们的Windows10)中使用浏览器或相应的客户端进行访问即可。
3.4 修改默认docker machine的存储位置

对于Docker Toolbox的安装,我们一般都是一路"下一步"地无脑安装,于是不出意外地Docker Toolbox将被安装在系统盘下,进而导致后期自制或者拉取的镜像也将被存放在系统盘下,这无疑会造成系统盘的急剧膨胀。因此我们很有必要在安装Docker Toolbox之初进行专门的设置。

  1. 在Windows的系统环境添加 MACHINE_STORAGE_PATH ,指向虚拟机的位置(例如:D:\VM\machines)。
  2. 删除default docker虚拟机。启动"Docker Quickstart Terminal",执行docker-machine rm default
  3. 重建default docker虚拟机。在"Docker Quickstart Terminal"中执行docker-machine create --driver=virtualbox default
  4. 测试重建的default虚拟机。在"Docker Quickstart Terminal"中执行docker version
    a. 如果出现类似"open //./pipe/docker_engine: The system cannot find the file specified. In the default daemon configuration on Windows, …"的错误提示信息,则再次运行docker-machine env default,复制其提供的命令eval $("D:\apps\Docker Toolbox\docker-machine.exe" env default)进行执行。
    b. 再次运行docker run hello-world测试。
3.5 重启电脑或者重启虚拟机,镜像源地址等配置被复位

打开 docker的安装目录下的start.sh,注释掉如图所示的这一行(大约是76行):
start.sh
然后重启电脑验证下。

3.6 Docker ToolBox被外网访问

这个问题的解决方案已经不是Docker层面的问题了,我们需要的是修改Docker ToolBox包含的VirtualBox组件中的配置。

  1. 打开"Oracle VM VirtualBox",选择相应的虚拟机进行网络配置。
    VirtualBox - 网络配置
  2. 添加相应的端口映射。
    端口映射
    参考链接:
  3. docker toolbox无法被外网访问解决方法【基于bridge桥接模式必须实现端口转发】
3.6 启动报错 “listen tcp4 127.0.0.1:50090: bind: An attempt was made to access a socket in a way forbidden by its access permissions.”
# 错误形如:
Starting "default"...
(default) Check network to re-create if needed...
(default) Windows might ask for the permission to configure a dhcp server. Sometimes, such confirmation window is minimized in the taskbar.
listen tcp4 127.0.0.1:50090: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
Looks like something went wrong in step ´Checking status on default´... Press any key to continue...

以上错误产生的原因是我们耳熟能详的端口冲突。解决方案是修改{MACHINE_STORAGE_PATH}\machines\default\config.json 中的 Driver.SSHPort 的值,然后重启即可。

3.7 几个关键路径
  1. C:\Users${username}\.docker\machine\machines
    其中按照子目录形式存放着用户创建的各个docker-machine,和Oracle VM VirtualBox中创建的虚拟机一一对应。

4. Links

  1. Windows10家庭版安装docker攻略
  2. 另外一个安装教程
  3. 安装过程中的各种问题解决方案
  4. GitHub - ISSUE - open //./pipe/docker_engine: The system cannot find the file specified.
  5. Docker Machine on Windows - How To Setup You Hosts
  6. 修改docker quick start terminal 脚本,设置镜像源
  7. Windows10下无法对docker容器进行端口访问
  8. Docker Toolbox替换默认docker machine的存储位置
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值