GMOアドマーケティングSSP開発グループのn.yです。
早速ですが、皆さんはローカル開発環境をどの様に構築していますでしょうか?
Vagrant + Virtualboxを使用して仮想環境を作って開発してみたり、
XAMPP(MAMP)を使用してみたり、
はたまたそんなの面倒だと本番を直接イジる強者など他にも様々な方がいらっしゃるかと思います。
そこで今回はDockerによるローカル開発環境構築に関してお話出来ればと思います。
(Docker自体がどの様なものかを知りたい方はコチラのページなどが簡潔にまとまっていて分かりやすいですので是非)
まずDockerを使ってローカル開発環境構築すると何が美味しいの?っていう話をします。
- より本番に近い環境(むしろ本番そのままの環境)をローカルに構築出来る(これは非常に有り難い)
- 一度再現した環境は何度でも再現可能(おまけに一度作った環境は更に速く構築可能です)
- クラウドのサービスを利用しているとより便利さを実感できる(AWS, GCP(個人的はココが1番シンプルで相性良い気がする), Azure, Bluemixなどなど)
- DockerのGitHub的な存在であるDocker Hub(https://hub.docker.com/)が存在する(様々なイメージが準備されていてそれぞれのイメージのドキュメントも充実しています)
などなど。
ではマズい点、美味しくない点にも行ってみましょうか。
- そもそもDocker自体の学習コストが多少なりともかかる(新しいものはどれもそうですけど)
- Dockerはコンテナという概念を利用するので、Dockerに合わせた環境構築が必要(その為、既存のプロジェクトをDockerに置き換えようとすると色々とハマる)
といったところでしょうか。つまり使って損はしませんし、各社クラウドのサービスを見てると明らかにDockerを前提とした方向へ流れてる気がします。
と前置きをしたところで、タイトルのアレですよね。Virtualboxって必要ですか?って内容に入りたいと思います。
結論、Dockerでローカル開発環境するにあたっては必要ございません。と言うより必要なくなりました。
以前まではDockerで環境構築する際、MacであろうがWindowsであろうがローカルにLinux環境を構築する為にVirtualboxを内部的に利用していました。
なのでDocker Toolboxをダウンロードすると一緒にVirtualboxもダウンロードされる仕様でした。
勿論この状態でも使用可能ですし、開発する上では全然問題ありません。
では何が問題なのでしょうか?
そうです。スピードです。スピード大事ですよね。スピード出ないとイライラしますよね。
Docker Toolboxだと内部でVirtualboxを使用している為、環境の立ち上げるのにそこそこの時間を要しました。(PCのスペックにもよると思いますが)
そこでこれを解決すべく現れた救世主がDocker for Mac(or Windows)(https://docs.docker.com/docker-for-mac/)です!(これからはこちらがメインになっていく気がします)
これダウンロードして使ってみると実感して頂けるかと思うのですが、スピードはかなり速くなってます。おまけにPC起動と同時にDockerが使えるようになっているのでストレスフリーです。
※ちなみにWindowsだと10以降のようなので、残念ながらその方々はDocker Toolboxを使って下さい。
Docker for Mac(ここではMacを中心にお話いたしますが、基本的にはWindowsでも同じです)ですが、こちら何故スピードが速いかと言いますと、Yosemite以降で導入されているネイティブの超軽量の仮想化ソフトウェア(xhyve)を利用できるからなんです。
つまり、Virtualboxの代わりのものがあるから、わざわざ重たいVirtualboxを間に挟む必要が無いということなんです。
では試しにDocker for Macを使ってPHPで自身の設定を出力してみましょう。
①まずはDockerfileを作成します。
1 2 |
FROM php:7.0-apache COPY src/ /var/www/html/ |
一応中身を簡単に説明しておきますと、PHP7.0とApache連携済みのイメージ(このイメージだとLinuxのOSはDebian)から(お手軽なので)生成しています。UbuntuだったりCentOS、もしくはDockerゴリ押しの軽量イメージであるAlpine Linuxからも勿論環境を構築可能です。
そしてCOPYでsrc/ディレクトリの中身を/var/www/html/にコピーします。そのままですね。
②設定出力用のディレクトリとPHPファイルを作成
任意の場所でsrcディレクトリを作成し、その中でtest.php(設定出力用)を作成
1 2 3 |
mkdir src cd src vi test.php |
test.phpの中身は下記の通り。
1 2 |
<?php phpinfo(); |
現在、ディレクトリ構成はこの様な感じになっているはずです。
1 2 3 4 |
Dockerfile ┃ src/ ┣test.php |
③ではビルドしてデプロイしてみましょう!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
// Dockerfileと同じ階層のディレクトリでビルドします(-tはイメージ名(:タグ名)を指定します) docker build -t test-php-app . // ビルドしたイメージが作成されているか確認します。 docker images REPOSITORY TAG IMAGE ID CREATED SIZE test-php-app latest 36278fhu8 7 seconds ago 402.6MB // ではtest-php-appイメージから、以下内容でコンテナを作成&起動してみます。 // コンテナ名:test-running-app ポート:ホスト側 80番 → コンテナ側 80番 // ※コンテナをバックグラウンドで起動させる為、-dオプションをつけています。 docker run -d -p 80:80 --name test-running-app test-php-app // コンテナが起動しているかどうか確認してみます docker ps CONTAINER ID IMAGES COMMAND CREATED STATUS PORTS NAMES 326782yhjk test-php-app "apache2-foreground" 4 seconds ago Up 2 seconds 0.0.0.0:80->80/tcp test-running-app |
どうやら順調に起動しているようです!!
それではlocalhost/test.phpでブラウザからアクセスしてみましょう。
簡単ですよね?速いですよね?
まだまだ自分自身使いこなせていない箇所が多々ありますが、結局はLinuxの知識がある方が使えば「なるほど。なるほど。」と思える箇所が多々あるハズだと思います(自分はここら辺の知識が不足していたので初めは少し戸惑いました。)
以上、Virtualbox一先ずローカル開発環境では要らないよね?ってお話でした。