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'