DockerでPHPの環境構築をする方法を解説
プログラミングの学習や実際の開発案件において、面倒な壁になりがちな【プログラムの実行環境の構築】。こういった環境構築の場面で新しい画期的な技術としてよく登場するようになったのがDockerです。
軽量でどこでも簡単にプログラムの実行環境を構築できるDockerは、開発案件における多くの問題を解決します。
今回はDockerを利用したPHPの開発環境の構築について実際のコマンドと共に解説していきます。
DockerでPHPの環境構築を行おう
PHPをはじめ、多くのプログラミング言語にはそれを実行する環境の構築が必要です。
プログラミング言語はそれを実行する環境を構築して初めて実行できるようになるものであり、場合によってはその環境構築が面倒であるとか、あるいは面倒ではないが自身のPCの環境をあまり汚したくないという理由で、プログラミング言語の環境構築が億劫になってしまうということもあるでしょう。
また、実際の開発案件において、その案件の開発を行うための環境構築が複雑であるがために、環境構築における個人ごとのミスが発生し、結果的に誰々のPC上ではまともに動くのに、誰々のPCでは上手く実行できないなどといったこともあるかと思います。こういった問題に対し、近年の開発ではDockerというプラットフォームを用いた環境構築が行われるようになっています。
Dockerとは
Dockerとは端的に言えば仮想環境です。
自身のPC上に自由に使用できる仮想環境を構築し、その上で指定したプログラミング言語やデータベース等の実行環境を作成する、というものです。
ただし従来の仮想環境と異なり、Dockerが構築する仮想環境は極めて軽量に動作するという特徴があります。
通常、仮想環境の構築・稼働はPCのメモリを多く必要とするものであるため、Dockerの登場以前は仮想環境上のアプリケーションの実行はPCに多くの負荷がかかるものでした。
しかし少ないリソースで素早く動作することができるDockerの登場により、仮想環境上での環境構築・アプリケーション実行が可能となったのです。
Dockerの利点
前述の通り、Dockerは少ないリソースで軽快に動作する仮想環境を構築します。
しかしその他にもDockerの使用には以下の利点があります。
- どこでも動く
Dockerをインストールすれば、あらゆる環境で動作します。デスクトップ上、物理サーバ上、仮想マシン上など、動作する場所を選びません。 - 移動が簡単
上述の通りDockerはどこでも動くため、必要に応じて配置する環境を簡単に移動させることができます。
テスト環境上のDockerの実行コンテナを簡単に他の環境に移動することができます。 - 開発環境の共有が容易
Dockerでどのような環境を構築するかについての共有が容易です。
従来の開発案件であれば、環境構築のための長々とした手順書を開発メンバー各々が熟読し、その通りに構築を行うというミスの起こりやすい手間のかかる方法を採るのが恒例でしたが、Dockerは【どのような環境を構築するか】について、コードで簡単に記すことができます。
開発案件において、同じ環境を大勢のPCに導入するために必要な手間が、長々とした手順書の共有ではなく、人間が間違えにくい【コードの配布とコマンドの指示】のみで済むようになるため、無駄な時間を削減し、かつ各々の環境構築の失敗を防ぐことができます。
DockerでPHPの環境構築を行う手順を解説
本項ではDockerでPHPの環境構築を行う方法について、Apache + PHP の環境構築を行うパターンと、Nginx + PHP の環境構築を行うパターンについて紹介していきます。
まず前提としてDockerの導入を行います。
Dockerの導入にはいくつかの方法がありますが、Mac, Windows共にDockerドキュメント日本語版ページで解説されている Docker Toolbox を用いた方法でDocker Compose(後述)を含めたDockerの導入が可能です。
上記導入ページの手順に従いDocker Toolboxのインストールを進めてください。インストールが終わると、DockerとDocker Composeの導入は完了です。
Apache + PHP の実行環境を構築する
まず、PHPの実行環境としてはもっとも基本的な Apache + PHP の環境をDockerで構築する方法について解説します。
これは極めて簡潔に行うことができます。
既にDockerが導入されている環境であれば、次のコードを実行するだけで環境構築が完了し、構築された仮想環境(Dockerコンテナ)が起動します。
docker run -d -p 80:80 --name php -v "$PWD":/var/www/html php:7.2-apache
このように、コマンドひとつのみで Apache + PHP の環境構築とその環境の立ち上げが完了します。
このコマンドの詳細は次の通りです。
- docker runコマンド
指定したDocker imageからコンテナを立ち上げる。
Docker imageとは、コンテナ(仮想環境)の土台でありここではphp:7.2-apache
を指定している。
このphp:7.2-apacheという名前のDocker imageはDockerHub(Docker image等の共有が可能なクラウドサービス)にPHP公式が公開しているものであり、docker runコマンドにより、このimageがDockerHub上から自動的に取得* 展開される。 - -dオプション
バックグラウンドでの実行を行う。 - -pオプション
ここではホストIPのport番号80から、Dockerコンテナのport番号80にアクセスできるようにしている(-p 外部からアクセスするときのport番号:コンテナ側のport番号)。 - --nameオプション
Docker imageを展開するコンテナの名前をこのオプションで指定する。
ここではphpという名前を指定している。 - -vオプション
ホストとコンテナのディレクトリのマッピングを行う。
ここではホストの環境変数$PWDで指定されるディレクトリとコンテナ内の/var/www/htmlをマッピングしている。
Nginx + PHP の実行環境を構築する
前項ではコマンドのみで Apache + PHP の環境を構築する方法を解説しました。
今度は Nginx + PHP の環境を【Docker Compose】を利用して構築する方法について解説します。
Docker Composeとは、複数のDockerコンテナの管理を行うためのもので、ymlファイルに記述した構成の通りに複数のDockerコンテナを立ち上げるというものです。
このDocker Composeの導入については、Docker ToolboxでDockerをインストールした際に同時に導入されているため、ここでは既に環境構築は不要です。
ymlファイルとはJSONのように構造化データをテキスト形式で書かれたファイルです。
【docker-compose.yml】という名前でテキストを保存して、次のようにDockerコンテナの構成を記載します。
version: '3' # docker-composeのバージョンを指定
services:
nginx: # サービス名
container_name: "nginx" # コンテナ名
image: nginx:1.14 # image名を指定。ここではDockerHub上のnginxイメージを指定している。
links: # ここで指定したサービス名とのリンクを作成する
- php # サービス名”php”と”nginx”を関連付ける
php:
container_name: "php"
image: php:7.2-apache
ports:
- '80:80'
volumes:
- ./html:/var/www/html
このようにdocker-compose.ymlを作成した後、このymlファイルを配置したディレクトリから以下のコマンドを実行することで、複数コンテナを同時に立ち上げることが可能です。
docker-compose up -d
まとめ
いかがでしたでしょうか。今回ご紹介した通り、Dockerを用いることで軽量な仮想開発環境を簡単に構築することが出来ます。また、Docker Composeを利用することで、複数のDockerコンテナの管理・連携を容易に行うことが出来ます。Dockerを積極的に利用し、手軽に仮想開発環境を構築できるようになりましょう。