このページの手順に沿って、
Java、
.NET Framework および
.NET ジェネレーターで生成されたアプリケーションを Docker コンテナに簡単にデプロイして実行できます。
この手順はデータベースではなく、生成されたプログラムをデプロイするのに役立ちます。データベースのデプロイ方法については、「
再編成をエクスポート」を参照してください。その他のオプションについては、「
アプリケーションをデプロイ」を参照してください。
1. アプリケーションを特定のターゲット (本番環境など) に初めてデプロイする際には、事前に
ナレッジベースに新しい
環境を作成して、次のようにすることをお勧めします:
- GeneXus で使用する PC の Tomcat または IIS でアプリケーションをローカルに実行する
- アプリケーションをターゲット (本番環境など) のデータベースに接続する
2. [ すべてビルド ] を選択します。
3. [ ビルド ] メニューに移動して、 [
アプリケーションをデプロイ ] オプションを選択します。
4. [ デプロイ ] 画面で、次のように設定します:
1. デプロイに含める Main オブジェクトを選択します。
2. [ ターゲット ] で、 [ Docker Image ] オプションを選択します。
3. 次のプロパティを指示どおりに設定します (すべてのフィールドに既定値があります):
1. [ Docker base image ] プロパティ: 新しいイメージを作成する際にベースとして使用するイメージ
2. [ Maintainer name ] プロパティ: イメージの作成者の名前 (イメージのメタデータの一部として設定される)
3. [ Docker Environment variables ] プロパティ: イメージを事前にインスタンス化するすべての環境変数
4. [ Image WebApp location ] プロパティ: Docker イメージ内のアプリケーション実行パス
5. [ Docker image name ] プロパティ: 生成される Docker イメージの名前
5. [ デプロイ ] ボタンをクリックして、Docker イメージを作成します。出力では、プロセスおよび生成されたファイルの場所に関するフィードバックが送信されます。
Windows のコマンドプロンプトで次のコマンドを実行すると、上記の手順で作成したものを含む Docker イメージが一覧表示されます。
Docker イメージ
Java 環境では、Linux ベースのイメージが生成されます。以前作成したイメージを使用して、Dockerfile があるディレクトリーからコンテナを実行するには、次のコマンドを実行します。
run コマンドを参照してください。
docker run --rm -p 9999:8080 <Docker イメージ名>
入力値の説明:
--rm
シャットダウン時にコンテナが削除されることを示します。
-p 9999:8080
コンテナのポート 8080 (Tomcat の既定値) がホストで 9999 として公開されていることを示します。
<Docker イメージ名>
前の手順で作成したイメージの名前です。
このコマンドを正しく実行すると、http://localhost:9999/servlet/<Java パッケージ名>.<修飾オブジェクト名> からアプリケーションのメインオブジェクトにアクセスできるようになります。
.NET Framework (C#) 環境では、Windows ベースのイメージが生成されます。以前作成したイメージを使用して、Dockerfile があるディレクトリーからコンテナを実行するには、次のコマンドを実行します。
docker run --rm -p 9999:80 <Docker イメージ名>
入力値の説明:
--rm
シャットダウン時にコンテナが削除されることを示します。
-p 9999:80
コンテナのポート 80 (IIS の既定値) がホストで 9999 として公開されていることを示します。
<Docker イメージ名>
前の手順で作成したイメージの名前です。
ERROR ( message:Cannot find requested collection element.)
Applied configuration changes to section "system.applicationHost/applicationPools" for "MACHINE/WEBROOT/APPHOST" at configuration commit path "MACHINE/WEBROOT/APPHOST"
このコマンドを正しく実行すると、http://localhost:9999/<修飾オブジェクト名>.aspx からアプリケーションのメインオブジェクトにアクセスできるようになります。
.NET 環境では、Linux ベースのイメージが生成されます。以前作成したイメージを使用してコンテナを実行するには、次のコマンドを実行します。
docker run --rm -p 9999:8080 -e ASPNETCORE_URLS="http://*:8080" <Docker イメージ名>
入力値の説明:
--rm
シャットダウン時にコンテナが削除されることを示します。
-p 9999:8080
こうすると、コンテナのポート 8080 がホストの全インターフェース (アドレス 0.0.0.0) 上で TCP ポート 9999 にバインドされます。「
Publish or expose port」を参照してください。
-e ASPNETCORE_URLS
パラメーター
-e ASPNETCORE_URLS
は、Docker が ASP.NET Core の HTTP 接続に使用するホストとポートを指定するため、.NET 8 で必要です。
<Docker イメージ名>
前の手順で作成したイメージの名前です。
既定の ASP.NET Core ポートが変更されました。
公式のドキュメントを参照してください。
そのため、以下の設定は動作しません:
docker run --rm -it -p 8000:80 <my-app>
この大幅な変更以降、コンテナの開始方法に変更が必要な点がいくつかあります。「
推奨される操作」を参照してください。
以下に 2 つの代替方法を示します:
1. [ entrypoint ] オプションを使用すると、(dockerfile の) イメージの既定の ENTRYPOINT を上書きできます。 アプリケーションの公開ポートを設定します。
docker run --rm -p <hostPort>:<ContainerPortPublished> --name <containerName> --entrypoint dotnet <imageName> bin/GxNetCoreStartup.dll <virtualPath> <localPath> <ContainerPortExposed>
GxNetCoreStartup.dll は、パラメーターとして virtualPath、LocalPath とポートを受け取ります。
例: docker run --rm -p 81:8080 --name mycontainer --entrypoint dotnet user/test:3.0 bin/GxNetCoreStartup.dll testvp /app 8080
この例では、アプリケーションは http://localhost:81/testvp/<webpanel>.aspx で実行します
2. ASPNETCORE_URLS 環境変数を使用します。
docker run --rm -p 9999:8080 -e ASPNETCORE_URLS="http://*:8080" <Docker イメージ名>
リモートサーバーへのアクセス
コンテナから非完全修飾ホスト名を使ってリモート データベース サーバーにアクセスするには、DNS 検索の接頭語を指定する必要があります。たとえば、DataStore サーバー名が「SqlServerSrv」で、完全修飾名が「mycompany.local.SqlServerSrv」の場合、接頭語は以下のように指定できます:
docker run --rm -p 9999:5000 -e ASPNETCORE_URLS="http://*:5000" --dns-search mycompany.local <Docker イメージ名>
このコマンドを正しく実行すると、http://localhost:9999/<修飾オブジェクト名>.aspx からアプリケーションのメインオブジェクトにアクセスできるようになります。
アプリケーションを仮想ディレクトリーで実行させる
.NET ジェネレーターでは、以下を実行可能です:
docker run --rm -p <hostPort>:
<ContainerPortPublished> --name <containerName> --entrypoint dotnet <imageName> bin/GxNetCoreStartup.dll <virtualPath> <localPath>
<ContainerPortExposed>
- 既定の Docker ベースイメージを使用する際には、次の点に留意してください。
Docker コンテナへのデプロイに関するトラブルシューティング
アプリケーションをデプロイする MSBuild タスク
はい、できます。GeneXus で使用される既定のベースイメージは、
[ Docker base image ] プロパティで変更できます。このプロパティで独自のイメージを設定できます。PC 上にないイメージは、Docker クライアントがレジストリから取得します。
[ Image WebApp location ] プロパティの変更も必要になる場合があることに留意してください。
「Docker for windows」を使用しなくても Dockerfile を生成できます。そのためには、この機能を使用して、通常どおり Docker にデプロイするためのオプションを選択します。
この場合、「warning: Dockerfile successfully created but no docker image was generated because Docker client was not found」という警告が表示されます。
パッケージを作成したいだけの場合は、GeneXus で [ パッケージのみ ] オプション (または
Docker へデプロイする MSBuild タスク) を使用します。イメージをビルドしようとして、Docker エンジンが動作していない場合、エラーが発生します。