1
/
5

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

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

Docker for Mac便利ですね!

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

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

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

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

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

なぜ遅いのか

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

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

docker-sync

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

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

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に載っているので参考下さい。


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エンジニア
急成長中子育てサービスの技術基盤をさらに進化させたいエンジニア募集!
【事業紹介】 (1)キミノスクール事業(https://kimino-school.com/) 首都圏で「キミノスクール」というブランドの新型の教育事業を展開しております。 「キミノスクール」は従来の学習塾とは異なり、「コーチング」や「アクティブラーニング」 といった手法を用い、生徒様が知識暗記だけではなく、知識の活用/応用といった、 これからの社会で求められるチカラを身につけることを支援いたします。 これにより、自分の人生を自分で決められる、主体性ある子どもを増やすことを目指します。 (2)子育て支援サービス事業(https://mamanoko.jp/) 「ままのて」という、妊娠妊活子育て中のママパパ向けに情報を届けるWebサービス/アプリ の開発運営を行っております。妊娠、子育てはどのご家庭にとっても分からないことが多く 不安になりやすいものです。「ままのて」はお子様の妊娠周期や年齢に合わせ、 その時々に必要となる情報を届け、ユーザーご家庭の子育てを支援いたします。 (3)教育事業者向けITソリューション事業(https://jyukumiru.com/) 「じゅくみ~る」という、塾・予備校探し支援ポータルサイトを運営しております。 当社は、Web集客に伸びしろのある塾・予備校業界に対して、本メディアへのご掲載、 その他のコンサルティングサービスを提供することにより、各塾の教室スタッフの方々が、 集客業務以外、すなわち生徒への指導という本質的な価値提供により多く時間を割けるよう 支援いたします。今後は集客以外の分野での支援にも手を伸ばし、多面的に教育事業者様方を 支援できるよう、事業開発を行ってまいります。 (4)自立型学習支援 受験予備校事業(https://www.takedajuku-chiba.com/) 「武田塾」という、高校生向け受験予備校の加盟店を運営しております。 授業を聞くだけではなく、やってみることで初めて習得できる、という武田塾の勉強に対する 考え方に共感し、千葉県内で7校を運営しております。
株式会社クルイト


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