カスタム・コンテナおよびサードパーティ・コンテナでの ICM の使用
この付録では、ICM を使用してユーザとサードパーティのコンテナを導入する方法について説明します。説明は、Docker イメージが ICM からアクセス可能なリポジトリに存在することを前提としています。他のコンテナおよびサービス (InterSystems IRIS を含む) と通信するようにコンテナを構成する方法については、"ICM によるスクリプト作成" を参照してください。
コンテナ名の指定
ホスト上で実行するコンテナには、それぞれ一意の名前を付ける必要があります。icm run を使用してコンテナを導入する際に、-container オプションを使用してコンテナに名前を付けることができます。
# icm run -container gracie -image docker/whalesay
icm ps の出力で、その名前が反映されていることを確認できます。
# icm ps
Machine IP Address Container Status Health Image
------- --------- -------- ----- ------ ----
Acme-DM-TEST-0001 172.16.110.9 gracie Restarting docker/whalesay
Note:
-container オプションが指定されない場合は、既定のコンテナ名 iris が使用されます。この名前は予約されており、インターシステムズが提供する InterSystems IRIS イメージから導入されたコンテナにのみ使用する必要があります。
既定のコマンドのオーバーライド
コンテナの既定のコマンドをオーバーライドする場合は、-command を使用して行うことができます。例えば、docker/whalesay イメージが既定でコマンド /bin/bash を実行するとします。
# icm docker -command "ps -a"
CONTAINER ID IMAGE COMMAND CREATED STATUS NAMES
17f4ece54c2f docker/whalesay "/bin/bash" 4 days ago Restarting gracie
コンテナが実行するコマンドを別のものにする場合は (例えば pwd)、以下のようにコンテナを導入できます。
# icm run -container gracie -image docker/whalesay command pwd
以下のように Docker ログを調べて、コマンドが正常に実行されたことを確認できます。
# icm docker -command "logs gracie"
/cowsay
Docker オプションの使用
ICM によって明示的に提供されていない Docker オプションまたはオーバーライドがコンテナに必要になる場合があります。こういったオプションやオーバーライドは、-options オプションを使用して、追加できます。このセクションでは、より一般的なユース・ケースの例をいくつか示します。Docker オプションの詳細は、https://docs.docker.com/engine/reference/run/Opens in a new tab を参照してください。
再起動
デフォルトでは、ICM はオプション --restart unless-stopped を指定してコンテナを導入します。つまり、コンテナが icm stop コマンド以外の理由で (コンテナの終了、Docker の再起動など) 実行境界を越えた場合、Docker はコンテナの実行を試み続けます。ただし、場合によっては、コンテナを 1 回限り実行して終了したままにする必要があります。この場合、以下のように再起動を抑止できます。
# icm run -container gracie -image docker/whalesay -options "--restart no"
# icm ps
Machine IP Address Container Status Health Image
------- --------- -------- ----- ------ -----
Acme-DM-TEST-0001 172.16.110.9 gracie Exited (0) docker/whalesay
特権
一部のコンテナを実行するには、追加の特権が必要です。また、既定の特権を削除することもできます。例を以下に示します。
# icm run -container sensors -image hello-world -options "--privileged"
# icm run -container fred -image hello-world -options "--cap-add SYS_TIME"
# icm run -container fred -image hello-world -options "--cap-drop MKNOD"
環境変数
Docker オプション --env を使用して、コンテナに環境変数を渡すことができます。これらの変数は、bash export コマンドと同様の方法によってコンテナ内部で設定されます。
# icm run container fred image hello-world options "--env TERM=vt100"
マウント・ボリューム
コンテナがホスト・マシン上のファイルにアクセスする必要がある場合は、Docker --volume オプションを使用して、コンテナ内にマウント・ポイントを作成できます。例えば、以下のように指定します。
# icm run container fred image hello-world options "--volume /dev2:/dev2"
これにより、ホスト上のディレクトリ /dev2 の内容が、コンテナ内のマウント・ポイント /dev2 で使用可能になります。
# icm ssh -command "touch /dev2/example.txt" // on the host
# icm exec -command "ls /dev2" // in the container
example.txt
ポート
Docker オプション --publish を使用して、コンテナ内のポートをホストにマップできます。
# icm run -container fred -image hello-world -options "--publish 80:8080"
# icm run -container fred -image hello-world -options "--publish-all"
外部からポートにアクセスする必要がある場合は、ホスト上の対応するポートを開く必要があります。これを行うには、以下のようにいくつかの方法があります。
-
Terraform テンプレート・ファイル infrastructure.tf を直接編集する。
-
icm ssh コマンドを使用してホストにコマンドを発行する。
-
クラウド・プロバイダのコンソールでセキュリティ設定を変更する。
また、同じホスト上で別のコンテナまたはサービスにマップされたポートと衝突しないようにする必要があります。最後に、オーバーレイ・ネットワークのタイプが host である場合、--publish はコンテナに影響を及ぼさないことに注意してください。
次の例では、AWS 用の Terraform テンプレートを変更して、ポート 563 (NNTP over TLS) 経由で着信する TCP 通信を許可します。