やりたいこと
WSUS(Windows Server Update Service)は長期間運用しているとDBやコンテンツファイルがすぐ肥大化するため、割りと頻繁(年1~2回くらい)に再構築をしている。
Windows Server 2016からDockerコンテナが使えるようになったため、WSUSをこのコンテナ上に構築することができれば、再構築も楽チンになるのではないかと思い、コンテナ作成の練習も兼ねてやってみることにした。
結論から言うとうまくいかず途中で断念してしまったのだが、再挑戦するときのためにも手順を書き留めておく。
コンテナ実行環境の準備
OSはWindows Server 2016 Datacenterの評価版を使う。
適当に転がっていたPCにインストールしてWindows Updateをかけておく。
OSがインストールできたら、MSのドキュメントに従ってDocker実行環境をセットアップする。
Powershellを管理者権限で起動し、コマンドを3つ実行するだけなので簡単だ。
Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider
Restart-Computer -Force
docker version
を実行してバージョンが表示されればOK
コンテナの作成
WSUSを構築するためのコンテナを用意する。
Windows Serverで使えるコンテナベースイメージは「Windows Server Core」ベースと「Nano Server」ベースの2種類がある。
詳細は省くが、WSUSの場合は内部でIISを使うため前者でないとダメだと思う。
Windows Server Coreのベースイメージをダウンロードする。
10GBくらいあるので時間がかかる。
docker pull microsoft/windowsservercore
ダウンロードが済んだらこのベースイメージからWSUSを構築するコンテナを立ち上げる。
docker run --name wsus_test -v D:\WSUS:C:\WSUS -it microsoft/windowsservercore powershell
実行するとコンテナが立ち上がり、コンテナ内のPowershellに入れる。
なお、ここでは-v D:\WSUS:C:\WSUS
を指定することでホストOSのD:\WSUS
フォルダをコンテナ内のC:\WSUS
にマッピングしている。こうすることでWSUSの配信ファイルをコンテナ内に直接保存せずに済むはずだ。
(D:\WSUS
フォルダは事前に作成しておくこと)
hostname
を実行するとホストOSとは異なるホスト名が表示され、コンテナ内に入っていることが確認できる。
コンソールの背景色がおかしくなるのはご愛嬌。
WSUSの役割インストール
いよいよコンテナにWSUSをインストールしていく。
手順はTechNetの記事を参考に。
記事内ではSQLサーバを使う方法も説明されているが、今回は内蔵のWindows Internal Database(WID)を使う方法でやる。
コンテナにWSUSの役割をインストール
Install-WindowsFeature -Name UpdateServices -IncludeManagementTools
Exit CodeがSuccessになっているので成功したようだ。
Restart NeededはNoとなっているのでこのまま先に進む。
WSUSは役割をインストールしただけでは動作せず、追加設定をしないといけない。以下のコマンドを実行する。
配信ファイルの保存先をC:\WSUS
にしたいので、CONTENT_DIR
引数を付けている。
cd 'C:\Program Files\Update Services\Tools\'
.\WsusUtil.exe postinstall CONTENT_DIR=C:\WSUS
と、ここでエラーが出てしまった。
Fatal Error: The Server service is not started.
サービスの起動に失敗したようだ。ログファイルを見てみる。
PS C:\> cat C:\Users\ContainerAdministrator\AppData\Local\Temp\tmpB6DC.tmp
2017-04-23 20:21:20 Postinstall started
2017-04-23 20:21:21 Detected role services: Api, WidDatabase, Services
2017-04-23 20:21:21 Start: LoadSettingsFromParameters
2017-04-23 20:21:21 Content local is: True
2017-04-23 20:21:21 Content directory is: C:\WSUS
2017-04-23 20:21:21 SQL instname is:
2017-04-23 20:21:21 End: LoadSettingsFromParameters
2017-04-23 20:21:21 Start: Run
2017-04-23 20:21:21 Fetching WsusAdministratorsSid from registry store
2017-04-23 20:21:21 Value is (null)
2017-04-23 20:21:21 Configuring content directory...
2017-04-23 20:21:21 Configuring groups...
2017-04-23 20:21:21 Starting group configuration for WSUS Administrators...
2017-04-23 20:21:21 Group does not already exist in the registry
2017-04-23 20:21:21 System.Runtime.InteropServices.COMException (0x80070842): The Server service is not started.
at System.DirectoryServices.DirectoryEntry.RefreshCache()
at System.DirectoryServices.AccountManagement.PrincipalContext.DoMachineInit()
at System.DirectoryServices.AccountManagement.PrincipalContext.Initialize()
at System.DirectoryServices.AccountManagement.PrincipalContext.ContextForType(Type t)
at System.DirectoryServices.AccountManagement.Principal.set_Name(String value)
at Microsoft.UpdateServices.Administration.ConfigureGroups.FetchOrCreateGroup(PrincipalContext context, String name,
String description)
at Microsoft.UpdateServices.Administration.ConfigureGroups.SetupGroup(PrincipalContext context, String groupName, Str
ing description, String registryValue)
at Microsoft.UpdateServices.Administration.ConfigureGroups.Run(Action`1 logWriter)
at Microsoft.UpdateServices.Administration.PostInstall.Run()
at Microsoft.UpdateServices.Administration.PostInstall.Execute(String[] arguments)
System.DirectoryServices.DirectoryEntry.RefreshCache()
で例外が発生しているようだが、
エラーコードでググってみても解決方法がよくわからない。
比較のため(コンテナではない)通常のWindows Server Core 2016にも全く同じ手順でインストールしてみたが、そちらはうまくいったため、コンテナ環境に何か問題があることは間違いなさそうだが・・・
Windowsコンテナでは実行ユーザがuser manager\containeradministrator
となっており、通常のAdministratorではないようだ。
ここで権限周りの問題が発生しているのだろうか?
通常のAdministratorで実行する方法がないかいろいろと試したがうまくいかず、
今回はここで諦めてしまった。
感想
Windows Server 2016がリリースされて半年ほど経つが、Windowsコンテナに関してはまだまだ情報が少ない印象だ。
特に導入部を越えて、実際にコンテナをどう利活用していくかという部分ではまだまだ試行錯誤が必要だろう。
今回試したWSUSに限らず、ITインフラオペレーションの分野でコンテナ技術をどのように取り入れていくことができるのか、継続的にウォッチしていきたい。