Business Central のコンテナーサンドボックス環境を構築する

Microsoft Dynamics 365 の ERP の１つである Business Central について、開発およびテストのために使用できるコンテナーベースの環境を PC に作成する手順を説明します

前提として、Docker Desktop for Windows で Windows containers のサービスを起動していることが必要 [^1] です。 この記事の説明では Windows 10 を使用しています

Docker サービスには Linux containers と Windows containers の２種類がありますが、Business Central では Windows containers を使用します。Linux と Windows の切替えはタスクバーのアイコンメニューから行えます。現在、どちらのサービスが起動しているか、ということは PowerShell で `docker version --format '{{.Server.Os}}'` を実行すると確認することができます

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58/a03f781b-0ca2-5203-d0bd-56f8477d631d.png">

既定の Linux containers を使用していると **WSL 2 installation is incomplete** と警告が出る場合がありますが、Business Central では Linux containers を使用しないため WSL 2 (Windows Subsystem for Linux) のインストールは必要ありません

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58/e1f15796-2394-b8c8-9532-8b0ae6a82ad6.png">


#### Business Central から CreateBCSandbox.ps1 をダウンロードする

Business Central にサインインして、**コンテナーサンドボックス環境** のページ [^2] を開きます。画面右上の虫眼鏡 :mag_right: のアイコンから検索してください

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58/af88a8f6-5051-5fda-ea35-cd93298e87dd.png">

**Host locally** を選択して、**CreateBCSandbox.ps1** をダウンロードします

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58/f3bacc23-632b-24b4-afe2-20e1ffbeaeba.png">


#### CreateBCSandbox.ps1 を実行する

スクリプトを実行する前にテキストエディタで CreateBCSandbox.ps1 を開き、`$accept_eula` を **\$false から \$true へ**、`$containername` にはコンテナ名 **bcserver** を設定します

```powershell
$accept_eula = $true
$containername = 'bcserver'
```

この手順を省略すると、エラー `You have to accept the eula in order to create a Container.` になってしまいます

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58/28e50a36-accf-7131-5e49-31a97f1c5833.png">

スクリプトは管理者として実行する必要があります。スクリプトをダウンロードしたフォルダを開き、Windows Explorer のメニューから Windows PowerShell を管理者として開きます

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58/ec19f32b-1085-f1f9-7be2-86f1b4fcf792.png">

CreateBCSandbox.ps1 を実行します。実行ポリシーによっては「ファイルはデジタル署名されていません」というエラー PSSecurityException が起きるため、必要に応じて `-ExecutionPolicy unrestricted` オプションを付けて実行してください

```powershell
powershell.exe -ExecutionPolicy unrestricted .\CreateBCSandbox.ps1
```

[Business Central の Docker イメージ](https://hub.docker.com/_/microsoft-businesscentral) のダウンロードから始まるため、30 分程度の時間がかかります

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58/a852f564-45c3-5d91-fcf3-b61de714e72f.png">

スクリプトの実行が完了したら Docker Desktop の画面からコンテナの起動を確認してください。コンテナの起動／停止／廃棄といった操作は Docker Desktop から行うことができます

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58/dc215faa-75e4-74f5-3e04-dc562f2f944d.png">


#### コンテナーサンドボックス環境の動作を確認する

コンテナを正常に起動できていれば、ブラウザからコンテナーサンドボックス環境の動作を確認することができます。Web Client URL は Docker Desktop の LOGS 画面から確認できます。手順通りにコンテナ名を bcserver としている場合、Web Client URL は http://bcserver/BC/?tenant=default となっているはずです

<img width="500" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58/408e4d72-529c-824f-1246-dd50d95b765a.png">


#### 参考

- コンテナーサンドボックス開発環境の始め方について説明されています  
  https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-get-started-container-sandbox
- Docker コマンドや BCContainerHelper モジュールについて説明されています  
  https://docs.microsoft.com/en-us/dynamics365/business-central/dev-itpro/developer/devenv-running-container-development
- 仮想化技術、Docker コマンド、動作確認の方法について説明されています  
  https://yzhums.com/152/


[^1]: Docker Desktop for Windows のシステム要件は [docs.docker.com](https://docs.docker.com/desktop/windows/install/#hyper-v-backend-and-windows-containers) の説明をご確認ください
[^2]: オブジェクト ID は Page 1920 Container Sandbox Environment です