PowerShell DSC で使う

Windows PowerShell DSC (Desired State Configuration) は設定管理ツールです。これは Windows PowerShell の機能を拡張します。DSC は宣言型の構文を使いターゲットがどのような状態になるかを設定します。PowerShell DSC に関する詳しい情報は、 Microsoft 社のサイト をご覧ください。

動作条件

このガイドの利用にあたっては、Windows ホストが PowerShell v4.0 以上の必要があります。

DSC 設定に含まれるスクリプトは、公式では Ubuntu ターゲットのみサポートされています。 Ubuntu ターゲットは OMI サーバと PowerShell DSC for Linux providers のインストールが必要です。詳しい情報は https://github.com/MSFTOSSMgmt/WPSDSCLinux をご覧ください。ソース・レポジトリの一覧に、PowerShell DSC for Linux のインストール方法や、初期化スクリプトに関するより詳しい情報があります。

インストール

DSC 設定例のソースは次のレポジトリ https://github.com/anweiss/DockerClientDSC で利用可能です。クローンも可能です。

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

使い方

DSC 設定はシェルスクリプトのセットを使い、どこに Docker の構成物を置くかや、ターゲット・ノードの設定を行います。ソース・レポジトリはスクリプト( RunDockerClientConfig.ps1 があり)、CIM セッションに必要な接続と、 Set-DscConfiguration cmdlet の実行に使います。

より詳細な情報は次の URL をご覧ください。https://github.com/anweiss/DockerClientDSC

Docker インストール

apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys\
36A1D7869245C8950F966E92D8576A8BA88D21E9
sh -c "echo deb https://apt.dockerproject.org/repo ubuntu-trusty main\
> /etc/apt/sources.list.d/docker.list"
apt-get update
apt-get install docker-engine

現在の作業ディレクトリが DockerClientDSC ソースに設定されていることを確認し、Docker クライアント設定を現在の PowerShell セッションに反映します。

. .\DockerClient.ps1

ターゲット・ノード用の DSC 設定に必要な .mof ファイルを生成します。

DockerClient -Hostname "myhost"

サンプルの DSC 設定データ・ファイルは、 Hostname パラメータの情報を元に連結されます。

DockerClient -ConfigurationData .\DockerConfigData.psd1

ターゲット・ノードでアプリケーション設定プロセスを開始します。

.\RunDockerClientConfig.ps1 -Hostname "myhost"

RunDockerClientConfig.ps1 スクリプトは DSC 設定データファイルもパースして、次のように複数のノードに対して設定を反映します。

.\RunDockerClientConfig.ps1 -ConfigurationData .\DockerConfigData.psd1

イメージ

次のようにイメージ設定を行います: docker pull [image] あるいは docker rmi -f [IMAGE] です。

先ほどのステップで定義したファイルを使い、 DockerClientImage パラメータで設定を追加します。

DockerClient -Hostname "myhost" -Image "node"
.\RunDockerClientConfig.ps1 -Hostname "myhost"

ホストに対して複数のイメージを取得する設定も可能です。

DockerClient -Hostname "myhost" -Image "node","mongo"
.\RunDockerClientConfig.ps1 -Hostname "myhost"

イメージを削除するには、次のようにハッシュ・テーブルを使います。

DockerClient -Hostname "myhost" -Image @{Name="node"; Remove=$true}
.\RunDockerClientConfig.ps1 -Hostname $hostname

コンテナ

コンテナの設定は次のように行います。

docker run -d --name="[containername]" -p '[port]' -e '[env]' --link '[link]'\
'[image]' '[command]'

あるいは

docker rm -f [containername]

コンテナを作成・削除するには、1つまたは複数のバッシュ・テーブルを Container に使います。ハッシュ・テーブルは次のプロパティのパラメータを私ミズ合う。

  • Name(必須)
  • Image(Remove プロパティが $true の以外は必要)
  • Port
  • Env
  • Link
  • Command
  • Remove

例えば、ハッシュテーブルの設定でコンテナを作成するには、次のようにします。

$webContainer = @{Name="web"; Image="anweiss/docker-platynem"; Port="80:80"}

それから、先補との定義と同じ手順で DockerClient-Image-Container パラメータを使います。

DockerClient -Hostname "myhost" -Image node -Container $webContainer
.\RunDockerClientConfig.ps1 -Hostname "myhost"

既存のコンテナは次のように削除できます。

$containerToRemove = @{Name="web"; Remove=$true}
DockerClient -Hostname "myhost" -Container $containerToRemove
.\RunDockerClientConfig.ps1 -Hostname "myhost"

このハッシュテーブルは全てのパラメータを使い、コンテナを作成しています。

$containerProps = @{Name="web"; Image="node:latest"; Port="80:80"; `
Env="PORT=80"; Link="db:db"; Command="grunt"}