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


関連記事

js

Vue.jsをTypeScriptで安全に開発するためのtsconfig.json

1 はじめに1.1 開発環境1.2 プロジェクト作成時点のtsconfig.json2 include3 exclude4 compilerOptions4.1 コンパイル系オプション4.1.1 ta ...

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

Shrineでアップロードする際に画像を加工する

1 はじめに2 アップロードする画像のリサイズ2.1 Gemを追加2.2 Uploaderの修正3 サムネイルを作成する3.1 Uploaderの修正3.2 サムネイルを表示する4 バリデーションの追 ...

もうすぐ登場!Vue 3の変更点まとめ

1 はじめに2 仕様変更2.1 複数のv-modelが定義可能に2.2 template直下に複数のタグを記述可能に2.3 開始処理がcreateAppに2.4 scoped cssの仕様変更2.5 ...

Vue.js入門その7〜セレクトボックスを動的に変更してみる〜

1 はじめに1.1 サンプル2 とりあえず作ってみる2.1 ソースコード2.2 セレクトボックスにv-modelでバインド2.3 <option>はv-forでリストレンダリング2.4 メ ...

フォロー

follow us in feedly

blog-page_side_responsive

2020年8月
 1
2345678
9101112131415
16171819202122
23242526272829
3031 

アプリ情報

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