汎用基本 IBM® MQ Docker イメージを作成したら、セキュアなアクセスを可能にするために独自の構成を適用する必要があります。 これを行うには、汎用イメージを親として使用して、独自の Docker イメージを作成します。 以下の手順は、最小のセキュリティー構成でサンプルのイメージを作成する方法を示しています。
手順
- 新規ディレクトリーを作成し、以下の内容を含む
config.mqsc
というファイルを追加します。
DEFINE CHANNEL(PASSWORD.SVRCONN) CHLTYPE(SVRCONN)
SET CHLAUTH(PASSWORD.SVRCONN) TYPE(BLOCKUSER) USERLIST('nobody') +
DESCR('Allow privileged users on this channel')
SET CHLAUTH('*') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(NOACCESS) DESCR('BackStop rule')
SET CHLAUTH(PASSWORD.SVRCONN) TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(CHANNEL) CHCKCLNT(REQUIRED)
ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) ADOPTCTX(YES)
REFRESH SECURITY TYPE(CONNAUTH)
上記の例では、ユーザー ID とパスワードによる単純な認証が使用されることに注意してください。 ただし、企業が必要とする任意のセキュリティー構成を適用できます。
- 以下の内容を含む
Dockerfile
という名前のファイルを作成します。
FROM mq
RUN useradd johndoe -G mqm && \
echo johndoe:passw0rd | chpasswd
COPY config.mqsc /etc/mqm/
ここで、
johndoe
は、追加するユーザー ID です。
passw0rd
は、元のパスワードです。
- 以下のコマンドを使用して、カスタム Docker イメージをビルドします。
sudo docker build -t mymq .
「
.
」は、先ほど作成した 2 つのファイルが含まれているディレクトリーです。
その後、 Docker はそのイメージを使用して一時コンテナーを作成し、残りのコマンドを実行します。
RUN コマンドで、johndoe
というユーザーを追加してパスワード passw0rd
を指定し、
COPY コマンドで、親イメージにとって既知の特定の場所に config.mqsc
ファイルを追加します。
- カスタマイズした新しいイメージを実行して、先ほど作成したディスク・イメージを含む新しいコンテナーを作成します。
新しいイメージ層では、実行する特定のコマンドを指定しなかったので、親イメージから継承されています。 親のエントリー・ポイント (このコードは GitHub で提供されています):
- キュー・マネージャーを作成する
- キュー・マネージャーを開始する
- デフォルトのリスナーを作成する
- 次に、 /etc/mqm/config.mqsc.から MQSC コマンドを実行します
以下のコマンドを発行して、カスタマイズした新しいイメージを実行します。
sudo docker run \
--env LICENSE=accept \
--env MQ_QMGR_NAME=QM1 \
--volume /var/example:/var/mqm \
--publish 1414:1414 \
--detach \
mymq
説明:
- 最初の env パラメーター
- 環境変数をコンテナーに渡します。これにより、 IBM IBM WebSphere® MQのライセンスに同意したことが確認されます。 LICENSE 変数を view に設定してライセンスを表示することもできます。
- IBM MQ ライセンスについて詳しくは、 IBM MQ ライセンス情報 を参照してください。
- 2 番目の env パラメーター
- 使用するキュー・マネージャー名を設定しています。
- volume パラメーター
- MQ が /var/mqm 上で実際に /var/example に書き込む必要があることをコンテナーに指示します。
- このオプションは、後で永続データを保持したままコンテナーを簡単に削除できることを意味します。 このオプションにより、ログ・ファイルの表示も簡単になります。
- publish パラメーター
- ホスト・システムのポートをコンテナーのポートにマップしています。 デフォルトでは、コンテナーはコンテナー自身の内部 IP アドレスを使用して実行されます。つまり、ポートを公開するには、具体的にポートをマップする必要があります。
- この例では、ホストのポート 1414 をコンテナーのポート 1414 にマップしています。
- detach パラメーター
- バックグラウンドでコンテナーを実行します。
結果
構成済みの Docker イメージを作成しました。docker ps コマンドを使用して、実行中のコンテナーを表示できます。 コンテナーで実行されている IBM MQ プロセスは、docker top コマンドを使用して表示できます。
重要: docker
ps コマンドの使用時にコンテナーが表示されない場合、コンテナーが失敗した可能性があります。 コマンド docker
ps -a を使用して、失敗したコンテナーを表示できます。
コンテナー ID は、docker ps
-a コマンドを使用して表示され、docker run コマンドを発行したときにも表示されます。
docker logs
${CONTAINER_ID} コマンドを使用して、コンテナーのログを表示できます。
一般的な問題は、 mqconfig が、 Docker ホスト上の特定のカーネル設定が正しくないことを示していることです。 カーネル設定は Docker ホストとコンテナーの間で共有され、正しく設定する必要があります ( UNIX and Linux® システムでのハードウェア要件とソフトウェア要件を参照してください)。
例えば、オープン・ファイルの最大数は、コマンド sysctl
fs.file-max=524288を使用して設定できます。