Windows Serverコンテナの作成

Windows Serverのコンテナ作成についてdocker hub調べてみるとMicrosoftからも公式イメージが公開されていますがホストがWindowsでないと使えないようです。Macbookでも使えるイメージとして見つけたdocurr/windowsでコンテナを作成します。

注)以下の手順を行うと英語版Windows Serverがインストールされます。

今回はWindows Server 2022をdocurr/windowsを使用してWindows Serverを作成するようにDockerfileを作成します。

【docker-compose.yml】
services:
  web:
    container_name: delivery_web
    build:
      context: .containers/web
      dockerfile: Dockerfile
    devices:
      - /dev/kvm
    cap_add:
      - NET_ADMIN
    ports:
      - 8006:8006
      - 3389:3389/tcp
      - 3389:3389/udp
    environment:
      VERSION: "2022"
    stop_grace_period: 2m
    restart: on-failure

【Dockerfile】
FROM dockurr/windows

できたらコンテナをビルドして起動します。

$ docker-compose -f docker-compose.yml build
$ docker-compose -f docker-compose.yml up -d

ビルドで問題は発生しませんが、コンテナを起動するとエラーになります。

Error response from daemon: error gathering device information while adding custom device "/dev/kvm": no such file or directory

「/dev/kvm」がないということですが「Kernel-based Virtual Machine (KVM) は、物理 Linux マシンにインストールして仮想マシンを作成できるソフトウェア機能」というLinux特有の機能らしくKVMを使用しないようにenvironmentに設定を追加してdevicesの設定を削除します。

environment:
  KVM: "N" 

コンテナをビルド&起動します。

$ docker-compose -f docker-compose.yml up -d
[+] Running 2/2
 ✔ Network winsvr2022ora19_default  Created                0.0s
 ✔ Container delivery_web           Started                0.0s

今度はコンテナが起動できたので、ブラウザで「https://localhost:8006/」にアクセスするとWindows Serverのインストール状況が確認できます。

インストーラーがダウンロードされ、ダウンロード後にインストールが開始されるのでかなり待ちます。ちなみにM1 Macbookで約40分かかりました。

ログイン状態でデスクトップ画面が表示されたらWindows Serverコンテナの作成は完了します。

最終的な設定は以下の通りです。

【docker-compose.yml】
services:
  web:
    container_name: delivery_web
    build:
      context: .containers/web
      dockerfile: Dockerfile
    cap_add:
      - NET_ADMIN
    ports:
      - 8006:8006
      - 3389:3389/tcp
      - 3389:3389/udp
    environment:
      KVM: "N"
      VERSION: "2022"
    stop_grace_period: 2m
    restart: on-failure

【Dockerfile】
FROM dockurr/windows
追伸:
Windows ServerにJava、tomcatなどを自動でセットアップする方法は書かない予定です。この構成は結局、使えないのが書かない理由です。