老司机实战Windows Server Docker:1 初体验之各种填坑

前言

Windows Server 2016正式版发布已经有近半年时间了,除了看到携程的同学分享了一些Windows Server Docker的实践经验,网上比较深入的资料,不管是中文或英文的,都还不太多。工作中对Windows Server 2016下的Docker,也评估了一段时间了,特此做一些分享,帮助大家填坑。本系列的讨论主要关注Windows Server 2016下的原生Docker容器,不涉及Hyper-V模式的容器。

准备

既然是Windows Server 2016下的Docker,首先我们要安装Windows Server 2016环境。条件允许的话,还是推荐使用物理机,因为实际使用中,直接在物理机操作,一方面响应更快,也能减少不必要的虚拟机软件本身的兼容性问题。如果,条件实在不允许,想要使用虚拟机的话,建议使用VMWARE系列。最新的VMWARE vSphere 6.5+, Fusion 8.5+和Workstation 12.5+下亲测都没问题,分配4G以上内存即可,整体系统响应还能接受。建议别在Hyper-V下安装,不然真会慢到怀疑人生的。

如果想使用Vagrant安装,可以使用jacqinthebox/windowsserver2016stefanscherer/windows_2016_docker这两个box。不过,vagrant box国内网络下载速度超慢,反而微软官网的下载速度还行,所以其实自己下载试用版的Windows Server 2016的ISO安装也花不了多少时间。

那么,假设你已经有了一个全新安装的Windows Server 2016带GUI的系统,并且已经安装了全部更新补丁,下面就正式开始我们的Windows Server Docker之旅。

安装Docker服务

安装docker服务一般都会参考微软官方的quickstart windows server文档,按照它的步骤安装行不行?行。但是,有一些细节,它分散到别的几个页面了,如果你没有都仔细读一下,并亲自体验一下相关功能的话,很可能会遇到一些坑。所以,建议按照下面的步骤:

  1. 安装OneGet的docker provider,问你Yes/No,自然选Y:

    Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
  2. 安装docker包,问你All/Yes/No,选A:

    Install-Package -Name docker -ProviderName DockerMsftProvider
  3. 重启机器
    安装完docker包后,如果你立刻尝试在命令行执行任何docker命令,比如:docker images,会报无法连接服务器错误,原因是,必须重启一下机器。
  4. 重启完机器回来,我们应该已经可以执行比如docker images这样的命令了,不过,有可能你打开一个cmd或者powershell窗口,执行docker images会收到下面的错误,不用慌,那是因为你没有以Adnimistrator模式打开cmd或powershell窗口:

    ...省略... //./pipe/docker_engine: Access is denied ...省略...
  5. 以administrator模式打开powershell窗口,执行docker images,是不是成功了?小兴奋 :)
  6. 下面你想试试pull一个image或者运行一个未曾下载过的image?如果在墙外,应该没问题。绝大多数情况下,在墙内的同学会遇到无法连接docker的服务器错误。什么?有人问什么是“墙”?那个——请自行google一下百度。言归正传,访问不了墙外的,我们就需要访问墙内的镜像,阿里云开发者平台DaoCloud都提供了免费的docker镜像服务,需要先免费注册一下。
  7. 假设你已经注册了阿里云开发账号或者daocloud账号,拿到比如阿里云的类似https://xxxxxxxx.mirror.aliyuncs.com的地址,我们需要将镜像地址配置到docker服务。请从文件浏览器中打开C:\ProgramData\docker\config目录。注意C:\ProgramData\是一个默认隐藏的目录,直接从C盘浏览是看不到,需要自己地址栏打一下。接下来,我们需要在config目录下新建一个名叫daemon.json的文本文件,包含下面的内容(别忘了将镜像地址替换成你自己的,不然后面报地址不能解析别怪我啊):

    {
    "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
    }
  8. 然后重启docker的windows服务,通过GUI重启,或者,在administrator模式的powershell窗口中执行都可以:

    Restart-Service docker -f
  9. 好了,现在我们可以试着pull或者运行一个docker image了,比如:

    docker run microsoft/dotnet-samples:dotnetapp-nanoserver
  10. 应该可以看到,image成功下载、运行,屏幕打印出下面这个小人:

如果没看到,一定不是我的错啦,肯定是你上面的步骤没看仔细,不如再重新看一遍! 8-)

第一篇就到这里,自己试试其他docker命令吧!

下一篇,2 docker化现有iis应用的正确姿势

posted @ 2017-03-19 11:27 Teddy's Knowledge Base Views(...) Comments(...) Edit 收藏