新時代のWeb開発現場はどうなる?Vagrant + Dockerで何が便利になるかまとめてみた | SiTest (サイテスト) ブログ

メニューボタン閉じるボタン

新時代のWeb開発現場はどうなる?Vagrant + Dockerで何が便利になるかまとめてみた

Vagrant + Ansible + Docker を組み合わせて、
最終的にたった1コマンドで開発環境を作り上げてしまう事をゴールにプロジェクトを作成していきます。

前回の記事では Vagranet + Ansible でマシンの初期設定を行いました。
今回はDockerを組み合わせる前に、Vagrantではどんなことが解決出来て、
逆にどんな事が未解決なのかを整理していきます。

Vagrant + Ansible で何が解決できたか

「この不具合ですが、僕のマシンでは再現しませんでした。」
いくら調べてもエラーが出ない、結局エラーを挙げた人のマシンも借りて検証し、
依存ライブラリのひとつがインストールされずに漏れている事を確認しました。
このエンジニアあるあるを予防することが出来ます。

スクリーンショット 2017-02-13 11.40.55

Vagrant と Ansible(プロビジョニングツール) により、
Vagrantfileとプロビジョンの設定を文書として持てるようになりました。
これにより、開発者同士が全く同じマシンで開発できます。

ジョインした新メンバーにVagrantやプロビジョニングツールの心得がある場合、
これらのファイルが環境構築の際のドキュメントとして効果的に働きます。

Vagrant + Ansible で解決できなかったこと

Vagrant は開発者同士の環境を統一することに成功しました。
しかし、本番環境を含めるとまた異なる問題が発生します。

スクリーンショット 2017-02-13 11.41.13

AWSやConoHa等の多くのクラウドコンピュータは、
独自のシステムにより専用のイメージが存在します。
結果少しずつ開発環境と本番環境のズレが生じてきます。

以下では、この本番環境とのズレを減らしていく方法を考えていきます。

案1: クラウドマシン内でVagrantを動作させる

クラウドマシンの中にVagrantとVirtualBOXをインストールしてしまい、
クラウドマシン内部で仮想マシンを立てて本番環境を構築します。

スクリーンショット 2017-02-13 11.41.22

これは机上では可といった手法ですが、実際の挙動としては不満が残ります。
VirtualBOXはホスト型ハイパーバイザーですので、仮想のCPUやメモリ、HDDを作って動作させるという制限からオーバーヘッドが多くのしかかります。

余程ランニングコストが潤沢にある現場ならともかく、
実際の現場ではランニングコストを抑える事が大前提となるはずです。

一度稼働させてしまえば終わりの本番環境では、このような問題を抱えたVagrantは選択される事はありません。
テストを入念に行いつつ今まで通り、手作業で本番環境を構築する方法が選択されるでしょう。

案2: Vagrantのプラグインを使う

Vagrant 自体は様々な仮想マシンを動作させるアプリケーションと組み合わせて動作させる事が出来ます。
前回の記事ではVagrantとVPSを組み合わせて利用しましたが、本番環境用のVagrantfileを作成して動かしてしまうという発想です。

スクリーンショット 2017-02-13 11.41.30

これはうまく行きそうです。
本番環境の設定はVagrantfileと同階層の「.vagrant」フォルダ配下に作成されますので、作業担当者にしか本番環境の状態を管理できない問題が残ります。
.vagrantフォルダ配下の設定ファイルは全て小さな文字列のファイルですので、丸ごとGitで管理してしまえば問題なく複数環境で同期がとれます。

しかし、VPSで開発どうやってするのかという問題が残ります。
開発メンバーがVimやEmacs、nanoを始めとするCLIエディタを使っているならともかく、ローカルでGUIベースのエディタやIDEを利用します。
その場合、rsyncやSFTPを用いてローカルと開発環境のソースコードを統一させる仕組みが必要になるでしょう。

案3: Vagrant と Docker を併用する

案1はVagrant環境を立ち上げた時のオーバーヘッドが大きいから断念という形に終わりました。
もしここで仮想マシンでありながら高速に動作するツールが登場すれば諦める理由が無くなります。

