開発環境を
Vagrantからdockerに
移行してみた
雑兵MeetUp #6
Tsukasa Arima(@pyar6329)
Tsukasa Arima(@pyar6329)
・バックエンドエンジニア
・Ruby on Rails好き
・今年某会社に入社したばかり
・でもフロントエンドもやってるよ
アプリ開発しよう
よっしゃ、環境構築や!
アプリ開発する前に
つらい
特徴
・仮想マシン
・設定の自動化
・チーム間共有
vagrant
だめなとこ
・起動遅い
・プロビジョニング遅い
vagrant
docker
・コンテナ
・小さく閉じた環境
・windows, mac対応
dockerが速い理由
Guest OS
Hypervisor
Host OS/Kernel
Hardware
Apps Apps Apps
Host OS/Kernel
Hardware
container
Apps
container
Apps
container
Apps
dockerが速い理由
・ベースのイメージ
・機能追加毎に重ねていく
・同時にダウンロード
dockerが速い理由
・先にimageを作っておく
・imageをクラウドに保存
・実行時にダウンロード
速度比較
vagrant docker
起動速度 18分 3分
容量 500MB~1GB 10~200MB
・速い
・軽い
・本番でも使える
・便利
結論

Editor's Notes

  • #4 みなさん、webアプリ開発していたことありますか? 一般的には、Ruby on railsやexpressなど、フレームワークを用いて開発することが多いと思います。
  • #5 でも開発するときに色々なミドルウェアが必要になると思います。例えばRuby on railsの場合、フロントエンドではruby, postgresql、webサーバであるnginx、最近ではフロントエンドの部分にnodejsやgulpを用いてコンパイルしたりします。
  • #6 じゃあ仮想マシン使ってみようと考えます。最近だと開発環境にvagrantを使っている人が多いと思います。これはvagrantfileと呼ばれるものを用いて仮想マシンを作成し、環境を構築します。チーム間での共有がすぐにできるので便利です。
  • #7 でもvagrantを使っていても問題があります。それは色々遅いことです。例えば起動が遅く、OSのimageをダウンロードするのに時間がかかります。そして共通の設定を作るためにshellscriptやansibleを用いたりもしますが、これも時間がかかります。
  • #8 じゃあ最近聞くdockerはどうなんだろうと思って使ってみました。dockerはコンテナとよばれるものを用いて仮想環境を構築します。最近ではdocker for macやdocker for windowsと呼ばれるものが公開され、簡単に実行することができるようになりました。
  • #9  内部構造を比較すると、ゲストOSが存在しません。dockerはvagrantと違ってrailsだったらrailsコンテナ、mysqlだったらmysqlコンテナと役割ごとに分離して実行します。その役割ごとにimage(vagrantでいうbox)を作成します。
  • #10 じゃあそのdockerのimageはどうなっているかというと、ベースとなるOSのイメージを元に作成していきます。例えばdebianのOSを元に、imageを追加していきます。imageを作成するごとにレイヤーがどんどんつらなっていき、実行時にはこのレイヤーが並列にダウンロードされていきます。
  • #11 イメージを作成するためには、Dockerfileと呼ばれるものを先に作成します。これを用いてビルドしたものをdocker imageのクラウドサービスにアップロードします。つまりvagrantのansibleやshellscriptがこの時点で実行されるため、そのぶん実行時にかかる時間が減ります。
  • #12 実際に比較してみると、このようになっています。dockerは最も小さいもので20MBしかないため、イメージのダウンロードが速く、実行も速いです。