Docker秘籍 之 用PowerShell DSC配置Docker

本文介绍如何利用PowerShell Desired State Configuration (DSC)在Azure中配置Docker容器,包括安装Docker、下载镜像及运行容器等过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

译者:Stone Feng

译文链接:http://blog.youkuaiyun.com/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构建的云!


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

### 不使用 Docker 的替代方案 对于希望在 Windows RogFlow 环境下避免使用 Docker 来进行开发或部署的应用程序,存在多种可行的方法来实现这一目标。每种方法都有其特定的优势和适用场景。 #### 使用虚拟机 (VM) 通过创建一个专门用于应用程序运行的虚拟机环境,可以在隔离环境中模拟不同的操作系统配置。这有助于保持主机系统的稳定性并减少冲突的可能性。常见的工具包括 VirtualBox 和 VMware Workstation Player[^1]。 #### 利用本地安装的服务与依赖项管理器 如果项目所涉及的技术栈能够在 Windows 上原生支持,则可以直接在其上安装所需服务及其版本控制工具。例如,在.NET 开发中可以选择 Visual Studio 或者 .NET CLI 工具链来进行构建、测试以及发布流程;而对于 Java Web 应用来说,可以通过下载 JDK 并配合 Apache Tomcat 或 Jetty 等服务器软件完成部署工作[^2]。 #### 构建持续集成/持续交付(CI/CD)管道而不依赖容器化技术 为了简化多阶段流水线的设计,可以考虑采用 Jenkins、GitLab CI Runner 或 GitHub Actions 等平台提供的功能特性。这些解决方案允许定义复杂的任务序列,并且能够很好地与其他第三方插件和服务对接,从而满足不同类型的自动化需求[^3]。 #### 轻量级沙盒环境 某些情况下,可能只需要提供相对独立但又不必完全隔绝于宿主之外的小型执行空间给应用进程。此时可借助 PowerShell DSC(Domain Specific Configuration),Chocolatey Package Manager 或 Scoop Installer 创建定制化的脚本以快速搭建所需的临时性条件设置[^4]。 ```powershell # Example of using Chocolatey to install a package on Windows choco install -y git ``` #### 直接调用远程API接口或者云函数 当业务逻辑本身并不复杂时,也可以尝试将部分计算密集型操作迁移至云端处理。利用 RESTful API 或 Serverless Framework 提供的能力,可以让前端请求直接触发后台资源响应而无需额外维护中间层架构组件[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值