ビジネスとIT活用に役立つブログBlog


「Docker」を利用して作るモダンなPHPの開発環境

この記事をシェアする:

いまさらですが、Docker使っていますか?

アーティスでも少し前からDockerを利用して開発するようになりました。Dockerをご存じではない方に簡単に説明しておきますと、Dockerはすごく軽量な仮想化環境です。

仮想化技術といえばVMwareやVirtualBoxなどが有名でアーティスでも利用していますが、これらの仮想化技術はマシンレベルでの仮想化を行いますが、DockerはOSレベルでの仮想化を行います。
Dockerでの仮想化環境は、ホストのLinuxカーネルを共有しているのでオーバヘッドが小さく、既存の仮想化技術と比較した場合、軽くて速いことが特徴です。

そんな開発が捗るDockerなのですが、少しとっつきにくい部分もあるので、PHP7+Apacheで必要最低限の開発環境を作る方法を紹介してみたいと思います。
ここから先の内容は、ホストOS側にDockerがインストール済みである事を前提にしています。Dockerがインストールされていない場合は、書籍やサイトを参考にしてインストールしてください。

Docker Hubから元となるイメージを選ぶ

Dockerでコンテナ(仮想化環境)を構築するためには、コンテナの元となるイメージが必要です。
イメージを自分で構築することもできますが、公式のDocker Hubでは様々なイメージが公開されています。

今回は手軽に構築したいので公式のイメージを利用します。
下記のURLがPHPの公式リポジトリです。

https://hub.docker.com/_/php/

「Supported tags and respective Dockerfile links」の下部にズラズラとPHPのバージョンらしきものが書かれていると思います。これらはtagとよばれるもので、イメージの内容を表しています。

今回は、PHP7.0.21とApacheが一つのコンテナに含まれている「7.0.21-apache」を使うことにします。

イメージをビルドするためのDockerfileを作る

使うイメージが決定したので、実際にこのイメージをつかってコンテナを構築します。
まず、適当なディレクトリ(php7-apache)を作成して、その中に「Dockerfile」を作成します。

Dockerfileに以下の内容を書き込みます。

FROMは、ベースとなるイメージとタグを指定しています。
RUNは、ビルド時に実行されるコマンドです。
PHPモジュールは、docker-php-ext-installの後ろに追加して指定します。

今回は使う予定はないですが、インストールの確認用にpdo_mysqlを追加しています。
「docker build」コマンドを実行するとビルドが開始されて、自動的に指定したイメージがダウンロードされます。

「-t」は、ビルドするイメージにつけるリポジトリ名とタグを指定します。
「docker images」コマンドを実行してビルドされたイメージを確認してみます。

イメージをビルドできたのが確認できますね!

データの永続化のためにマウント用のディレクトリをつくる

コンテナの中のファイルは永続化されないので、ホスト側のディレクトリをコンテナ側にマウントする必要があります。
同じディレクトリ内にマウント用のディレクトリを作成しておきます。

このディレクトリをコンテナ側の/var/www/htmlにマウントします。現在のディレクトリ構造は以下のようになっています。

php7-apahce
— Dockerfile
— html

コンテナを起動してみる

準備ができたので、「docker run」コマンドを実行してコンテナを起動します。

「-d」は、バックグラウンドで実行するオプションです。
「-p」は、ポートの設定で、ホスト側:ゲスト(コンテナ)側で指定します。
「-v」は、volumeの指定で、マウントしたいディレクトリを、ホスト側のパス:ゲスト側のパスで指定します。
「–name」は、コンテナに「php7-apache」という名前を指定しています。(名前を指定していないと自動的に付けられます。)
最後の「php7_apache」で先程ビルドしたイメージ名(リポジトリ名)を指定します。

コンテナが起動しているのを確認するために、「docker ps」コマンドを実行してみます。

問題なく起動していますね!

コンテンツを置いて動作確認する

動作確認のために、phpinfo関数を実行するphpinfo.phpをコンテナ内に置いて実行してみます。
ホスト側のvolumeに指定したhtmlディレクトリ内にファイルを作成します。

適当なエディタで以下の内容を書き込みます。

ブラウザでホスト側のIPを指定するとphpinfoの実行結果が表示されます。

以上で簡単な開発環境が構築できました。

さいごに

Dockerのメリットとデメリットを確認しておきます。

メリット

  • ゲストOS側にそれぞれカーネルを持つ必要が無いため、リソースの消費が節約できる。(軽い)
  • ゲストOS側でカーネルを立ち上げる必要がないので、ゲストOSの起動が高速。(速い)

デメリット

  • ホストと違う種類のOSをゲストに利用できない。(LinuxのゲストにWindowsのホストを載せることはできない。)
  • カーネルは共有されるので個別の設定ができない。

アーティスでは、開発時はもちろん、バージョンが異なるミドルウェア環境での検証や、自動テストの実行環境としてDockerを利用して開発効率を高めています。

The following two tabs change content below.
アーティス

アーティス

創造性を最大限に発揮するとともに、インターネットに代表されるITを活用し、みんなの生活が便利で、豊かで、楽しいものになるようなサービスやコンテンツを考え、創り出し提供しています。
この記事のカテゴリ:

SNSで最新の情報を
受け取ることができます!