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


関連記事

Vue on Rails で作ったアプリを振り返ってみる

1 はじめに2 全体的なこと2.1 ディレクトリ構成2.2 CSSフレームワーク2.3 Capistranoでのデプロイ3 axiosのラッパー4 Vuex4.1 ログインの状態管理5 Router6 ...

Go言語

Go言語でGinkgoを利用してBDDしてみた

1 はじめに2 BDDとは3 Ginkgoについて3.1 Ginkgoの概要3.1.1 Describe3.1.2 Context3.1.3 It3.1.4 JustBeforeEach3.1.5 B ...

rails

さらば「rails migrate」、よろしく「ridgepole」

1 はじめに2 Ridgepoleとは3 rails migrateではなく、Ridgepoleを選定した理由4 rails migrateからRidgepoleへの移行手順5 capistrano3 ...

rails

Shrineをモデルに関連付けないで使用してハマったこと

1 はじめに2 アップロード時にリサイズする3 アップロード時のバリデーション4 アップロード時に古いファイルを削除する5 さいごに はじめに ShrineはRailsでのアップロードを簡単に行えるよ ...

laravel logo

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

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

フォロー

follow us in feedly

blog-page_side_responsive

2020年8月
 1
2345678
9101112131415
16171819202122
23242526272829
3031 

アプリ情報

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