docker on vagrant
Docker for Macが遅いので,Webのコード書くのはvagrant+ansibleで済ませていたのだけれども,
vagrant上にdockerを立てることでLinux上で走らせるのと同レベルの速度を得られるようなので,
docker on vagrantを立ててdockerに入門してみる。
Web開発していない人から見ると,なんでdocker使わないの? ってことなのだが,
気持ちは以下の通り. 工夫無しだと1度試したら2度とやりたくないレベルで使い物にならない.
Docker For Macが遅い:対策の実験
Macのdockerが遅いストレスから解放されよう
ansibleで自動化してたから手間に気づかなかったけど,
公式がイメージ配ってるんだから,手間なしなのはdocker.
本番環境と開発環境を揃えにくいかなとも思うけど,
AWS ECS的なものもあって,そもそもdockerだけで完結する世界が主流になりそうな感.
docker on vagrantで遅さを回避できるので,
言い訳してないでアップデートしていく..
なぜ遅いのか
Docker for Macは, AlpineLinuxベースのHyperkitVMの上で透過的にContainerを扱う.
Mac上でDockerコマンドを実行すると,透過的にHyperkitVM上に反映される.
Macの上で直接Containerが動いているのではなくこのVMの上でContainerを動かしている.
HostとGuestのファイルシステムをマウントする観点ではvagrantも同じで,
実際,VagrantfileでマウントオプションとしてNFSを指定したとしてもNativeよりかなり遅い.
ファイルシステムの対称性がある分,vagrantはHostとGuestをSyncする方法に手を入れやすく,
HostとGuestのファイルシステムをNativeと同等レベルの速度でSyncする手段を導入できる.
この仕組みによると, vagrantの上でDockerを動かすパフォーマンスがNative並に速くなる.
Mutagen
HostとGuestのファイルシステムをSyncするためにMutagenを利用する.
Overviewによると,Mutagenは双方向の同期ツールで,低レイテンシをうたっている.
もともとHostToGuestというよりはLocalToCloudの統合を目指している感じ.
キーボードを打ってから反映されるまでのラグが気になる,
とかOSが違う場合のアレコレ(permissionとかシンボリックリンックとか),とか,
そういうところの解消を目指している様子.
エージェントレス,TCP,でリモートへの導入コストが少ないのが良い.
VagrantにはMutagen over SSHの形を取る.
インストール手順
こちらが参考になりました。わかりやすく,手順通りやれば10分かかりません.
Vagrantを使う「Mac最速のDocker環境」を初心者向けに解説【遅いMac for Dockerを卒業】
とりあえず箱だけ作った.Laravelだと分かりづらいのでRailsで試したところ激しく速かった.
副次的な効果として、Macを汚さないのでお砂場にぴったり.