Oracle App Gateway Dockerコンテナのデプロイ

アプリケーション・ゲートウェイは、OVAを使用するか、Dockerを使用してデプロイできます。Oracle App Gateway Dockerコンテナをデプロイする方法について学習します。

前提条件

  • アプリケーション・ゲートウェイDockerイメージをダウンロードします。ナビゲーション・メニューを開き、「アイデンティティとセキュリティ」を選択します。「アイデンティティ」で、「ドメイン」を選択します。作業するアイデンティティ・ドメインの名前をクリックします。必要なドメインを見つけるには、コンパートメントの変更が必要になる場合があります。次に、「設定」「ダウンロード」の順にクリックします。
  • 管理コンソールで作成されたアプリケーション・ゲートウェイのクライアントIDおよびクライアント・シークレットを含むウォレット・ファイルを作成します。ウォレット・ファイルにcwallet.ssoという名前を付け、それをローカル・フォルダにコピーして、コンテナがファイルを取得できるようにします。ノート:ウォレット・ツールは、IAMコンソールからダウンロードできます。IAMコンソールで、ナビゲーション・ドロワーを展開し、「設定」「ダウンロード」の順に選択します。
  • Dockerをインストールします(コマンド: $ yum install docker-engine)。
  • 現在のユーザーをDockerグループに追加します(コマンド: $ sudo usermod -a -G docker $USER)。

Dockerイメージの抽出

Dockerイメージが.tar.gz形式の場合、コンテナを作成する前に、次のコマンドを使用してイメージを抽出する必要があります。
  1. .tar.gzファイルをローカルDockerレジストリにロードします。コマンド: $ docker load -i <.tar.gz file>
  2. ローカルDockerレジストリにイメージが表示されることを確認します。コマンド: $ docker images

アプリケーション・ゲートウェイ・コンテナの作成

アプリケーション・ゲートウェイの環境変数の設定

アプリケーション・ゲートウェイDockerコンテナを実行するには、appgateway-envファイルで次の環境変数を設定する必要があります。重要: これらの値に対する検証は実行されません。無効な値を構成すると、アプリケーション・ゲートウェイDockerコンテナの作成は失敗します。

  • CG_APP_TENANT=<tenant name>
  • IDCS_INSTANCE_URL=<idcs instance url>。IAMインスタンスへのアクセスに必要なURL。
  • NGINX_DNS_RESOLVER=<resolver ip>。ファイル/etc/resolv.confにあるネームサーバーを構成します。デフォルト値は127.0.0.1です。

Dockerの実行

次のコマンドを使用して、Dockerを実行します。
ノート

ローカル・フォルダは、ボリュームとしてマウントされ、Dockerコンテナ内からアクセスできます。

前提条件として作成した(クライアントIDとクライアント・シークレットを含む)ウォレット・ファイル(cwallet.sso)は、コンテナがファイルを参照できるようにローカル・フォルダにコピーする必要があります。

$ docker run -it -d 
--name <container name> 
--env-file <path to env file>  
--env HOST_MACHINE=`hostname -f` 
--volume <local folder>/cwallet.sso:/usr/local/nginx/conf/cwallet.sso
--net=host/<User-defined bridge name> <image name>

ポート・マッピングのないホスト・ネットワーキングを使用したコンテナの例

次に、ポート・マッピングのないホスト・ネットワーキングの例を示します。これは、1024より大きいポート番号専用です。
ノート

アプリケーション・ゲートウェイ・ホスト用に構成されたポート番号が1024未満の場合、Dockerのブリッジ・ネットワーキングとポート・マッピングを使用する必要があります。Dockerコンテナを実行するには、次のポート・マッピングのあるブリッジ・ネットワーキングのコマンド例を参照してください。
$ docker run -it -d  
--name appgateway 
--env-file appgateway-env 
--env HOST_MACHINE=`hostname -f` 
--volume /opt/appgateway/cwallet.sso:/usr/local/nginx/conf/cwallet.sso  
--net=host opc-delivery.docker.acme.com/idcs/appgateway:RELEASE-BUILDNUMBER

ポート・マッピングのあるブリッジ・ネットワーキングの例

次に、ポート・マッピングのあるブリッジ・ネットワーキングの例を示します(ポート80から65535)。

前提条件: ブリッジ・ネットワーク構成を使用する前に、/etc/docker/daemon.jsonファイルでiptablesを追加/更新してtrueにします。これにより、Dockerデーモンは、ポート・マッピングに必要なiptablesフィルタ・ルールを編集できます。

$ docker run -it -p 80:9000  -d  
--name appgateway 
--env-file /home/<username>/dev/appgateway_pool/appgateway_env --env HOST_MACHINE=`hostname -f`
--volume /opt/appgateway/cwallet.sso:/usr/local/nginx/conf/cwallet.sso   
--net=bridge-net  idcs.docker.acme.com/idcs/appgateway: RELEASE-BUILDNUMBER

ノート: 前述のコマンドが実行されると、Dockerは、ポートのルートでiptables/firewalldを内部的に更新します。

追加のコンテナ・ステップ

ホストがHTTPSとして構成されている場合、証明書をコンテナにコピーするには、次の追加ステップが必要です。
  1. 構成されたSSL証明書を、「追加プロパティ」で指定されている場所にコピーする必要があります。「セキュリティ」「アプリケーション・ゲートウェイ」「<ゲートウェイ>」「ホスト」「追加プロパティ」の順に移動して、場所を書き留めます。
  2. 次のようなコマンドを実行します。ノート: 証明書の場所は、アプリケーション・ゲートウェイ・ホストで指定した場所によって異なります。
    $ docker cp deploy/docker/nginx/build/test-config/certs/my-appgateway.cert appgateway:/scratch/docker/cloudgate/certs/my-appgateway.cert
    $ docker cp deploy/docker/nginx/build/test-config/certs/my-appgateway.key appgateway:/scratch/docker/cloudgate/certs/my-appgateway.key

詳細

  • コンテナが正常に作成されたかどうかを確認するにはどうすればよいですか。

    コマンド$ docker ps -aを実行し、コンテナ名に対応するリストでSTATUSUpであることを確認します。

  • コンテナのSTATUSにexitedが表示される場合、ログをチェックしてコンテナが終了した理由を確認するにはどうすればよいですか。

    コマンド$ docker logs <container name>を実行します。このコマンドによって、ログ・メッセージが出力されます(これには、アプリケーション・ゲートウェイによって出力されたログ・メッセージが含まれます)。

  • コンテナ内のcloudgate.configファイルを編集するにはどうすればよいですか。

    コマンド$ docker exec -it <container name> bashを実行します。

    Bashシェルでコンテナが実行されている場合は、このコマンドを実行してコンテナにアクセスします。コンテナ内で、Nanoエディタを使用してファイルを編集できます。

  • アクセス・ログをJSON形式で出力できますか。

    はい。アクセス・ログはJSON形式で出力できます。次の行をファイル/usr/local/nginx/conf/nginx.confのHTTPブロック内に追加して、アプリケーション・ゲートウェイを再起動します。
    log_format jsonf escape=json '{"remote_addr": "$remote_addr", "remote_user":
          "$remote_user", "time": [$time_local], "request": "$request", "status": $status,
          "body_bytes_sent": $body_bytes_sent, "http_referer": "$http_referer", "user_agent":
          "$http_user_agent", "x_forwarded_for": "$http_x_forwarded_for"}'; access_log                    
          /usr/local/nginx/logs/access.log jsonf;

    ノート: NGINX変数を削除または追加することで、目的のJSONフィールドを編集できます。