1
/
5

Docker for Macが遅い問題をdocker-syncで解決する

こんにちは。エンジニアの志村です。

Docker for Mac便利ですね!

Install Docker on macOS
Docker installation on macOS
https://docs.docker.com/engine/installation/mac/#/docker-for-ma

日本語でも様々な記事が出てきています。

私もVagrant + Dockerをメインに使用しておりましたが、ついにDocker for Macに乗り換えました。
弊社では、dev環境をDockerにしているのですが、Vagrant + Dockerの時は快適に開発が出来ました。
ただ、VMを使わなくなった途端にめちゃくちゃ動作が重くなりました。

docker-compose --service-port ●●という感じで、rails serverとwebpack-dev-serverを立ち上げるのですが、ブラウザからの読込が劇的に遅い…。seedデータ突っ込むのもめちゃくちゃ遅い…

フォーラムでも話題になっていますね。

File access in mounted volumes extremely slow, CPU bound
(Submitted this via email, but since reports are happening on the forum now, I'm sharing here as well!) Expected behavior File access in volumes should be comparable to access times in non-volumes, similarly to Linux installations of docker, or docker on
https://forums.docker.com/t/file-access-in-mounted-volumes-extremely-slow-cpu-bound/8076

私の環境でいうと、Vagrant + Dockerの時よりも、体感10倍近く速度が落ちました…。

なぜ遅いのか

File access in mounted volumes extremely slow, CPU bound
Any news on the issue, does Docker team know about it? Still same slow in rc4-beta20 :(, have to keep using rsync and other workarounds. This issue also doesn't seem to be in the list of known bugs/issues, i don't think Docker team might be looking into i
https://forums.docker.com/t/file-access-in-mounted-volumes-extremely-slow-cpu-bound/8076/158

このDockerの中の人の回答を見ると、osxfsを用いてファイルシステムイベントを検知・監視していることが主な原因っぽいですね。

勿論、その他環境により差異はありますが、ファイルシステムを監視する方法を替えれば解決できそうです。

docker-sync

ファイル同期で速度早いと良く言われているのがrsyncですね。
docker-dev-osxという選択肢もありますが、これはDocker for Mac未対応…

どうしようかなーとフォーラムを眺めているとdocker-syncなるものがありました。
フォーラムの中でも評価が良く、結構な人が使ってそうなのでdocker-syncを使用したいと思います。

docker-sync by EugenMayer
Developing with Docker under OSX is a huge pain, since sharing code into Docker containers make the code-execution about 50 times slower (depends on the solution). Testing and working with a lot of the alternatives made me pick the best of those, and comb
http://docker-sync.io/

docker-syncはRubyベースで書かれています。

docker-syncの使い方

1. docker-sync, fswatchをインストールします。

$ gem install docker-sync
$ brew install fswatch

ファイルの同期に関してはrsync, unisonが選択出来ます。
rsyncがホスト→ゲストの一方向の通信なのに対し、unisonはNFSのように双方向の通信が可能なようです。
今回はrsyncを使用します。
unisonに関してはまた記事を書ければと思います。

$ brew tap homebrew/dupes
$ brew install rsync

※ schema.rb, Gemfile.lock等、ゲスト(Docker)側で生成されるファイルに関してはdocker cpコマンドを使用するとホスト側に持ってくることが出来ます。

# Docker内のschema.rbをPC側に持ってくる
$ docker cp コンテナ:/var/www/db/schema.rb ./db/schema.rb


2. docker-syncの設定

docker-syncはymlファイルに設定を記述します。
Railsを触っている身としては普段から使用しているのでありがたいです。

docker-syncはDocker Composeを使用します。

production環境やstaging環境でもDockerを使用している方は、docker-compose.ymlの他に、開発環境用のymlファイルを用意する必要があります。
私は開発環境のみなので、docker-compose.ymlを直接編集してしまいます。

公式のwikiに載っているので参考下さい。

EugenMayer/docker-sync
docker-sync - Run your application at full speed while syncing your code for development, finally empowering you to utilize docker for development under OSX
https://github.com/EugenMayer/docker-sync/wiki


docker-sync.yml

docker-compose.yml

docker-compose.ymlにはversion1, version2と2種類の記述方法があります。
ここではversion2を使用します。

このような感じです。

環境によって差異があると思いますので、適宜調整をお願いします。
一番重要なのは、volumesのsync volumeの設定と、アプリケーション(Rails)側のコンテナでvolumesを指定する部分です。


3. docker-syncの起動

$ docker-sync start

もしくは

$ docker-sync-stack start

で起動します!


docker-sync-stack startの場合は、docker-sync startと同時にdocker-compose upも行われます。

私はpry-byebugを使用したいので、普段docker-compose run --service-port webで起動しています。
ターミナルを一枚docker-sync startに使用し、さらにdocker-compose run --service-port webを起動させるようにしています。

ベンチマークはとっていないのですが、Vagrant + DockerをNFSで同期させたのと同じ、もしくはそれ以上に早くなりました!
GUIで様々な設定が出来、VMとかも必要ないのでDocker for Macは便利ですね。
是非docker-syncを使って快適な開発環境を構築してみては如何でしょうか?

We're hiring!

Cluexではビジネスサイド、エンジニアサイド共にメンバーを募集しています!
お気軽にご連絡下さいませ!

Webエンジニア
急成長中子育てサービスの技術基盤をさらに進化させたいエンジニア募集!
◆MISSION◆ 世界の社会問題を解決する 21世紀となった現代でも尚、 世界中で飢餓や貧困、戦争が起こっています。 この地球上で起きるあらゆる社会問題を解決できるのは唯一、人です。 そして、人を創るのは「教育」です。 「教育」の改革こそが、世界中のあらゆる社会問題の解決と人類の更なる発展に繋がると考えています。 世界中の子どもたちが平等な教育を受ける社会。 一人ひとりの可能性を広げることができる社会。 クルイトは、そんな社会の実現を「教育」の力で目指します。 ◆VISION◆ 「教育」で世界を変える。 この大学に行けば安泰だ。この企業に入れば必ず幸せになれる。 そういった「王道ルートを通ればよい」と考えられていた時代から、 正解のない時代へと変化しつつあります。 選択肢が増え、幸せの形が多様化し、自分で考えてつかみ取らなければならない、 個人の力が試される時代です。 しかし、こんなにもどんどん世の中が変化しているのに、教育の形は戦後からほとんど変わっていません。 考え方も価値観も違うはずの生徒たちが一つの教室に押し込まれ、一斉に同じ授業を受けています。同質で、受動的に知識を詰め込まれる教育です。 私たちは、そんな教育課題をビジネスを通じてアップデートし、社会問題の解決につながる人材を育成していきたいと考えています。 ◆SERVISE◆ ・キミノスクール:「自律した子供を育てる」ことに特化した学習塾 ・武田塾    :「授業をしない」ことが特徴の大学受験予備校 ・ままのて   :子育て総合メディア/アプリサービス ・塾み〜る   :全国の学習塾検索Webサービス ◎「自律した子供を育てる」学習塾:キミノスクール 「キミノスクール」の一番の目的は、テストでいい点を取ったりすることではありません。勉強ができるようになることも、受験に成功することも、人生を豊かにするための一手段にすぎません。大切なのはその先、自立した大人になって社会へ飛び立ち、活躍できる人材になることです。 キミノスクールでは、従来とは異なったコーチングやアクティブラーニングといった手法を用いて、自ら未来を切り開くことのできる自律した子供の育成を目指します。 オンライン/オフラインの両方で学習塾を運営しています。 一般的な塾とキミノスクールの違いは「子供たちが自分で決める」ことを重要視している点です。「人生の目的」を持つことが重要であると考えており、既存の学習塾の概念とは異なった、新しい学習塾の在り方を追い求めています。 ◎「授業をしない」ことが特徴の大学受験予備校:武田塾 生徒の自学自習を支援する大学受験予備校です。偏差値を上げるためには「わかる・やってみる・できる」の3ステップが必要ですが、授業では「わかる」までしかやらないため、授業を受けるだけでは成績に結びつきません。やってみる・できるのステップまでフォローすることで、本当の意味での学習理解度を高めます。大学受験を通して、自分で考え、決断し、自走する力のある人を育てます。 偏差値が30台だった学生を1年で難関大学への逆転合格へ導いた例も多数あります。 ◎子育て総合メディア/アプリサービス:ままのて(子育て支援サービス事業) 「ままのて」は子育てに悩む全ての方へ寄り添うべく運営されているアプリです。 今後は機能を追加し、日本の子育てメディア/アプリシェアNo.1を目指しています。 子供の教育は、民間教育(学習塾など)・学校教育・家庭教育の三つの要素から成り立っています。 「ままのて」は家庭でのよりよい教育のヒントを提供出来るようにするために開発されました。家庭では子供が最も多くの時間を過ごすため、民間・学校の教育がより良いものになったとしても、家庭教育が疎かである場合、最大限の効果は発揮できないと考えています。そのため、育児/教育メディアを運営を行い、家庭教育へのアプローチを続けています。 ◎全国の学習塾検索アプリサービス:塾み〜る(教育事業者向けITソリューション事業) 「塾み〜る」は全国の小中高生/保護者と学習塾を繋げるためのサービスです。 全国の学習塾へ「塾み〜る」への情報掲載を依頼するだけでなく、クルイトがこれまで得た学習塾経営ノウハウを活かして、日本の教育事業をアップデートするべくさまざまなご提案も行います。具体的には、Webマーケティング、その他のコンサルティングサービスを提供することにより、その学習塾がより良くなっていくような提案をしております。 幅広いソリューションをもって幅広いソリューションをもって、ゆりかごから受験までをフルサポートします。
株式会社クルイト


PM・Webディレクション
IT×教育で教育格差を無くす!事業を加速してくれるWebディレクター募集
Cluexは、 「IT×教育で世の中を変える」をテーマに設立されました。 世界では貧困、飢餓、紛争、資本主義による格差が起きています。世界に存在するこういった大きな問題を解決していくのは人です。そして人を育てる教育こそが世界の不平等を救うことになります。 現在は第一弾として、"子育ての情報格差を無くす"ためにママ向けメディアのmamanokoを開発しています。 https://mamanoko.jp/ 利用者は「妊娠、出産を控えるプレママ、子育て中のママ」で、主に25~40歳の240万人を超える女性ユーザーが愛用中。 「子育て」に必須なサービスとして、今最も注目を集める「ママ」向け媒体として急成⻑し続けています。
株式会社クルイト
株式会社クルイトでは一緒に働く仲間を募集しています
11 いいね!
11 いいね!
同じタグの記事
今週のランキング