前回は、docker for Windows環境でIISのイメージを起動させてみました。
今回は、Windowsコンテナの扱い方とともに、自分のコードをコンテナで実行させる簡単な例を紹介します。
準備
ベースコンテナ
コンテナのベースには、前回同様mcr.microsoft.com/windows/servercore/iisを使用します。
サンプルアプリケーション
コードのサンプルとしては、下記index.htmlを使用します。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Test IIS</title>
</head>
<body>
<div id='hostname1'></div>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script type="text/javascript">
$('#hostname1').text(location.hostname);
</script>
</body>
</html>
動作確認
コンテナおよびサンプルアプリの動作を確認します。
コンテナへの接続・切断
初めに、前回起動させた、testiisコンテナの内部を覗いてみます。
Windowsコンテナに接続するには、下記docker execコマンドを使用します。PowerShellの部分は、CMDでも構いません。慣れた方、用途に合った方を選択すればいいです。
dirコマンドでIIS標準フォルダを表示させてみました。
> docker exec -it testiis powershell
PS C:\> dir .\inetpub\wwwroot\
Directory: C:\inetpub\wwwroot
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 10/14/2020 2:46 AM 703 iisstart.htm
-a---- 10/14/2020 2:46 AM 99710 iisstart.png
PS C:\> exit
コンテナから抜けてホストに戻るには、上記exitコマンドを実行します。
コンテナへのファイルコピー
では、コンテナに先ほど作成したindex.htmlをwwwrootフォルダ直下にコピーします。
コピーするには、一旦コンテナを停止し、docker cpコマンドを実行します。
コピーが完了したら、コンテナを再度開始し、ブラウザでhttp://localhost:8000/にアクセスします。
> docker stop testiis
> docker cp .\index.html testiis:c:\inetpub\wwwroot\
> docker start testiis
localhostと表示されていれば成功です。
なお、ローカルのフォルダをコンテナにコピーしたい場合は、下記コマンドを実行します。
- appフォルダ自体をwwwroot配下にコピーしたい場合
> docker cp .\app testiis:c:\inetpub\wwwroot - appフォルダの中身をwwwroot配下にコピーしたい場合
> docker cp .\app\. testiis:c:\inetpub\wwwroot
カスタムビルド
では、ローカルのappフォルダ配下にindex.htmlを配置し、イメージtestbuildiisを作成してみます。
Dockerfile作成
下記の内容で、Dockerfileファイルを作成します。
元々のコンテナからwwwroot内をクリーンにし、ローカルappフォルダ配下のファイルを転送しています。
このイメージは、W3SVCをモニターするサービスが既に登録されているため、ENTRYPOINTの記述を必要としません。
FROM mcr.microsoft.com/windows/servercore/iis
RUN powershell -NoProfile -Command Remove-Item -Recurse C:\inetpub\wwwroot\*
WORKDIR /inetpub/wwwroot
COPY app/ .
ビルド実行
powershellを起動し、下記コマンドでイメージをビルドします。
完了後、docker imagesコマンドでイメージが作成されていることを確認します。
> docker build -t testbuildiis .
> docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
testbuildiis latest 1b54e790a113 9 seconds ago 4.4GB
起動
イメージtestbuildiisを起動してみます。ポートは何でもよいのですが、8001としておきます。
docker run -d -p 8001:80 --name testbuildiis-site testbuildiis
ブラウザでhttp://localhost:8001/にアクセスすると、先ほどと同じ画面が出てくると思います。
その他
他、よく使用するdockerコマンドを羅列します。
- コンテナを削除する
docker rm {コンテナ名 or コンテナID} - イメージを削除する
docker rmi {イメージ名 or イメージID} - 動作中のコンテナ一覧を表示する
- docker ps
- 停止中のコンテナも含めて一覧を表示する
docker ps -a
まとめ
dockerのコンテナを使用すれば、Linux系だけでなくIISでも簡単にウェブサーバーを構築することができます。Linuxに抵抗のある方は、Windows系のサーバーで挑戦してみるのはいかがでしょうか。
以上、Windowsコンテナの操作とビルドについての紹介でした。
コメント
[…] 次回は、コンテナの簡単な操作とビルドを実行してみます。 […]
[…] Visual Stuidoを利用すると、アプリケーション(.NET、ASP.NET、およびASP.NET Core)をコンテナ化してビルド、デバッグ、実行を簡単に実行することができます。今回は、前回の環境を用いて、ASP.NET アプリケーションプロジェクトをコンテナ内で実行してみます。 […]