Windowsコンテナの操作とビルド

Windowsコンテナの操作と起動開発
Free-PhotosによるPixabayからの画像

前回は、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コンテナの操作とビルドについての紹介でした。

スポンサーリンク
スポンサーリンク
スポンサーリンク
開発
Tech WalkIt

コメント

  1. […] 次回は、コンテナの簡単な操作とビルドを実行してみます。 […]

  2. […] Visual Stuidoを利用すると、アプリケーション(.NET、ASP.NET、およびASP.NET Core)をコンテナ化してビルド、デバッグ、実行を簡単に実行することができます。今回は、前回の環境を用いて、ASP.NET アプリケーションプロジェクトをコンテナ内で実行してみます。 […]