🤖

ローカル開発環境をmampからdockerに移した話(Docker-sync対応)

2021/01/17に公開

2020/2/10追記

なんかdocker-syncよりdocker on vagrantがいいぞ、とのことだったので環境作りました。
今度また記事書きます。とりあえず報告とレポジトリ投げときます
つhttps://github.com/Diwamoto/vagrant-lamp

2019/10/02追記

Docker-syncに対応させました。

やりたかった事、背景

・元々の開発環境はmampだった
・新しくプロジェクトを追加する時、スクリプト動かしてvhost記述して、みたいな感じでめんどかった
・port番号が8888のせいでめんどい時があった(設定次第で別にmampでもできる)
・上司にdocker環境を進められて、興味があった
・社内で使っていたdocker開発環境だと自分の環境ではxdebugが動かなかった。また、その環境はコンテナがプロジェクトファイルのhtdocsフォルダに紐つけられていて、プロジェクトを再配置するのがだるかった

じゃあもうdockerで自分で環境作っちゃえ!!!

実際にやった事

ローカル環境のhttps化(オレオレ) どうやらdockerだとオレオレダメみたい。。。。今度対応します->対応しました。
・VirtualDocumentRootを使ってvhostをワイルドカード化した(超楽になった)
・xdebug動くようにした
・php5とphp7切り替えられるようにした
・mailcatcherが好きじゃなかったのでmailhogつけた
importがめんどかったのでdbのデータもディレクトリ写すだけでできるようにした

dbのデータだけはなぜかできなかったので誰かプルリク投げてください。。。

いろんなサイト参考にしていいとこ取りしまくりました。。すみません。。。

レポジトリはgithubに公開してます。

docker-compose up -d で動きます。是非とも使用して、ガシガシ開発しましょう!!!

2019/10/02追記 Docker-sync対応

使っていただいている方からDocker for Mac環境で使用しているとファイルioがとても遅いとの情報をいただき、調べたところioを早くするためにdocker-syncなるものがあるようで、調べてきました

docker-sync とは?

通常、dockerコンテナとホストos間でvolumeをマウントしているとDockerとmacのファイルシステムの相性が悪くioがとても遅いという欠点があるそうです。
それはホストosにあるsrcに対してioを行なっているため遅いそうで、docker-syncはマウントする用のコンテナを立ち上げ、そことioを行うため爆速になるそうです。

試した結果。。。。

まじで爆速になりました。docker-syncしゅごい。

##やったこと

https://qiita.com/pocari/items/0340049742927f3a94b7
を参考にさせてもらいました。

上から実行すればオーケーです。

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

unisonはホスト<->dockerのミドルウェアです。ホスト->dockerのミドルウェアもあります。詳しくは調べてみてください。

次にoverride用のdocker-compose-dev.ymlと実際にsyncするvolumeの設定をするdocker-sync.ymlを追加しました

docker-compose-dev.yml
version: '2'

volumes:
  sync-volume:
    external: true

services:
  web:
    volumes:
      - sync-volume:/var/www/html:nocopy

ここで重要なのはvolumesのコンテナ側にnocopyオプションを使うことです。作者が言うんだから間違いないです。w

docker-sync.yml
version: '2'

syncs:
  sync-volume:
    src: '/Path/to/your/Projects'

srcにはあなたのプロジェクトフォルダを指定してください。

ここまで終わったらいよいよdocker-syncの出番です。docker-sync startで行っちゃってください!

##docker-sync start中にrubyのヘッダファイルがないよーとか言われた方

最初はなんかこんなの出ると思います

mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/include/ruby.h

これはrubyがinstallされてないから起こるようで、installしましょう。w

//xcode commandlinetoolはinstallされているものとします
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

後は明日の朝ごはんでも考えながらdocker-syncが動くのをゆっくり待ちましょう。

Projectフォルダにいっぱいあると相当時間かかりました。(自分の環境だと20分くらい)
ここで待てば今後待つことはないと考えて待ちましょう

UNISON 2.51.2 (OCAML 4.06.1) finished propagating changes at 23:47:09.99 on 02 Oct 2019
Saving synchronizer state
Synchronization complete at 23:47:10  (51 items transferred, 0 skipped, 0 failed)
real	37m 53.47s
user	3m 13.34s
sys	6m 10.06s
chown ing file to uid 0
39642ca3c32d338b0abaeb1bb654d44f20056bbaf89069dc58062d4f1b0c729a
     success  Sync container started
     success  Starting Docker-Sync in the background

みたいなのが出たら成功です。ようこそ快適docker環境へ。hello docker。

docker-sync の権限問題

docker-syncのvolumeはデフォルトではroot権限で作成されていることになります
なのでdocker-sync.ymlファイルでsync_useridを指定することでuidを変更して上げれば大丈夫です。

dockerのphp-apacheコンテナではphpの実行ユーザ名はwww-data,uidは33

なのでsync_useridに33を指定してあげました

追記

postgressqlにも対応しました

GitHubで編集を提案

Discussion