ASP.NET MVC (Coreではなくて昔からある方)が動くコンテナイメージを作って動かそうと思って気づいたことのメモです。
準備とプロジェクト作成
まずはこのページから始める。
自分のWindowsマシン上でビルド、実行したい場合はDocker for WindowsでWindows Containerに切り替えておく。 プロジェクトは新規に作るのであれば、Visual StudioでASP.NET MVCを選択して、Windows Containerサポートを追加するのがよい。 Dockerfileがプロジェクトに追加され、プロジェクトのビルドでイメージ作成、デバッグ実行でコンテナを実行できる。
RUNコマンドの違い
DockerfileにRUNコマンドによる操作を追加する場合、Windowsコンテナの場合は挙動が少し違うので注意が必要。
execフォームとshellフォームの2種類がある。execフォームはこんな感じに記載して、記述してコマンド(実行ファイル)を直接実行する。
RUN ["powershell", "Invoke-WebRequest", "https://download.example.com/path/to/installer.msi", "-OutFile", "C://instakker.msi"]
shellフォームはシェル経由の実行で、例えば次のようにMSIを実行して完了まで待機できたりする。
RUN Start-Process -Wait -FilePath msiexec -ArgumentList /i, "C:\installer.msi", /qn,
エスケープの扱いに違いがあったりするのも注意。
実行したコンテナへのログイン
Docker for Windowsで実行したコンテナにログインしたい場合は/bin/sh
の代わりにpowershell
を使う。
docker exec -it <container_id> powershell
適当なファイルを見たい場合 (Linuxコンテナで docker exec <container_id> cat /path/to/log.txt
に相当)は、とりあえずこれで実行できた。パスに空白を含む場合は、空白の前に`を入れてエスケープ。
docker exec <container_id> powershell Get-Content 'C:\Program` Files\path\to\log.txt'
また気づいたら追加します。