はじめに
PHPを学んでいる皆さん、いつもはどのような環境でコーディングしていますか?
PHPのバージョンを切り替えたり、依存関係を管理したり、開発と本番環境を一致させたりするのは面倒だと感じていませんか?
この記事を読めば、そんな問題を解決する手段として「Docker」を活用する方法が身につきます。
●Dockerとは
Dockerとは、一言で言うと「コンテナ型の仮想環境」を提供するプラットフォームのことです。
Dockerを使うと、開発環境を手軽にコード化し、他のマシンでも再現できるようになります。
それでは、具体的にどのような考え方がDockerには含まれているのでしょうか。
○Dockerの基本的な考え方
Dockerでは、アプリケーションとそれが動作するための環境を「イメージ」という単位で一緒にパッケージ化します。
そして、そのイメージを元に「コンテナ」という独立した実行環境を作り出します。
これにより、「この環境でなら動く」というアプリケーションの環境依存を大幅に軽減することができます。
●PHPとDockerの組み合わせの利点
Dockerは、PHPの開発においても大いにその力を発揮します。
例えば、複数のPHPバージョンを切り替えてテストしたり、異なるPHPモジュールを使い分けたりする場面でDockerを用いると、それぞれの環境設定をイメージとして作成し、使い回すことができます。
これにより、各環境を簡単に再現でき、チーム開発でもメンバー間での環境差異をなくすことができます。
では、具体的にはどのようにDockerを用いてPHPの環境を構築すればよいのでしょうか。
●Dockerを用いたPHP環境構築の5つのステップ
Dockerを用いたPHP環境構築は、大きく分けて下記の5つのステップから成ります。
このステップを順に進めていくことで、Dockerを用いたPHP環境構築を完遂することができます。
○ステップ1:Dockerのインストール
まず最初に行うのがDockerのインストールです。
Windows, macOS, Linuxといった主要なOSに対応していて、公式サイトから無料でダウンロードできます。
インストール方法はOSによりますが、公式ドキュメントが詳しく解説していますので参考にしてください。
○ステップ2:Dockerfileの作成
次に行うのが、Dockerfileの作成です。Dockerfileは、Dockerイメージの設定を記述するためのファイルです。
ここにPHPのバージョンや必要なPHPモジュール、実行するコマンドなどを定義します。
ここでは、以下のようなDockerfileを作成してみましょう。
このDockerfileでは、PHP7.4をベースとして、ComposerというPHPの依存関係管理ツールをインストールする設定を行っています。
このファイルをプロジェクトのルートディレクトリに”Dockerfile”という名前で保存します。
○ステップ3:Dockerイメージの作成
次はDockerfileからDockerイメージを作成する手順です。
ターミナル(コマンドプロンプト)を開き、Dockerfileが置かれているディレクトリに移動します。
そして次のコマンドを実行します。
このコマンドを実行すると、Dockerfileの指示に従ってDockerイメージが作成されます。
ここで -t
オプションで指定している php-composer:7.4
がイメージの名前(タグ)になります。
このコマンドを実行後、問題なくイメージが作成されれば、次のコマンドでイメージの一覧を表示し、作成したイメージがあることを確認します。
○ステップ4:Dockerコンテナの起動
次は、作成したDockerイメージからDockerコンテナを起動します。
コンテナの起動は次のコマンドで行います。
このコマンドにより、作成したイメージ php-composer:7.4
を元に新しいコンテナを作成し、そのコンテナ内でbashシェルを開きます。
ここで -it
オプションはインタラクティブモードでシェルを開くためのもので、--name
オプションでコンテナに名前を付けています。
コンテナが正常に起動したら、次はPHPアプリケーションの実行に進みます。
○ステップ5:PHPアプリケーションの実行
Dockerコンテナ内では、ホストマシンとは別の独立した環境でPHPアプリケーションを実行できます。
コンテナ内に移動したら、まずはテストのための簡単なPHPスクリプトを作成しましょう。
次のコマンドで新しい test.php
ファイルを作成します。
そして、作成した test.php
を実行します。
これで “Hello, Docker!” というメッセージが表示されれば、PHP環境のセットアップは成功です。
●DockerとPHPの7つの実践的応用例
ここからは、DockerとPHPを用いてより具体的な開発環境を構築するための7つの応用例をご紹介します。
○応用例1:データベースとの接続
まず最初に、PHPとデータベース(MySQLを例に)の接続を試みます。
ここでは、Docker Composeを使ってPHPコンテナとMySQLコンテラを同時に起動し、通信できるようにします。
そのために、次のような docker-compose.yml
を作成します。
この設定ファイルでは、PHPとMySQLの2つのサービスを定義しています。
PHPサービスでは先ほど作成したイメージを使用し、ホストマシンの src
ディレクトリをコンテナの /app
にマウントしています。
MySQLサービスでは、MySQLのイメージを使用し、ルートユーザーのパスワードを環境変数で設定しています。
また、データの保存先として mysql-data
ディレクトリを指定しています。
この設定ファイルを使えば、次のコマンドでPHPとMySQLのコンテナが同時に起動します。
そしてPHPからMySQLに接続するために、PHPのPDO拡張を使用します。
下記のPHPスクリプトはMySQLに接続し、データベースの一覧を表示する例です。
このスクリプトを実行すると、MySQLに接続しているデータベースの一覧が表示されます。
○応用例2:マルチステージビルド
次に、Dockerのマルチステージビルドを用いて、PHPのビルドとデプロイを効率的に行います。
マルチステージビルドでは、一つのDockerfile内で複数のイメージを作成し、
それぞれのイメージで異なる作業を行うことができます。
これにより、開発環境とプロダクション環境で必要となるパッケージを分けることが可能となります。
以下に、マルチステージビルドを用いたDockerfileの例を表します。
このDockerfileでは、まず開発環境のイメージを作成し、その中でComposerを使ってPHPのパッケージをインストールします。
そして、プロダクション環境のイメージを作成し、開発環境でインストールしたパッケージをコピーします。
このようにすることで、開発環境には必要なパッケージをすべてインストールし、プロダクション環境には実行に必要なものだけを提供することができます。
このDockerfileを用いてイメージをビルドし、それを用いてコンテナを起動すると、プロダクション環境に適した軽量なPHP環境が手に入ります。
○応用例3:Xdebugを使ったデバッグ
次に、PHPのデバッグを助けるツール、Xdebugをインストールします。
下記のDockerfileは、PHPイメージにXdebugを追加したものです。
このDockerfileでは、peclコマンドを用いてXdebugをインストールし、その後でPHPの拡張としてXdebugを有効にしています。
このイメージを用いてコンテナを起動すると、Xdebugが有効なPHP環境が手に入ります。
これにより、ブレークポイントを設定してステップバイステップのデバッグや、関数のコールスタックの表示などが可能となります。
○応用例4:PHP Unitでのユニットテスト
次に、ユニットテストのためのフレームワーク、PHPUnitをインストールします。
PHPUnitはComposerを使ってインストールすることができます。
まずは composer.json
ファイルを作成し、PHPUnitを開発用の依存関係として追加します。
次に、次のDockerfileを用いてイメージを作成します。
このDockerfileでは、Composerを用いてPHPUnitをインストールしています。
このイメージを用いてコンテナを起動すると、PHPUnitが利用可能なPHP環境が手に入ります。
これにより、ユニットテストを書いてコードの品質を保つことが可能となります。
○応用例5:継続的インテグレーション(CI)
継続的インテグレーションは、コードの変更を頻繁にメインラインに統合するプラクティスを指します。
CIのプロセスは、ビルド、テスト、メインラインへのマージというステップを自動化します。
Dockerはこのプロセスを容易にするツールとなります。
たとえば、GitHub ActionsとDockerを組み合わせることで、CIパイプラインを構築できます。
PHPプロジェクトに対するシンプルなCIパイプラインの例を紹介します。
このGitHub Actionsのワークフローでは、masterブランチへのpushやpull requestが作成されるたびに、Dockerイメージをビルドし、そのイメージを用いてPHPUnitのテストを実行します。
これにより、新しいコードが既存の機能に影響を与えず、期待通りに動作することを確認できます。
○応用例6:継続的デリバリー(CD)
継続的デリバリーは、ソフトウェアのリリース準備を自動化するプラクティスを指します。
CIと同様、DockerはCDのプロセスを助ける重要なツールとなります。
たとえば、DockerイメージをDocker Hubにプッシュすることで、ソフトウェアを継続的に配信することができます。
GitHub Actionsを用いたCDパイプラインの例を紹介します。
このGitHub Actionsのワークフローでは、新しいリリースが作成されるたびに、Dockerイメージをビルドし、そのイメージをDocker Hubにプッシュします。
これにより、新しいリリースが常に配信可能な状態であることを保証します。
○応用例7:マイクロサービスアーキテクチャ
マイクロサービスアーキテクチャは、大規模なアプリケーションを独立した小さなサービスに分割するアーキテクチャスタイルを指します。
各マイクロサービスは個別にデプロイとスケーリングが可能で、異なる技術スタックを用いることができます。
Dockerは、マイクロサービスの管理とデプロイを容易にします。
たとえば、Docker Composeを使って複数のコンテナを管理することができます。
PHPアプリケーションとMySQLデータベースからなるマイクロサービスアーキテクチャのDocker Composeファイルの例を紹介します。
このDocker Composeファイルでは、2つのサービス、すなわちPHPアプリケーションをホストするweb
サービスとMySQLデータベースをホストするdb
サービスを定義しています。
web
サービスはdb
サービスに依存しているため、Docker Composeはdb
サービスが完全に起動した後でweb
サービスを起動します。
このように、DockerとDocker Composeを使うことで、マイクロサービスアーキテクチャの管理とデプロイが大幅に簡略化されます。
一度Docker Composeファイルを作成すれば、docker-compose up
コマンド一つで全てのサービスを起動し、docker-compose down
コマンド一つで全てのサービスを停止することができます。
これは、マイクロサービスアーキテクチャを効率的に運用する上で非常に便利です。
まとめ
Dockerは、PHPの開発環境構築を助けるための強力なツールです。
この記事では、基本的な使用方法から、CI/CDパイプライン構築やマイクロサービスアーキテクチャの運用まで、多くの応用例を通じてその使い方を解説しました。
これらの知識を基に、PHPの開発環境構築をより簡易かつ効率的に行えるようになることでしょう。
また、Dockerの使い方を習得することは、今後のソフトウェア開発の現場において非常に役立つスキルとなります。
以上が、「Dockerを利用したPHP環境構築の完全ガイド: 5つのステップと7つの実践例」の内容となります。
このガイドが、PHPの開発環境構築にDockerを導入する際の参考になれば幸いです。