InfoQ 极客传媒 15 周年庆征文|【Docker 最佳实践】Windows 上安装 Docker 及常见问题解决
一、环境准备:
window 7
支持“ Hardware Virtualization Technology”,并且,“virtualization ”可用
Docker Toolbox
(官网地址:https://www.docker.com/products/docker-desktop
阿里云镜像: http://mirrors.aliyun.com/docker-toolbox/windows/docker-toolbox/)【下载最新版本】
Win10 的安装:
这里没有针对 win10 的安装介绍,但是对于 win10 的小伙伴,提下该注意的地方:
1.Docker for Windows 是一个 Docker Community Edition(CE)应用程序。Docker for Windows 安装包包含了在 Windows 系统上运行 Docker 所需的一切。如果你不想装虚拟机,想直接在你的 Windows 操作系统中安装与学习使用 docker,那么你首先得查看你的系统是否满足 Docker for Windows 的安装与使用要求。
2.Docker for Windows 的当前版本运行在 64 位 Windows 10 Pro,专业版、企业版和教育版(1607 年纪念更新,版本 14393 或更高版本)上。Ps:家庭版是不行的,如果你是家庭版,那么一是升级到专业版,破解专业版推荐个地址:
http://blog.csdn.net/SONGCHUNHONG/article/details/78006389 ,
二是安装 Docker Toolbox
自行网上百度http://blog.csdn.net/tina_ttl/article/details/51372604
如果你满足 Docker for Windows 的环境条件了,那么首先检查电脑的虚拟化开启了没有:进入任务管理器(ctrl+alt+delete),点击性能->cpu ,查看虚拟化是否已启用,如果虚拟化是已禁用,那么你需要重启电脑进入 bios 开启虚拟化(我们的发的笔记本 cpu 都是支持虚拟化的,重启时进入 bios 按 esc -> 再按 f12 -> 去开启虚拟化)
3.开启虚拟化重启后,进入任务管理器看虚拟化是否已启用
4. 然后再是进入电脑的控制面板->程序->启用或关闭 Windows 功能->把 Hyper-v 勾上,启用后电脑会重启,后面就可以下载并安装 Docker for Windows 了。
下载安装
1.进入网址https://docs.docker.com/docker-for-windows/install/#download-docker-for-windows 下载并安装。我安装的是稳定版。安装过程没什么要注意的。
2.启动以后会出现在桌面的右下角区域,鼠标放上去以后显示 Docker is running 表示启动成功,第一次安装启用好像是会弹出个 Docker Cloud 登录界面,去注册然后登录,使用和 git 有点类似,可以 pull 图像等等
以上是 win10 的安装教程,其实都差不多,只是有些地方有点小区别(其实完全可以忽略)
二、安装
环境和安装包下载完成之后,接下来就是执行安装
具体安装步骤如下:
即安装 Docker Toolbox,同时还附加安装
Docker Client for Windows
Docker Toolbox management tool and ISO
Oracle VM VirtualBox
Git MSYS-git UNIX tools
不用担心,下载的 Docker Toolbox 已经完全包含了这几个软件,直接安装就可以了
1.双击安装文件
2.一路 next 即可,接受所有默认安装(当然你还可以指定你的安装路径)
图示如下:
选择好之后接着就是安装命令
注意:在安装过程中,会出现几个其他的安装过程,如 Ocracle Corporation 等系列软件,全部选择安装即可,下面是几个小例子:
另外,如果你安装了 360,它可能会阻止程序的安装,应该注意允许程序安装
3.最后安装完成
4. 整个安装过程非常简单,安装完成后,可以在桌面得到如下的三个图标:
本来是小鲸鱼图标
,被我指定使用 git 打开时候就变成了这样
三、开始使用
1.点击 Docker Quickstart Terminal 图标,从而打开一个 Docker Toolbox terminal
2.- 打开 terminal 后,terminal 会自动进行一些设置,需要点时间,全部完成后,会出现如下的结果
3.在 $后输入各种 docker 命令就可以使用 docker 了
注:不需要像 ubuntu 中那样使用 sudo!
例如:
(1)查看 docker 的版本信息
(2)登陆 docker Hub 的账号
然后,输入用户名和密码,例如
在使用 docker 时,是否登陆没有特别大的影响,只不过登陆了,就可以向 docker hub 上 push 自己的镜像
4.安装远程连接工具连接 docker
按照上面方法打开 Docker Toolbox terminal 后,发现在该终端中,无法进行复制、粘贴等操作,使用起来非常不方便,所以,这里参考 zistxym 的博文,安装远程连接工具 SecureCRT
下载 SecureCRT
【http://www.xdowns.com/soft/softdown.asp?softid=23625】
地址:绿盟 SecureCRT 绿色版免安装
运行 SecureCRT
连接 docker
注:默认的用户名和密码是:docker/tcuser
使用 SecureCRT 即与使用 Docker Quickstart Terminal 的作用相同
再使用 SecureCRT 连接 docker 时,必须要先启动 Docker Quickstart Terminal
关于 SecureCRT 的几点设置
(1)使用中发现,secureCRT 的鼠标右键功能默认是粘贴的功能,用起来和 windows 系统的风格不一致,如果要改为右键为弹出文本操作菜单功能,方便对选择的内容做拷贝编辑操作,可以在 options 菜单—-》global options——》terminal——-》mouse 功能块处将 paste on 处改为:right button
此时,再鼠标右键时,弹出了文本操作功能的菜单,如下:
(2)更改 secureCRT 的字体和背景
仅是更改当前 section 的字体
四、安装中遇到的问题
全部安装完成后,打开 Docker Quickstart Terminal,可能会出现如下错误:
这是因为电脑没有开启支持 VT-X/AMD-v 功能,即没有开启虚拟化技术,需要重启电脑,去 BIOS 里开启该功能
在利用 image 生成镜像时,发生了如下错误
以为是因为 docekr service 和 client 的版本不同,各种查询折腾,也没有成功,最后发现,居然是命令中-v 和路径之间少了空格!都怪自己没有仔细查看错误提醒
五、Docker 的更新
如果本机安装的 docker 过期了,也就是有新版本的 docker 发布时,应该对本机的 docker 进行更新,否则很可能会影响它的继续使用,那么,对本机的 docker 进行更新可以安装下述方式:
(1)打开 Docker Quickstart Terminal 终端
(2)输入命令:docker-machine upgrade default
会开始自动更新本机的 docker,如下图所示
(3)查看 docker 版本
docker version
六、Docker 中的 jupyter
我使用的 image 中带有 jupyter,但发现按照 ubuntu 下的使用方法,即进入容器后,打开http://0.0.0.0:8888/无法打开 Jupyter,经过一番查询才终于找到正解,原来 jupyter 的 image 中就有明确说明,但没有想到去那里查询!
具体方法:
(1)打开 boot2docker,输入 docker-machine ip,会返回一个 IP 地址,例如
(2)在浏览器中打开http://192.168.99.104:8888,即可打开 jupyter
而不是与 ubuntu 中一样的 http://localhost:8888 (http://0.0.0.0:8888/)
8.windows 下使用 docker 的常用命令
详细内容与 ubuntu 下的使用方法类似,见 Docker 学习系列(三):Ubuntu 下使用 Docker 的基本指令记录及一些注意事项,但为了查阅方便,这里再单独列举
查看本机 images
查看本机运行的 container
从 dockerhub 上 pull 镜像
docker pull 镜像名称
利用 image 运行 container:
(4)这里的本机文件夹为 c 盘,那么,能否为 d 盘呢?
测试:
发现并不可行!这是因为目前,windows 下只支持 c 盘下的文件夹映射
遇到的其他一些问题的和解决方法:
1.镜像过时或者无法启动
第一次运行 Docker Quickstart Terminal 时会进行 Docker 环境的初始化,会在 VirtualBox 中自动创建名字为【default】的 linux 虚拟机,再此过程中会用到 boot2docker.iso 镜像文件。默认情况下,启动程序会从 GitHub 上下载此文件的最新版,但由于文件相对较大且速度不给力,多数情况下会下载失败,造成 Docker 环境无法启动,如下图:
解决方法:
其实 DockerToolbox 安装文件自带了 boot2docker.iso 镜像文件,位于安装目录下(如 C:\Program Files\Docker Toolbox) ,将此文件拷至 C:\Users\Administrator\.docker\machine\cache 目录下,然后在网络断开的情况下重新启动,便可初始化成功。如下图:
其中 【192.168.99.100】是 VirtualBox 中名字为【default】虚拟机的 ip 地址。
2. 启动 docker toolbox 的时候,会出现找不到而去下载 boot2docker.iso 的情况
其实没有必要重新下载,在你安装 docker toolbox 的目录有这个文件,拷贝到它查找的目录即可
比如:一般默认读取 administrator 下的.docker 文件夹里面的镜像【路径】:C:\Users\Administrator\.docker\machine\machines\default(拷贝到这个目录下即可)
3. 直接使用 docker run 运行 ubuntu 的镜像时会出现 the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty' 的错误
前面加上 winpty 即可,即 winpty docker run ---
4. 如果像在 linux 中直接使用 docker run -it ubuntu /bin/bash 去启动一个容器时,会出现一些非常奇葩的错误,我的错误是 docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"D:/install/Git/usr/bin/bash\": stat D:/install/Git/usr/bin/bash: no such file or directory". 我现在还不知道是什么原因,但是当我使用 docker run -it ubuntu bash 去启动容器时,就可以正常启动,不会出现这些错误
5. 在使用 Docker 的时候遇到删不掉 image 的情况,如下:
解决方法:
先查询记录 docker ps -a
把该镜像的记录全部删除掉,如果删除所有镜像的记录,可以使用:docker ps -a|awk '{print $1}'|xargs docker rm
docker rmi 5e4f2da203e2 就可以了
6.Docker 虚拟机文件地址修改
默认情况下,docker-machine 创建的虚拟机文件,是保存在 C 盘的 C:\Users\用户名\.docker\machine\machines\default 目录下的,如果下载和使用的镜像过多,那么必然导致该文件夹膨胀过大,如果 C 盘比较吃紧,那么我们就得考虑把该虚拟机移到另一个盘上。具体操作如下:
1.使用 docker-machine stop default 停掉 Docker 的虚拟机。
2.打开 VirtualBox,选择“管理”菜单下的“虚拟介质管理”,我们可以看到 Docker 虚拟机用的虚拟硬盘的文件 disk。
3.选中“disk”,然后点击菜单中的“复制”命令,根据向导,把当前的 disk 复制到另一个盘上面去。
4.回到 VirtualBox 主界面,右键“default”这个虚拟机,选择“设置”命令,在弹出的窗口中选择“存储”选项。
5.把 disk 从“控制器 SATA”中删除,然后重新添加我们刚才复制到另外一个磁盘上的那个文件。
这是我设置好后的界面,可以看到我在步骤 3 复制的时候,复制到 E:\VirtualBox\default\dockerdisk.vdi 文件去了。
【注意,Docker 容器是在 VirtualBox 的虚拟机里面,不是在 Windows 里面,所以不能用 127.0.0.1 访问】
7.default 虚拟机的默认用户名和密码
8.更改镜像仓库地址
docker 默认的镜像仓库地址是https://hub.docker.com/,但国内的下载速度太过缓慢,最好使用国内镜像,比如阿里云。
首先需要注册阿里云账号,然后在https://cr.console.aliyun.com/页面的左侧可以看到【镜像加速器】选项
在 powershell 或 cmd 中通过 【docker-machine ssh default】命令登录虚拟机(或使用设置好的 XShell 连接),执行如下命令:
然后重启 default
小试牛刀:
外部访问容器
版权声明: 本文为 InfoQ 作者【迷彩】的原创文章。
原文链接:【http://xie.infoq.cn/article/d58b51d4d2f7d4a76e53a73e8】。文章转载请联系作者。
评论 (3 条评论)