ローカル開発環境をmampからdockerに移した話(Docker-sync対応)
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しゅごい。
##やったこと
を参考にさせてもらいました。
上から実行すればオーケーです。
$ gem install docker-sync
$ brew install fswatch
$ brew install unison
unisonはホスト<->dockerのミドルウェアです。ホスト->dockerのミドルウェアもあります。詳しくは調べてみてください。
次にoverride用のdocker-compose-dev.ymlと実際にsyncするvolumeの設定をするdocker-sync.ymlを追加しました
version: '2'
volumes:
sync-volume:
external: true
services:
web:
volumes:
- sync-volume:/var/www/html:nocopy
ここで重要なのはvolumesのコンテナ側にnocopyオプションを使うことです。作者が言うんだから間違いないです。w
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にも対応しました
Discussion