FrontEndBackEnd

docker-syncでファイルの同期を高速化する

投稿日:2020年8月11日 更新日:

はじめに

Docker for Mac を使っていると、大量にファイルが更新された際に、同期に時間が非常にかかることがあると思います。そこで、 docker-sync を使って同期を高速化する方法を紹介します。

docker-syncの導入

OSXの場合は、非常に簡単にセットアップすることができます。まず、下記のコマンドで docker-sync をインストールします。

次に、 .zshrc(もしくは.bashrc)に下記の設定を追加します。

設定ファイルの作成

docker-sync で使用する設定ファイルは下記のとおりです。

  • docker-composer.yml
  • docker-composer-dev.yml
  • docker-sync.yml
  • .env(任意)

docker-composer.yml

docker-composer.yml は、特別な設定は不要です。本番環境で実行するときと同じようにしてください。

docker-compose-dev.yml

docker-composer-dev.yml は、ボリュームとマウントのオーバーライドを定義します。

注意点として、必ず nocopy をつけるようにしてください(イメージのビルド中の内容とマージされてしまうため)

docker-sync.yml

docker-sync.yml は、同期に関する設定を定義します。

docker-sync.yml で設定できる項目については、後述します。また、こちらにサンプルがあります。

.env

バージョン0.2.0から環境変数がサポートされるようになりました。この環境変数は、 docker-composer.yml と同様に動作します。

デフォルトのファイルは .env ですが、 DOCKER_SYNC_ENV_FILE で変更することができます。

docker-syncを実行

docker-sync は docker-sync-stack start で実行します(他にも実行するためのコマンドがありますが、これだけで事足りると思います)

このコマンドを実行すると、同期サービスが起動し、その後、 docker-compose up のようなコンパイルスタックが起動します。

なお、 docker-sync.yml を変更した場合は、必ず docker-sync clean を実行してから、docker-sync-stack start を実行してください。

よく使う設定項目

docker-sync.yml で、よく使われるであろう設定項目をいくつか紹介します。

src

この項目は必須で、どのフォルダから同期するかを指定します。パスが / で終わっている場合、フォルダの内部のみが同期されます。そうでない場合は、親フォルダがトップレベルフォルダとして同期されます。

sync_strategy

同期方法を指定します。設定できる値は下記の通りです。詳細については後述します。

なお、macOSの場合はデフォルトで native_osx が設定されています。

  • native_osx
  • unison
  • rsync
  • native_linux

sync_excludes

除外されるパターンのリストです。 sync_excludes_type で形式が変わります。

または、

sync_excludes_type

設定できる値は下記のとおりです。なお、デフォルトは Name です。

  • Name
  • Path
  • Regex
  • none

 

Name は、ファイル、または、ディレクトリ名を指定します。

None は、 sync_excludes で個別に設定します。

同期方法

同期方法としては下記を選択できます。

  • native_osx
  • unison
  • rsync
  • native_linux

maxOS の場合、デフォルトで native_osx が選ばれます。それぞれの特徴について簡単に説明します。なお、native_linux については、選ぶ機会がないとおもいますので、割愛します。(詳しく知りたい方は、こちらをご覧ください)

native_osx

native_osx は、 OSXFS と Unison を併用します。ホストと host_sync 間の同期は OSXFS で行われ、 host_sync と app_sync の同期は Unison で行われます。これにより、 macOS 上での Unison のパフォーマンスの問題を改善しています。

unison

unison は macOS のほか、 Windows や Linux でも使用できます。Docker for Mac で使う場合は、 native_osx で良いでしょう。

rsync

rsync は非常に効率的に動作しますが、ホスト上のコードベースの変更のみがアプリコンテナに転送されます。そのため、アプリコンテナ上の変更はホストには同期されません。

さいごに

docker を高速化するための方法として、 docker-sync の使い方を紹介しました。同期の高速化については、他にも Mutagen ベースのキャッシュを使う方法もあり、こちらは Docker for Mac の設定を変更するだけ使えます(2.3.1.0以上)。機会があればこちらも試してみたいと思います。

おすすめ書籍

Docker実践ガイド 第2版 impress top gearシリーズDocker/Kubernetes 実践コンテナ開発入門プログラマのためのDocker教科書 第2版 インフラの基礎知識&コードによる環境構築の自動化

blog-page_footer_336




blog-page_footer_336




-FrontEnd, BackEnd
-

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

laravel logo

[Laravel] middlewareでHTTPリクエストの前後に処理を入れる

1 はじめに2 middlewareとは3 実装3.1 middleware作成3.2 コード実装4 middleware定義4.1 常に呼び出す4.2 特定のURLにアクセスした時のみ呼び出す4.3 ...

php logo

PHP入門 〜文字列と数値の操作〜

1 はじめに2 基本ルール2.1 開始と終了のタグ2.2 ホワイトスペース2.3 大文字と小文字の区別2.4 コメント2.5 変数の定義3 文字列の操作3.1 文字列の定義3.2 無駄なスペースを削除 ...

Vue.js入門その2〜Vueインスタンスってなんぞ?〜

1 はじめに2 Vueインスタンス3 プロパティとメソッド4 インスタンスライフサイクルフック5 フィルター6 算出プロパティ6.1 例文6.2 算出プロパティを使用した書き換え6.2.1 HTML6 ...

ウチのMaterialize事情

1 はじめに2 ボタン3 フォーム3.1 ラベルについて3.2 セレクトボックスについて3.3 ラジオボタンについて4 アラート5 フォント6 さいごに はじめに うちのチームでは現在、CSSフレーム ...

Rubyを使ってDialogflowのお勉強

1 はじめに1.1 環境2 とりあえずAPIで叩いてみる2.1 テスト用のIntentを作成2.2 Gemの設定3 Eventについて3.1 WELCOMEイベント3.2 パラメータ付きで叩く3.3 ...

フォロー

follow us in feedly

blog-page_side_responsive

2020年8月
 1
2345678
9101112131415
16171819202122
23242526272829
3031 

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。
Get it on App Store
Get it on Google Play