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


関連記事

markdownで書けるドキュメントツールのGitbookを試す

1 はじめに2 Gitbookとは3 nvm4 node.jsインストール5 Gitbook導入5.1 インストール5.2 初期化5.3 ローカルでブラウザから確認6 作成と編集6.1 見出し編集7 ...

Go言語

Go言語、ゴルーチン(goroutine)で並列処理を

1 はじめに2 ゴルーチン2.1 go文2.2 ゴルーチンの終了条件2.3 WaitGroup3 チャネル3.1 チャネルの型3.2 チャネルの生成3.3 チャネルの送受信3.4 チャネルとゴルーチン ...

Vue.js入門その4〜TODOアプリにサーバーサイドを追加してみる〜

1 はじめに2 準備2.1 今回作成したいもの2.2 環境構築3 サーバーサイド3.1 DB3.2 メモ:rails generateで余分なファイルを生成しない3.3 作成したファイル4 ビューの作 ...

tailwindcss

Tailwind CSSの基礎とVue.jsへの導入

1 はじめに2 Tailwind CSSとは2.1 utility class3 Bootstrapとの比較3.1 柔軟性3.2 コード量3.3 学習コスト3.4 ファイルサイズ3.5 その他4 なぜ ...

rails

Shrineを使って画像をアップロードする

1 はじめに2 Shrineとは2.1 簡単な説明2.2 作者2.3 特徴3 下準備3.1 Gemを追加3.2 初期設定3.3 テーブルを作成する4 実装4.1 Uploaderの実装4.2 Mode ...

フォロー

blog-page_side_responsive

2020年8月
 1
2345678
9101112131415
16171819202122
23242526272829
3031  

アプリ情報

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