LoginSignup
13
7

More than 5 years have passed since last update.

Docker for Mac で遅いファイルマウントを何とかする

Last updated at Posted at 2017-05-31

前提

  • docker-compose を使用していること。
    ※composeを使用していなくてもdockerコマンドでsyncできます・・・
  • 開発環境のみで実施。

何ができる?

ファイル同期ができる。

- 片方向(rsync)
[ホスト] -> [コンテナ]

- 双方向(unison)
[ホスト] <-> [コンテナ]

なぜやるの?

開発環境でDockerを使用しているが、ソースコードをマウントさせているため、
パフォーマンスが著しく悪い。
※特にRailsプロジェクト

[参考]
File access in mounted volumes extremely slow

なのでコンテナ内に直接ソースコードを同期させて置きたい。

どうやるの?

Step1

必要なパッケージのインストール

$ gem install docker-sync
$ brew install fswatch
$ brew install unison

Step2

docker-sync.ymlを作る

[unisonを使用する場合]

version: '2'

syncs:
  hoge-sync:
    src: '/Users/www/'

同期されるホストの元ファイルディレクトリを指定してあげる。
※unisonがデフォルトなので明示的指定はしていない。

[rsyncを使用する場合]

version: '2'

syncs:
  hoge-sync:
    src: '/Users/www/'
    sync_host_port: 10871
    sync_host_ip: '127.0.0.1'
    sync_strategy: 'rsync'
    sync_userid: '501'
    watch_strategy: 'fswatch'

Step3

〜 さようならマウント 〜
docker-compose.ymlの記述をちょっと変えてあげるだけ。

volumes:
- /Users/www:/var/www

volumes:
- "hoge-sync:/var/www:rw"

末尾に以下を追加

volumes:
hoge-sync:
external: true

Step4

これで起動する!
どちらも同じなのでお好みで・・・

[Pattern1]

$ docker-sync start
$ docker-compose up -d

[Pattern2]

$ docker-sync-stack start

番外編

docker-composeを使用していなくてもdocker-syncだけで使えることに気づいた。

「docker run -v /User/www:/var/www」などで実行している場合、
「docker run -v hoge-sync:/var/www:rw」とするといけました。

追記

docker-sync.ymlに転送先のユーザ指定をするとさらに捗るかも!

sync_userid: '1234'

13
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
7