Hitachi

JP1 Version 12 JP1/Base 運用ガイド


付録O.2 コンテナにJP1/Baseを導入する場合の注意事項

DockerコンテナにJP1/Baseを導入し,Dockerホストまたは他のホストと連携する場合には,次の前提条件と,設定手順が必須となります。

なお,Dockerが導入されているホストをDockerホスト,Dockerが提供するコンテナをコンテナと呼びます。

〈この項の構成〉

(1) 前提条件

JP1/Baseを導入したコンテナをコンテナ間以外で連携する場合は,両方向から問題なくTCP/IP通信ができるよう設定してください。例として次の方法を示します。

(a) ポートフォワーディング機能を使用した方法

  1. コンテナごとに,連携するホストと通信できるIPアドレスを静的に付与

    JP1/Baseを導入したコンテナをコンテナ間以外で連携する場合は,コンテナごとに対応するIPアドレスを,Dockerホストに静的に割り当ててください。

  2. 明示的にIPアドレスを指定したDockerコンテナへのポートフォワーディング設定

    コンテナをコンテナ間以外で連携する場合は,1.で割り当てたIPアドレスに対して,Dockerホスト側のJP1/Baseが使用するポート番号から,コンテナ側のJP1/Baseが使用するポート番号へのポートフォワーディングの設定が必須となります。

    JP1/Baseの使用するポートについては,「付録C ポート番号一覧」を参照してください。

    # docker run -p 外部IPアドレス:外部IPアドレス上のJP1/Baseが使用するポート:コンテナ上のJP1/Baseが使用するポート ...

    -p:コンテナ内のJP1/Baseのポートを,外部から通信可能なIPアドレス上のポートにマップします。

    # docker run --privileged -p xxx.xxx.xxx.xxx:20098:20098
      -p xxx.xxx.xxx.xxx:20099:20099 -p xxx.xxx.xxx.xxx:20237:20237
      -p xxx.xxx.xxx.xxx:20238:20238 -p xxx.xxx.xxx.xxx:20239:20239
      -p xxx.xxx.xxx.xxx:20240:20240 -p xxx.xxx.xxx.xxx:20306:20306
      -p xxx.xxx.xxx.xxx:20600:20600 --name コンテナ名 --hostname ホスト名 -id ベースイメージ名:タグ名

    なお,xxx.xxx.xxx.xxxは1.でDockerホストに静的に割り当てたIPアドレスです。

    各オプションの詳細についてはDocker社サイト掲載のリリースノートを参照してください。

  3. コンテナを特権モードで起動

    JP1/Baseの一部のコマンドで,特権モードでのコンテナ起動が必須となります。JP1/Baseを導入するコンテナは特権モード(--privileged)で起動してください。設定例は2.を参照してください。

  4. コンテナからの転送されたJP1イベントについて

    コンテナに導入されたJP1/Baseから,他のホストにJP1イベントを転送する場合,転送されたJP1イベントの「発行元IPアドレス」に1.および2.で設定されたIPアドレスが設定されません。そのため,転送先ホストでは,コンテナから転送されたイベントの「発行元IPアドレス」を使用した運用は避けてください。

(b) Dockerホスト上でmacvlanブリッジを使用する方法

  1. コンテナを特権モードで起動

    JP1/Baseの一部のコマンドで,特権モードでのコンテナ起動が必須となります。JP1/Baseを導入するコンテナは特権モード(--privileged)で起動してください。設定例を次に示します。

    # docker run --privileged --name コンテナ名 --hostname ホスト名 -id ベースイメージ名:タグ名
  2. Dockerホストでmacvlanを設定し,VNICを作成する。

    # ip link add link 外部へ接続するIPアドレスが設定されているIF name VNIC名 type macvlan mode private
  3. DockerホストでVNICをコンテナに割り当てる。

    # ID=コンテナID
    # ip link set VNIC名 netns $(docker inspect --format "{{.State.Pid}}" $ID)
  4. Dockerホストからコンテナを操作し,割り当てられたVNICにIPアドレスを付与する。

    # docker exec $ID yum install -y iproute libmnl libnfnetlink libnetfilter_conntrack iptables
    # docker exec $ID ip addr add dev VNIC名 付与するIPアドレス/ネットマスク
    # docker exec $ID ip link set VNIC名 up

    各IPアドレス設定コマンドをインストール済みの場合は不要です。

  5. コンテナからの転送されたJP1イベントについて

    コンテナに導入されたJP1/Baseから,他のホストにJP1イベントを転送する場合,転送されたJP1イベントの「発行元IPアドレス」に1.および2.で設定されたIPアドレスが設定されません。そのため,転送先ホストでは,コンテナから転送されたイベントの「発行元IPアドレス」を使用した運用は避けてください。

(2) 設定手順

  1. コンテナ内のJP1/Baseの認証サーバーを再設定する。

    DockerfileでJP1/Baseをインストールする場合,インストール時(Dockerイメージ作成時)とコンテナ起動時でホスト名が異なることで,インストール時に設定されるプライマリー認証サーバー名が,コンテナ起動時の物理ホスト名と異なる状態となります。そのため,認証サーバーをコンテナ内で使用する場合は,コンテナ起動時のホスト名を再度設定する必要があります。

    次のコマンドラインの実行が必須です。

    # /opt/jp1base/bin/jbssetusrsrv `hostname`
  2. コンテナ内のJP1/Baseで,連携するホストをJP1hosts2に設定する。

    コンテナ内のhostsファイルは,起動(start)・停止(stop)のたびにオーバーライトされ,他のホストの記載が消えてしまいます。そのため,連携するホスト情報はjp1hosts2に設定してください。

  3. 連携するホストで,コンテナのホスト名から手順1および手順2によって設定されたコンテナに対応するIPアドレスを名前解決できるよう設定する。

    Dockerコンテナが外部からの要求を受け付ける場合,コンテナに対応するIPアドレスで待ち受けます。そのため,連携するホスト側では,コンテナのホスト名からコンテナに対応するIPアドレスを名前解決できるよう設定してください。

  4. コンテナの起動について

    Dockerコンテナ起動時にJP1/Baseのサービス自動起動機能は使用できません。コンテナ起動後に,JP1/Baseの起動コマンドからJP1/Baseのサービスを起動してください。もしくは,Dockerコンテナ起動時に実行するコマンドをシェルにして,そのシェルからJP1/Baseの起動コマンドを実行するなどを検討してください。

    JP1/Baseの起動コマンドについては,「7.2 JP1/Baseを起動および終了する(UNIXの場合)」を参照してください。

  5. コンテナの停止について

    JP1/Baseの終了コマンドからJP1/Baseのサービスを停止後,コンテナを停止してください。

    JP1/Baseの終了コマンドについては,「7.2 JP1/Baseを起動および終了する(UNIXの場合)」を参照してください。

  6. コンテナ同士の連携について

    コンテナ同士を連携する場合には,コンテナ・リンク機能(--link)を使用してください。詳細はDocker社のDocker Engine referenceを参照してください。