付録M.2 コンテナにJP1/Baseを導入する場合の注意事項
DockerコンテナにJP1/Baseを導入し,Dockerホストまたは他のホストと連携する場合には,次の前提条件と,設定手順が必須となります。
なお,Dockerが導入されているホストをDockerホスト,Dockerが提供するコンテナをコンテナと呼びます。
(1) 前提条件
JP1/Baseを導入したコンテナをコンテナ間以外で連携する場合は,両方向から問題なくTCP/IP通信ができるよう設定してください。例として次の方法を示します。
(a) ポートフォワーディング機能を使用した方法
-
コンテナごとに,連携するホストと通信できるIPアドレスを静的に付与
JP1/Baseを導入したコンテナをコンテナ間以外で連携する場合は,コンテナごとに対応するIPアドレスを,Dockerホストに静的に割り当ててください。
-
明示的に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社サイト掲載のリリースノートを参照してください。
-
コンテナを特権モードで起動
JP1/Baseの一部のコマンドで,特権モードでのコンテナ起動が必須となります。JP1/Baseを導入するコンテナは特権モード(--privileged)で起動してください。設定例は2.を参照してください。
-
コンテナからの転送されたJP1イベントについて
コンテナに導入されたJP1/Baseから,他のホストにJP1イベントを転送する場合,転送されたJP1イベントの「発行元IPアドレス」に1.および2.で設定されたIPアドレスが設定されません。そのため,転送先ホストでは,コンテナから転送されたイベントの「発行元IPアドレス」を使用した運用は避けてください。
(b) Dockerホスト上でmacvlanブリッジを使用する方法
-
コンテナを特権モードで起動
JP1/Baseの一部のコマンドで,特権モードでのコンテナ起動が必須となります。JP1/Baseを導入するコンテナは特権モード(--privileged)で起動してください。設定例を次に示します。
# docker run --privileged --name コンテナ名 --hostname ホスト名 -id ベースイメージ名:タグ名
-
Dockerホストでmacvlanを設定し,VNICを作成する。
# ip link add link 外部へ接続するIPアドレスが設定されているIF name VNIC名 type macvlan mode private
-
DockerホストでVNICをコンテナに割り当てる。
# ID=コンテナID # ip link set VNIC名 netns $(docker inspect --format "{{.State.Pid}}" $ID)
-
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アドレス設定コマンドをインストール済みの場合は不要です。
-
コンテナからの転送されたJP1イベントについて
コンテナに導入されたJP1/Baseから,他のホストにJP1イベントを転送する場合,転送されたJP1イベントの「発行元IPアドレス」に1.および2.で設定されたIPアドレスが設定されません。そのため,転送先ホストでは,コンテナから転送されたイベントの「発行元IPアドレス」を使用した運用は避けてください。
(2) 設定手順
-
コンテナ内のJP1/Baseの認証サーバーを再設定する。
DockerfileでJP1/Baseをインストールする場合,インストール時(Dockerイメージ作成時)とコンテナ起動時でホスト名が異なることで,インストール時に設定されるプライマリー認証サーバー名が,コンテナ起動時の物理ホスト名と異なる状態となります。そのため,認証サーバーをコンテナ内で使用する場合は,コンテナ起動時のホスト名を再度設定する必要があります。
次のコマンドラインの実行が必須です。
# /opt/jp1base/bin/jbssetusrsrv `hostname`
-
コンテナ内のJP1/Baseで,連携するホストをJP1hosts2に設定する。
コンテナ内のhostsファイルは,起動(start)・停止(stop)のたびにオーバーライトされ,他のホストの記載が消えてしまいます。そのため,連携するホスト情報はjp1hosts2に設定してください。
-
連携するホストで,コンテナのホスト名から手順1および手順2によって設定されたコンテナに対応するIPアドレスを名前解決できるよう設定する。
Dockerコンテナが外部からの要求を受け付ける場合,コンテナに対応するIPアドレスで待ち受けます。そのため,連携するホスト側では,コンテナのホスト名からコンテナに対応するIPアドレスを名前解決できるよう設定してください。
-
コンテナの起動について
Dockerコンテナ起動時にJP1/Baseのサービス自動起動機能は使用できません。コンテナ起動後に,JP1/Baseの起動コマンドからJP1/Baseのサービスを起動してください。もしくは,Dockerコンテナ起動時に実行するコマンドをシェルにして,そのシェルからJP1/Baseの起動コマンドを実行するなどを検討してください。
JP1/Baseの起動コマンドについては,「7.2 JP1/Baseを起動および終了する(UNIXの場合)」を参照してください。
-
コンテナの停止について
JP1/Baseの終了コマンドからJP1/Baseのサービスを停止後,コンテナを停止してください。
JP1/Baseの終了コマンドについては,「7.2 JP1/Baseを起動および終了する(UNIXの場合)」を参照してください。
-
コンテナ同士の連携について
コンテナ同士を連携する場合には,コンテナ・リンク機能(--link)を使用してください。詳細はDocker社のDocker Engine referenceを参照してください。