7.6. OpenShift Dedicated コンテナーへの/からのファイルのコピー
CLI を使用して、rsync
コマンドでコンテナーのリモートディレクトリーにローカルファイルをコピーするか、またはそのディレクトリーからローカルファイルをコピーすることができます。
7.6.1. ファイルをコピーする方法について
oc rsync
コマンドまたは remote sync は、バックアップと復元を実行するためにデータベースアーカイブを Pod にコピー、または Pod からコピーするのに役立つツールです。また、実行中の Pod がソースファイルのホットリロードをサポートする場合に、ソースコードの変更を開発のデバッグ目的で実行中の Pod にコピーするためにも、oc rsync
を使用できます。
$ oc rsync <source> <destination> [-c <container>]
7.6.1.1. 要件
- Copy Source の指定
oc rsync
コマンドのソース引数はローカルディレクトリーまた Pod ディレクトリーのいずれかを示す必要があります。個々のファイルはサポートされていません。Pod ディレクトリーを指定する場合、ディレクトリー名の前に Pod 名を付ける必要があります。
<pod name>:<dir>
ディレクトリー名がパスセパレーター (
/
) で終了する場合、ディレクトリーの内容のみが宛先にコピーされます。それ以外の場合は、ディレクトリーとその内容が宛先にコピーされます。- Copy Destination の指定
-
oc rsync
コマンドの宛先引数はディレクトリーを参照する必要があります。ディレクトリーが存在せず、rsync
がコピーに使用される場合、ディレクトリーが作成されます。 - 宛先でのファイルの削除
-
--delete
フラグは、ローカルディレクトリーにないリモートディレクトリーにあるファイルを削除するために使用できます。 - ファイル変更に関する継続的な同期
--watch
オプションを使用すると、コマンドはソースパスでファイルシステムの変更をモニターし、変更が生じるとそれらを同期します。この引数を指定すると、コマンドは無期限に実行されます。同期は短い非表示期間の後に実行され、急速に変化するファイルシステムによって同期呼び出しが継続的に実行されないようにします。
--watch
オプションを使用する場合、動作は通常oc rsync
に渡される引数の使用を含めoc rsync
を繰り返し手動で起動する場合と同様になります。そのため、--delete
などのoc rsync
の手動の呼び出しで使用される同じフラグでこの動作を制御できます。
7.6.2. コンテナーへの/からのファイルのコピー
コンテナーへの/からのローカルファイルのコピーのサポートは CLI に組み込まれています。
前提条件
oc rsync
を使用する場合は、以下の点に注意してください。
rsync がインストールされていること。
oc rsync
コマンドは、クライアントマシンおよびリモートコンテナー上に存在する場合は、ローカルのrsync
ツールを使用。rsync
がローカルの場所またはリモートコンテナーに見つからない場合は、tar アーカイブがローカルに作成されてからコンテナーに送信されます。ここで、tar ユーティリティーがファイルのデプロイメントに使用されます。リモートコンテナーで tar を利用できない場合は、コピーに失敗します。tar のコピー方法は
oc rsync
と同様に機能する訳ではありません。たとえば、oc rsync
は、宛先ディレクトリーが存在しない場合にはこれを作成し、ソースと宛先間の差分のファイルのみを送信します。注記Windows では、
cwRsync
クライアントがoc rsync
コマンドで使用するためにインストールされ、PATH に追加される必要があります。
手順
ローカルディレクトリーを Pod ディレクトリーにコピーするには、以下の手順を実行します。
$ oc rsync <local-dir> <pod-name>:/<remote-dir> -c <container-name>
以下に例を示します。
$ oc rsync /home/user/source devpod1234:/src -c user-container
Pod ディレクトリーをローカルディレクトリーにコピーするには、以下の手順を実行します。
$ oc rsync devpod1234:/src /home/user/source
出力例
$ oc rsync devpod1234:/src/status.txt /home/user/
7.6.3. 高度な Rsync 機能の使用
oc rsync
コマンドは標準の rsync
よりも少ないコマンドラインのオプションを表示します。oc rsync
で利用できない標準の rsync
コマンドラインオプションを使用する必要がある場合 (例: --exclude-from=FILE
オプション)、以下のように回避策として標準 rsync
の --rsh
(-e
) オプション、または RSYNC_RSH
環境変数を使用できる場合があります。
$ rsync --rsh='oc rsh' --exclude-from=<file_name> <local-dir> <pod-name>:/<remote-dir>
または、以下を実行します。
RSYNC_RSH
変数をエクスポートします。
$ export RSYNC_RSH='oc rsh'
次に、rsync コマンドを実行します。
$ rsync --exclude-from=<file_name> <local-dir> <pod-name>:/<remote-dir>
上記の例のいずれも標準の rsync
をリモートシェルプログラムとして oc rsh
を使用するように設定してリモート Pod に接続できるようにします。これらは oc rsync
を実行する代替方法となります。