WindowsにおけるDockerコンテナには、主に以下の2通りがあります。
・Windows (Server) コンテナ:Windows系OSのコンテナを起動できる。
・Docker (Desktop) for Windows:Linux/UNIX系OSのコンテナを起動できる。
前者はWindows Serverでのみ使用可能です。
ここでは、Windowsコンテナを使用して、マイクロサービス向けWebサイト・CGIの構築方法を解説します。
山括弧<…>で囲まれている箇所は、ご自身の環境に合わせて書き換える必要があります。
Windowsコンテナのインストール
Windowsコンテナをインストール・有効化します。
こちらを参考に実施下さい。
Webサイト・CGIの構築
1. 前提
ホストOS上では以下のようなフォルダ・ファイル構成とします。
コンテナは「Webアプリケーション用」と「DB用」の2つ作成します。
2. Dockerファイルの用意
Dockerファイルを用意します。
以下はDockerファイルの内容の例です。COPYやRUNはDockerイメージ作成時に実行されます。
#==============================
# Webアプリケーション用Dockerfile
#==============================
# Microsoftが提供しているDockerイメージ「microsoft/iis」をベースとして使う
FROM microsoft/iis
# 管理者(任意)
LABEL maintainer="<メールアドレス(e.g. hoge@gmail.com)"
# ホストOSの「toolsフォルダ」と「archivesフォルダ内のzipファイル」を、Dockerコンテナ内の「C:/setupフォルダ」以下にコピーする。(※zip化はしなくてもよい。ここでは説明上そうしている)
COPY /tools /archives/*.zip C:/setup/
#(例えば、tools/run.ps1を用意しておくと)Dockerイメージ作成時にrun.ps1により任意のコマンドを実行できる。
RUN powershell.exe -noprofile -executionpolicy RemoteSigned -command "C:/setup/run.ps1"
#==============================
# DB用Dockerfile (※ここではSQL Server)
#==============================
# 3rd Partyが提供しているDockerイメージ「kkbruce/mssql-server-windows-express:windowsservercore-1809」をベースとして使う
FROM kkbruce/mssql-server-windows-express:windowsservercore-1809
# 管理者(任意)
LABEL maintainer="<メールアドレス(e.g. hoge@gmail.com)"
# ホストOSの「toolsフォルダ」と「archivesフォルダ内のzipファイル」を、Dockerコンテナ内の「C:/setupフォルダ」以下にコピーする。(※zip化はしなくてもよい。ここでは説明上そうしている)
COPY /tools /archives/*.zip C:/setup/
#(例えば、tools/run.ps1を用意しておくと、以下のように記載することで)Dockerイメージ作成時にrun.ps1が実行される。これにより、Dockerイメージ内の環境を事前に整えることができる。
RUN powershell.exe -noprofile -executionpolicy RemoteSigned -command "C:/setup/run.ps1"
3. Webアプリケーション用 run.ps1の用意
run.ps1 に以下を実行するプログラムを記述します。
①こちらの「Webサイト・CGIの構築 > 前提」のように、ドキュメントルートとCGIルートを作成
②上記「archivesフォルダ内のzipファイル」を展開し、①のドキュメントルート、CGIルート、CGIモジュールにそれぞれ配置
③こちらの「Webサイト・CGIの構築」のPowershellコマンドを順に実行
※IIS URL Rewriteのインストール方法はこちらをご覧下さい。
4. Dockerイメージの作成
ホストOSのPowershellにて、以下を実行します。
# Webアプリケーション用Dockerイメージの作成
docker build -t "<イメージ名(e.g. hoge_app)>" -f "C:\hoge\docker\app\Dockerfile" .
# DB用Dockerイメージの作成
docker build -t "<イメージ名(e.g. hoge_db)>" -f "C:\hoge\docker\db\Dockerfile" .
Powershellで「docker images」を実行し、Dockerイメージ「hoge_app」と「hoge_db」が存在していることを確認します。
5. ODBCドライバーのインストール
こちらからSQL Server用ODBCドライバー(msodbcsql.msi)をダウンロードします。
Webアプリケーション用Dockerイメージであるhoge_appを起動します。
docker run -d hoge_app --name hoge_app --entrypoint powershell
ホストOSからDockerコンテナhoge_appにODBCドライバーをコピーします。
docker cp <ホストOSにあるmsodbcsql.msiのフルパス> hoge_app:/setup/msodbcsql.msi
Dockerコンテナhoge_appにアタッチします。(hoge_app内に入ります)
docker attach hoge_app
hoge_app内で以下を実行してインストールします。
msiexec.exe /quiet /passive /qn /i C:\setup\msodbcsql.msi IACCEPTMSODBCSQLLICENSETERMS=YES
以下を実行することで、正常にインストールされているかを確認することができます。
$HKLM = 2147483650
$reg = [WMIClass]"ROOT\DEFAULT:StdRegProv"
$Key = "SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers"
$reg.EnumValues($HKLM, $Key) | % { $_.sNames | % {$_ + "`t" + $reg.getStringValue($HKLM, $Key, $_).sValue } }
# "ODBC Driver * for SQL Server Installed"が表示されればOKです。
6. Dockerコンテナの起動
Webアプリケーション用のDockerコンテナを起動します。
以下のように起動すると、ホストOSのブラウザから「http://localhsot:8888/api/functions」とアクセスすると、Dockerコンテナ内へは「http://localhost:80/api/functions」とアクセスします。
docker run -d -p <ホストOSのポート番号(e.g. 8888)>:<Dockerコンテナのポート番号(e.g. 80)> hoge_app --name hoge_app --entrypoint powershell
DB用のDockerコンテナを起動します。
docker run -d -p <ホストOSのポート番号(e.g. 1433)>:<Dockerコンテナのポート番号(e.g. 1433)> -e sa_password=<saの任意のパスワード(e.g. root)> -e ACCEPT_EULA=Y --name hoge_db
ホストOSからDockerコンテナのIPアドレスは以下で確認することができます。
docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <コンテナ名(e.g. hoge_db)>
ホストOSの SQL Server Management Studioなどから、サーバー名「<上記で確認したIP>」もしくは「<上記で確認したIP>\SQLEXPRESS」、SQL Server認証でユーザー「sa」・パスワード「root」でアクセスすることができます。
同じように、Dockerコンテナhoge_appから、Dockerコンテナhoge_dbに対して上記IPを指定することでアクセスすることができます。
コメント