InterSystems IRIS コンテナのアップグレード
InterSystems IRIS コンテナのアップグレード
コンテナ化されたアプリケーションをアップグレードしたり、他の方法で変更したりする場合には、既存のコンテナを削除するか名前変更し、docker run コマンドで別のイメージをインスタンス化することによって、新規コンテナを作成して起動します。目的はアプリケーションを変更することであり、従来のアプリケーションならアップグレード・スクリプトを実行したりプラグインを追加したりして変更を行いますが、この場合の新規アプリケーション・インスタンスは前のものと実際には本来の関連がありません。代わりに、同じアプリケーションの各バージョンを表す、別々のイメージから作成される別々のコンテナ間の連続性を維持するものは、コンテナ外部の環境との間で確立される相互作用です。例えば、docker run コマンドの --publish オプションによってホストに対して公開するコンテナ・ポート、--network オプションによってコンテナを接続する先のネットワーク、アプリケーション・データを永続化するために --volume オプションによってコンテナ内でマウントする外部ストレージ場所などがこれに当たります。
永続的な %SYS を使用して InterSystems IRIS コンテナをバージョン 2021.2 以降にアップグレードする前に、既存の永続ディレクトリを、例えばこのコマンドで、ユーザ 51773 によって書き込み可能にする必要があります。
chown -R 51773:51773 root-of-durable-%SYS-directory
これを変更するには、多くの場合、root 特権が必要です。
InterSystems IRIS では、インスタンス固有データを永続化するための永続的な %SYS 機能によってアップグレードを可能にしています。アップグレードされたコンテナ内のインスタンスは、元のインスタンスの永続的な %SYS のストレージ位置を使用し、かつ同じネットワークの場所を使用する限り、実質的に元のインスタンスを置き換えて、InterSystems IRIS をアップグレードします。インスタンス固有データのバージョンが新規インスタンスのバージョンに一致しない場合、永続的な %SYS は必要に応じてデータをインスタンスのバージョンにアップグレードします (永続的な %SYS の詳細は、"永続インスタンス・データを保存するための永続的な %SYS" を参照してください)。
新規コンテナを起動する前に、元のコンテナを削除するか、停止して名前変更する必要があります。
ベスト・プラクティスとして元のコンテナを削除することをお勧めします。アップグレードの後に元のコンテナが起動すると、InterSystems IRIS の 2 つのインスタンスが同一の永続的な %SYS データを使用しようとして、データ損失など予測不能な動作が生じる可能性があるためです。
通常、アップグレード・コマンドは元のコンテナの実行に使用するコマンドと同じですが、イメージ・タグが異なります。以下の docker run コマンドでは、元のコンテナを作成した docker run コマンドと、アップグレードされたコンテナを作成するコマンドで異なるのは、version_number の部分のみです。
$ docker stop iris $ docker rm iris $ docker run --name iris --detach --publish 9091:1972 --volume /data/durable:/dur --env ISC_DATA_DIRECTORY=/dur/iconfig intersystems/iris:<version_number> --key /dur/key/iris.key
アップグレードするインスタンスが正常にシャットダウンされていないことを永続的な %SYS で検出した場合、アップグレードは続行できません。このようなインスタンスを起動する場合、データ整合性を確保するために手動で WIJ とジャーナルのリカバリを実行する必要があるためです。これを修正するには、"データ整合性ガイド" の “バックアップとリストア” の章の "自動 WIJ およびジャーナル・リカバリを使用しない InterSystems IRIS の起動" で説明されている手順を使用して、インスタンスを起動してから正常にシャットダウンする必要があります。コンテナが動作中の場合、これを行うには、コマンド docker exec -it container_name bash を実行してコンテナ内部でシェルを開き、説明されている手順に従います。ただし、コンテナが停止している場合は、データ整合性が損なわれるおそれがあるため、インスタンスを自動的に再起動せずにコンテナを起動することはできず、シェルを開くことができません。この場合、以下の手順を使用して、コンテナを再起動する前に正常なシャットダウンを行ってください。
-
元のコンテナの作成に使用したものと同じコマンドを使用して複製コンテナを作成します。これには、同じ永続的な %SYS の場所と同じイメージを指定することを含みます。ただし、iris-main -up false オプションを追加します ("iris-main プログラム" を参照してください)。このオプションにより、コンテナの起動時にインスタンスが自動的に起動しないようにします。
-
コマンド docker exec -it container_name bash を実行して、コンテナ内部でシェルを開きます。
-
"自動 WIJ およびジャーナル・リカバリを使用しない InterSystems IRIS の起動" で説明されている手順に従います。
-
リカバリと起動が完了したら、iris stop instance_name. (インターシステムズ提供のコンテナ内のインスタンスは、常に IRIS と名付けられます) を使用して、インスタンスをシャットダウンします。
-
元のコンテナを起動します。このコンテナは、複製コンテナ内で安全に回復された永続的な %SYS データを使用しているため、通常の方法で起動しても安全です。