engineers_blogこんにちは。エンジニアの森田です。MFクラウド会計の開発を担当しています。今月入社したばかりなのですが、実は入社前からDockerで開発環境を作ろうと心に決めていました。下記のような問題によく悩まされていたからです。installがこける。Windowsを使っているデザイナさん向けに動作環境を作るのが大変。ブランチを切り替えるとDBのスキーマが違うため動かない。ライブラリを新しいものに差し替えたら既存のアプリがおかしくなる。そこで実際にDockerを導入してみました。今回はDocker導入に際しての問題とその対応について紹介します。発覚した問題と対応コーディングの際はMac上のエディタを使いたいので、Dockerのディレクトリ共有機能を使ってコンテナとホストでプロジェクトのディレクトリを共有していたところ、Webサーバのレスポンスがめちゃくちゃ遅くなってしまいました。(VirtualBox上のDockerだから?)また、ファイルを更新してもRailsが認識してくれず、Railsを再起動しないと反映されない状態になりました。共有を諦めて仮想環境上でファイルを更新すればいいのですが、それはそれでいろいろ制限があります。そこで、Dockerの共有機能を使うのではなく、コンテナ側にsshdを立てて、ホスト側(Mac)にlsyncdをインストールして使うことにしました。それにより、ホストとコンテナのファイルがほぼリアルタイムに同期され、Webサーバのレスポンスも快適になり、ファイルの更新も反映されるようになりました。快適に開発できるようになったので、設定を共有したいと思います。雅人様が素晴らしい記事を上げてくださっているのでそちらを参照してください。入門ハンズオン資料DockerインストールdockerのインストールはMacでもWindowsでもboot2dockerを使えば簡単なので割愛させていただきます。コンテナ作成から起動までプロジェクトで必要なライブラリを含めたImageを作成するためにDockerfileを作成します。"-D"]上記のDockerfileはCentOS上でrubyアプリ(Rails等)を作成するための環境用です。#ホスト(Mac)のid_rsa.pubを記述lsyncdインストールMacのrsyncが古くてlsyncdが動かないため、rsyncを置き換えています。migration等でファイルを作成、更新した場合は自分でホスト側に反映する必要があります。/dev/nullを実行するとscreenが使えるようになります。まとめDocker最高。今流行りのDockerを活用しつつ、慣れることもできるのでオススメです。7/12追記docker-osx-devを使うといいよ教えてくださった方がいました。docker-osx-devのページにBoot2Dockerのディレクトリ共有で使うVirtualBoxのvboxsfに関して下記のように記載されていました。1.ファイルアクセスが10〜20倍遅い2.トリガーが壊れているため、inotifyによるファイルの更新を検知できない。wayで同期を取るようデーモンを起動する仕組みになっています。仮想マシンとコンテナ間はdockerの-vによるディレクトリ共有機能を使います。lsyncdによる同期とは違って、コンテナにrsync,sshdをインストールする必要がないです。docker-osx-devを実際に使ってみましたが、簡単にインストールでき、問題なく動作しました。docker-osx-devを再起動したところ、下記のようなワーニングが出力されました。supported同期自体は動くのですが、下記のようにマシン負荷が高まりつづけてしまいます。162.6仮想マシン内を見ると、同期指定していないディレクトリまでコピーされていたりしてちょっと謎です。記事にあるlsyncd形式にすると、下記のメリットもあるので、個人的にはlsyncd形式でいこうかと思っています。run実行後以降も選択できる同期していないディレクトリのファイルもホスト側で編集できる。(GUIのscpツールやエディタのリモート編集etc)最後にマネーフォワードでは、Railsエンジニアを募集しています。