Docker秘籍 之 用PowerShell DSC配置Docker

2 篇文章 0 订阅
2 篇文章 0 订阅

作者:Michael Greene 17 Jul 2014 6:00 AM

译者:Stone Feng

译文链接:http://blog.csdn.net/stonefeng/article/details/38356259

原文链接:http://blogs.technet.com/b/privatecloud/archive/2014/07/17/configuring-docker-on-azure-with-powershell-dsc.aspx

译文在Docker中文社区的链接:https://www.dockboard.org/configuring-docker-on-azure-with-powershell-dsc-aspx/

转载必须在正文中标注并保留原文链接、译文链接作者、译者信息、以及本条要求

  这篇博文的作者Andrew Weiss是一位才华横溢的顾问,来自微软咨询服务部门。Andrew曾一直致力于用PowerShell DSC来提供管理Docker容器能力。感谢AndrewBuilding Clouds分享他的文章!

Windows PowerShell Desired State Configuration for Linux (https://github.com/MSFTOSSMgmt/WPSDSCLinux)首个预览构建的发布,带来了丰富的、跨平台的配置管理可能性。

  本文提供了将PowerShell DSC和轻量、基于容器的平台Docker整合的、在微软云里创建可重用的dev/test环境的指南。更具体地说,你将使用PlatypusTS Docker化一个样板web应用,这里PlatypusTS是一个在TypeScript上构建的web和移动框架。

用代码管理构架(原文为"Infrastructure-as-Code"——译者注)

  在云里构建应用时,重要的是为开发者和系统管理员均提供一组常见的工具和框架。DevOps介绍了叫做“infrastructure-as-code”(用代码管理构架——译者注)的概念,IT专业人员可以与开发者们使用同样的技术和语言管理底层构架。

什么是Docker

  Docker 是一个构建在LXC之上的开源平台,是Linux容器,可以用来开发和部署应用。使用镜像(Image下同——译者注)和容器,开发者和IT专业人员可以容易地在内部和云端部署标准化的开发环境。Docker与传统的虚拟机的区别是:Docker容器不依赖于肿胀的虚拟操作系统,可以显著地减少碳足迹

  如果你想了解更多内容,Docker团队提供了很棒的交互式演练:http://www.docker.com/tryit/.

DSC for Linux入门

  在Linux主机上安装和配置DSC的指南可以在由Kristopher Bash较早发布的文章里找到,正值五月份PowerShell DSC for Linux披露和发布的时候。

  使用该文章中步进式的指导,确保你的Linux主机是为DSC配制好的,然后再跟随本文的其余指导部分。我将使用一个部署在微软云上的Ubuntu 14.04 LTS虚拟机来完成演练。

前提条件

  • 通过SSH and TCP ports 80, 5985, and 5986Linux主机连接
  • 运行PowerShell v4.0 或更高版本的Windows主机
  • Git (http://git-scm.com/)
  • SSH客户端 (PuTTy)

配置管理工作站

  一开始使用Windows PowerShell控制台,我会进入我的工作站上一个合适的目录并拷贝我需要的Docker DSC配置文件。执行下面的代码来创建一个叫做DockerClientDSC 的、带有我的配置源码的文件夹

git clone https://github.com/anweiss/DockerClientDSC

  在DockerClientDSC文件夹里有个脚本DockerClient.ps1,脚本里包含了一个叫做DockerClientDSC配置。我将用它来确保我云端的目标虚拟机是按照Docker主机配置并且包含了我将使用dev/testDocker镜像。在继续之前,我还将DockerClientDSC文件夹设置为我的工作目录。

DSC安装Docker

  使用DockerClient之前,我会创建一个变量来存储Linux虚拟机的主机名:

$hostname = "platypus-dev01.contoso.com"

 

  然后我将配置装入当前会话:

. .\DockerClient.ps1

 

  我现在可以带主机名参数执行DockerClient配置,创建一个新的DockerClient子目录,里面包含了与目标节点对应的 .mof文件

DockerClient -Hostname $hostname

 

  为了使产生的配置生效,我需要取得目标主机的凭据(注意在写这篇文章的时候,DSC for Linux仅支持通过“root”用户连接):

$cred = Get-Credential -UserName "root"

 

  还要配置一组选项,我才能成功建立一个连到目标的远程PowerShell会话

$options = New-CimSession -UseSsl -SkipCACheck -SkipCNCheck -SkipRevocationCheck

 

  我可以使用这些选项来初始化一个到Linux虚拟机的CIM会话:

$session = New-CimSession -Credential $cred -ComputerName $hostname -Port 5986 -Authentication basic -SessionOption $options -OperationTimeoutSec 600

 

  最后,应用我的配置

Start-DscConfiguration -CimSession $session -Path .\DockerClient -Verbose -Wait -Force

 

  在命令正常结束之后,我在Linux虚拟机上安装并配置好了Docker。现在让我们用DockerClient配置脚本来下载一些Docker镜像。

DSC下载Docker镜像

  我们接下来更新配置来使Docker主机包含一对Docker镜像。我们将下载MongoDB镜像和伴随它的、包含一个预先打包的、基于PlatypusTS框架的样板web应用。可以通过下面所示的镜像参数做到:

DockerClient -Hostname $hostname -Image @("mongo:latest", "anweiss/docker-platynem:latest")

 

  建立CIM会话建立之后,我们可以简单地重新运行Start-DscConfiguration命令代码:

Start-DscConfiguration -CimSession $session -Path .\DockerClient -Verbose -Wait -Force

 

  现在我在主机上下载并安装好了MongoDB镜像。

DSC运行链接容器

  我们还可以用DockerClient DSC配置创建新的带有一个MongoDB实例和样板web应用的链接容器。既然我们的web应用依赖于一个MongoDB实例,我就先创建一个MongoDB容器。我将建一个散列表来存储容器使用的参数。

$dbContainer = @{Name="db"; Image="mongo:latest"}

 

  然后我将用这个散列表来创建一个新配置。

DockerClient -Hostname $hostname -Container $dbContainer

 

  向我们此前做的那样,重新运行Start-DscConfiguration命令代码:

Start-DscConfiguration -CimSession $session -Path .\DockerClient -Verbose -Wait -Force

 

  太棒了!现在我们应该有了一个运行中容器里的MongoDB实例。我们用PuTTy SSH进入虚拟机并取得容器的IP地址。我们在SSH会话里执行下面的Docker命令:

sudo docker inspect --format="{{ .NetworkSettings.IPAddress }}" db 

 

  我将拷贝显示出的IP地址(你的可能会有所不同)。

  现在回到PowerShell控制台,我们将创建一个变量来存放MongoDB容器的IP地址,并且放在web容器的环境变量里。我们还将建另一个散列表来存放web容器的设置。

$mongoIP = "172.17.0.28"

$envVars = @("MONGOHQ_URL=mongodb://$mongoIP/platynem-dev","PORT=80")

 

$webContainer = @{Name="web";Image="anweiss/docker-platynem:latest";Port="80:80";Env=$envVars;Link="db"}

 

  再一次,我们用这个散列表创建一个新的配置。

DockerClient -Hostname $hostname -Container $webContainer

 

  让我们应用这个配置

Start-DscConfiguration -CimSession $session -Path .\DockerClient -Verbose -Wait -Force

 

  我们的web应用现在应该正运行在80端口。当我启动浏览器,并访问虚拟机的URL,应该能看到样板web应用在web容器中运行,并链接到正运行MongoDB的容器——一切都是用PowerShell DSC配置的。

注意:同样的技术可以很好地应用在开发环境的Docker容器上,不需要修改任何步骤。

  非常感谢Andrew这么棒的文章。感谢Stay tuned构建的云!


  喜欢此文?不喜欢此文?敬请留言,欢迎转发,多多交流。——译者

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值