ここで、仮想マシンでありながら高速に動作するDockerが登場します。
詳細は既に沢山の方がまとめてくださっています。
今回はその中から「Dockerは速いのか?Dockerのパフォーマンスについて重要なことは何か? – ゆううきブログ」という記事をご紹介します。

スクリーンショット 2017-02-13 11.41.54

上図のように多少OSが異なっていても、
Dockerさえインストールされていれば全く同じ環境が保証されます。
これで「僕のマシンでは再現しませんでした。」が無くなり、スピーディーな開発が出来るようになります。

注意点としてDockerはLinuxを高速に動作させる技術が利用されています。
つまりLinux環境でしかDockerは動作しません(Unixで動いているMacでも駄目です)
皆さんの開発環境はWindowsやMacが多いかと思いますので懸念事項として残ります。

しかし、基本的にローカル開発環境は多くのトラフィックを捌く必要がないので、低速なLinuxマシンでも構いません。
一度Vagrant等でLinuxの仮想マシンを立ち上げてから、仮想マシンでDockerを動かして対応します。

おまけ

案3ではVagrantとDockerを併用してローカル環境を構築しました。
他の方法でもDockerを動かす方法がDockerの開発チームから公開されているのでご紹介します。

Docker Machine

Docker Machine はVagrantとDockerを組み合わせたようなツールになっています。
流れとしてはVirtualBox(変更可)でLinuxの仮想マシンを起動させ、
ローカルで入力したDockerコマンドを仮想マシンに流し込んで動作させるという仕組みのようです。

// VirtualBox で仮想マシンを作成
$ docker-machine create --driver virtualbox dev

// 設定情報を表示
$ docker-machine env dev
export DOCKER_TLS_VERIFY=yes
export DOCKER_CERT_PATH=/Users/seigo/.docker/machine/machines/dev
export DOCKER_HOST=tcp://192.168.99.100:2376

後はこれを.bashrc等に設定すればローカルのdockerコマンドがVirtualBox内で実行されるということですね。
コマンドは「Docker Machine を使って VirtualBox に Dockerホストを立てる – Qiita」から引用させて頂きました。

Vagrantと同じくVPSも利用することが出来るようなので、記事を紹介して締めます
ConoHaでDocker Machineを使う – Qiita

Docker for Windows(Mac)

これらのツールもDocker公式が提供しています。
Docker Machineは自分自身は仮想環境の作成ロジックを持たずに、外部ツールに委託するという流れでした。

Hyper-V(windows)、xhyve(mac)を使ってDockerコンテナを直接動かす…という訳ではありません。
これらの準仮想化の技術を用いて、軽量高速のLinux仮想マシンを立ち上げて、ホストマシンで入力したDockerコマンドを流し込むという流れのようです。

2016年7月29日に既に正式版が登場して居ますので、今後の開発はこれを利用した方法が主流になりそうですね。
この喜びよう…Windowsユーザーだった身としては痛い程よくわかります…
Windowsユーザ大歓喜!やっときたDocker Stable版!【手順と軽検証付き】 – This Is a Pen

まとめ

いかがでしたでしょうか?
今回は現状の整理ということで、何故Vagrantを使うのか、何故Dockerを使うのかという点に着目してご紹介しました。

次回はいよいよDockerを使って環境を作って行きます。
以上、「新時代のWeb開発現場はどうなる?Vagrant + Dockerで何が便利になるかまとめてみた」でした。
最後まで読んでいただきありがとうございました。

今すぐお気軽に
ご相談ください。

0120-315-465

(平日 10:00~19:00)

今すぐお気軽に
ご相談ください。

0120-315-465

(平日 10:00~19:00)

グラッドキューブは
「ISMS認証」を取得しています。

認証範囲:
インターネットマーケティング支援事業、インターネットASPサービスの提供、コンテンツメディア事業

「ISMS認証」とは、財団法人・日本情報処理開発協会が定めた企業の情報情報セキュリティマネジメントシステムの評価制度です。

いますぐ無料で
お試しください。

SiTest の革新的な機能を
お試しいただけます。
利用規約

お名前【必須】
メールアドレス【必須】
電話番号【必須】