はじめに
- ローカル上でファイル操作やソースコードの修正をした際に、Dockerで構築したサーバへ同期を行いたい場合に使います。
- Dockerには共有フォルダのマウントがありますが、Dockerサーバ上でパーミッションを変更できない制限があるので、rsyncコマンドを利用して同期をかけるようにしました。
- 前提として、公開鍵認証でのSSH接続が行えるものとします。
- あくまで、開発環境で利用していただくことを推奨します。本番環境などで実行すると予期せぬ動作になる可能性があります。
- なんかDocker関係なく、rsyncコマンドの説明みたいになってしまった。。。
- Webサーバの場合でしたら、この辺参考にしていただければと思います。
ファイルやディレクトリの同期
コマンド
/usr/bin/rsync --copy-links -avuz --delete -e "ssh -p ${PORT}" ${SHARED_DIRECTORY} ${USER}@${DOMAIN}:${DEPLOY_DIRECTORY}
入力項目
${PORT}
SSHのポート番号をしています。
${USER}
SSHのユーザ名をしています。
${DOMAIN}
Dockerで構築したサーバの接続先IP or ドメイン名を指定します。
${SHARED_DIRECTORY}
ローカル環境の共有元ディレクトリパスを指定します。
ディレクトリ配下のファイルをすべて指定したい場合は、そのディレクトリ名を含めたパスを指定します。
${DEPLOY_DIRECTORY}
Dockerで構築したサーバの共有先ディレクトリパスを指定します。
ディレクトリ配下のファイルをすべて指定したい場合は、そのディレクトリ名を含めないパスを指定します。
コマンドオプション
--copy-links
シンボリックリンクをコピーします。
-a
コピー元のディレクトリを再帰的にオーナー・グループ・パーミッション・タイムスタンプをそのままコピーします。
-v
コピーしているファイル名やバイト数などの情報を表示します。
-u
コピー元とコピー先を比較し、追加・更新されたファイル・ディレクトリのみをコピーします。
-z
通信を圧縮します。
-n
--dry-runオプションです。実行テストを行う際に用います。
--delete
コピー元で削除されたファイルをコピー先でも削除します。
-e
SSH接続でリモートサーバにデータをコピーする場合に使用します。