Red Hat Training
A Red Hat training course is available for OpenShift Container Platform
第31章 ファイルのコンテナーから/へのコピー
31.1. 概要
CLI を使用してコンテナーのリモートディレクトリーに/からローカルファイルをコピーできます。これは、バックアップと復元を実行するためにデータベースアーカイブを Pod にコピーし、Pod からコピーするのに役立つツールです。また、実行中の Pod がソースファイルのホットリロードをサポートする場合に、ソースコードの変更を開発のデバッグ目的で実行中の Pod にコピーするために使用できます。
31.2. 基本的な使用方法
ローカルファイルをコンテナーから/にコピーするためのサポートは、「CLI」に組み込まれています。
$ oc rsync <source> <destination> [-c <container>]
たとえば、ローカルディレクトリーを Pod ディレクトリーにコピーするには、以下を実行します。
$ oc rsync /home/user/source devpod1234:/src
または、Pod ディレクトリーをローカルディレクトリーにコピーするには、以下を実行します。
$ oc rsync devpod1234:/src /home/user/source
31.3. データベースのバックアップおよび復元
oc rsync
を使用して、データベースアーカイブを既存のデータベースコンテナーから新規データベースコンテナーの永続ボリュームディレクトリーにコピーします。
MySQL は以下の例で使用されています。mysql|MYSQL
を pgsql|PGSQL
または mongodb|MONGODB
に置き換え、『移行ガイド』を参照してサポートされているデータベースイメージに対応するコマンドを確認してください。この例では既存のデータベースコンテナーを使用していることを前提としています。
実行中のデータベース Pod から既存のデータベースをバックアップします。
$ oc rsh <existing db container> # mkdir /var/lib/mysql/data/db_archive_dir # mysqldump --skip-lock-tables -h ${MYSQL_SERVICE_HOST} -P ${MYSQL_SERVICE_PORT:-3306} \ -u ${MYSQL_USER} --password="$MYSQL_PASSWORD" --all-databases > /var/lib/mysql/data/db_archive_dir/all.sql # exit
ローカルマシンに対してアーカイブファイルのリモート同期を実行します。
$ oc rsync <existing db container with db archive>:/var/lib/mysql/data/db_archive_dir /tmp/.
上記で作成されたデータベースアーカイブを読み込む 2 つ目の MySQL Pod を起動します。MySQL Pod には固有の
DATABASE_SERVICE_NAME
がなければなりません。$ oc new-app mysql-persistent \ -p MYSQL_USER=<archived mysql username> \ -p MYSQL_PASSWORD=<archived mysql password> \ -p MYSQL_DATABASE=<archived database name> \ -p DATABASE_SERVICE_NAME='mysql2' 1 $ oc rsync /tmp/db_archive_dir new_dbpod1234:/var/lib/mysql/data $ oc rsh new_dbpod1234
- 1
mysql
はデフォルトです。この例ではmysql2
が作成されます。
適切なコマンドを使用してコピーされたデータベースアーカイブディレクトリーから新規のデータベースコンテナーにデータベースを復元します。
MySQL
$ cd /var/lib/mysql/data/db_archive_dir $ mysql -u root $ source all.sql $ GRANT ALL PRIVILEGES ON <dbname>.* TO '<your username>'@'localhost'; FLUSH PRIVILEGES; $ cd ../; rm -rf /var/lib/mysql/data/db_backup_dir
これで、アーカイブされたデータベースを使って 2 つの MySQL データベース Pod がプロジェクトで実行されていることになります。
31.4. 要件
oc rsync
コマンドは、クライアントのマシンでローカルの rsync
コマンドを使用します。この場合、リモートコンテナーにも rsync
コマンドがあることが必要になります。
rsync
がローカルまたはリモートコンテナーにない場合、tar アーカイブがローカルに作成され、tar
がファイルを展開するために使用されるコンテナーに送信されます。tar
がリモートコンテナーで利用できない場合にコピーは失敗します。
tar
のコピー方法は rsync
と同様に機能する訳ではありません。たとえば、rsync
は宛先ディレクトリーを作成し (存在しない場合)、ソースと宛先間の差分のファイルのみを送信します。
Windows では、cwRsync
クライアントが oc rsync
コマンドで使用するためにインストールされ、PATH に追加される必要があります。
31.5. Copy Source の指定
oc rsync
コマンドのソース引数はローカルディレクトリーまた Pod ディレクトリーのいずれかを参照する必要があります。個々のファイルは現時点ではサポートされていません。
Pod ディレクトリーを指定する場合、ディレクトリー名の前に Pod 名を付ける必要があります。
<pod name>:<dir>
標準の rsync
の場合と同様に、ディレクトリー名がパスセパレーター (/
) で終了する場合、ディレクトリーの内容のみが宛先にコピーされます。そうでない場合は、ディレクトリー自体がその内容すべてと共に宛先にコピーされます。
31.6. Copy Destination の指定
oc rsync
コマンドの宛先引数はディレクトリーを参照する必要があります。ディレクトリーが存在せず、rsync
がコピーに使用される場合、ディレクトリーが作成されます。
31.7. 宛先でのファイルの削除
--delete
フラグは、ローカルディレクトリーにないリモートディレクトリーにあるファイルを削除するために使用できます。
31.8. ファイル変更についての継続的な同期
--watch
オプションを使用すると、コマンドはソースパスでファイルシステムの変更をモニターし、変更が生じるとそれらを同期します。この引数を指定すると、コマンドは無期限に実行されます。
同期は短い非表示期間の後に実行され、急速に変化するファイルシステムによって同期呼び出しが継続的に実行されないようにします。
--watch
オプションを使用する場合、動作は通常 oc rsync
に渡される引数の使用を含め oc rsync
を繰り返し手動で起動する場合と同様になります。そのため、--delete
などの oc rsync
の手動の呼び出しで使用される同じフラグでこの動作を制御できます。
31.9. 高度な Rsync 機能
oc rsync
コマンドは標準の rsync
ほどコマンドラインのオプションを表示しません。oc rsync
で利用できない標準の rsync
コマンドラインオプションを使用する場合 (--exclude-from=FILE
オプションなど)、以下のように標準の rsync
の --rsh
(-e
) オプションまたは RSYNC_RSH
環境変数を回避策として使用することができます。
$ rsync --rsh='oc rsh' --exclude-from=FILE SRC POD:DEST
または以下を実行します。
$ export RSYNC_RSH='oc rsh' $ rsync --exclude-from=FILE SRC POD:DEST
上記の例のいずれも標準の rsync
をリモートシェルプログラムとして oc rsh
を使用するように設定して リモート Pod に接続できるようにします。これらは oc rsync
を実行する代替方法となります。