FrontEnd BackEnd

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 Authのパスワードリセット機能をカスタマイズする

1 はじめに2 準備2.1 Auth2.2 mailhog3 ユーザー登録とログイン4 パスワードリセットのカスタマイズ4.1 ルーティング確認4.2 view編集4.3 認証処理の編集5 リセット画 ...

php logo

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

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

Go言語

Go言語で使えるORMライブラリ

1 はじめに2 ORMライブラリ2.1 GORM2.2 SQLBoiler3 GORMを使ってみる3.1 導入3.2 migration3.3 insert3.4 select3.5 update3. ...

rails

RailsでAjax処理で画面を更新する

1 はじめに2 View(遷移元)の設定3 Controllerの実装4 View(遷移先)の実装5 参考6 さいごに はじめに RailsでAjax処理で画面を更新する方法を簡単に紹介します。 Vi ...

laravel logo

Laravelで非同期実行する

1 はじめに1.1 動作環境2 準備2.1 デーブルの作成2.2 .envの修正3 ジョブの作成4 ジョブのディスパッチ5 キューワーカーを起動6 より細かな制御6.1 特定のキューにディスパッチする ...

フォロー

blog-page_side_responsive

2020年8月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

アプリ情報

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