技術ブログ

(技術系中心)基本自分用備忘録なので、あくまで参考程度でお願いします。

docker-syncについてのまとめ

docker-sync is 何?

Docker利用時にホスト側のディレクトリをマウントして使うと猛烈に遅いという現象が発生します。

Docker syncを利用することで速度改善することが可能になります。

docker-syncの仕組みとしては、 docker の -v で直接ホスト側のディレクトリをマウントするのではなく、rsyncやunisonの仕組みでホスト側のファイルをコンテナ側に転送しよう、というものです。

今回はホスト側のファイルのコンテナ転送方法にunisonを利用します。

unisonインストールはhomebrewを利用します。

brew install unison

同様に docker-syncもインストールします。

gem install docker-sync

参考: Installation — docker-sync 0.5.11 documentation

これでdocker-syncを使う準備は完了です。

docker-syncの設定方法

参考:docker-syncでファイルの同期を高速化する | RE:ENGINES

docker-composer.yml

docker-composer.yml は、特別な設定は不要です。

こちらは通常通り、docker-composer.ymlを作成してください。

docker-syncの設定は後述するdocker-sync.ymlに設定していきます。

version: "3"
services:
  hogeapp:
    build:
      context: .
      dockerfile: Dockerfile-hoge.local
  fugaapp:
    build:
      context: .
      dockerfile: Dockerfile-fuga.local

docker-composer-dev.yml

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

version: "3"
services:
  hogeapp:
    volumes:
      - hogeapp-sync:/var/www/hoge:nocopy (イメージのビルド中の内容とマージされてしまうためnocopyをつける)
  fugaapp:
    volumes:
      - fugaapp-sync:/var/www/fuga:nocopy
 
volumes:
  hogeapp-sync:
    external: true (docker-sync側で自動で作ってくれるボリュームをexternalとして宣言)
  fugaapp-sync:
    external: true

docker-sync.yml

docker-sync自体の設定は docker-sync.yml に書いていきます。

docker-sync.ymlは非常に優秀で、既存のdocker-compose.ymlを自動で読み取ります。

既存のdocker-compose.ymlに上書きしたい箇所をyamlで記載します。

version: "2"
syncs:
  hogeapp-sync:
    src: './app/hoge'
  fugaapp-sync:
    src: './app/fuga'

参考サイト

docker-sync by EugenMayer

docker-syncでホスト-コンテナ間を爆速で同期する - Qiita

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