【作って納得!PHP入門】DockerでPHPの実行環境を作ろう

Docker

DockerでPHPの実行環境を作る方法を記載しています。
本記事では、dockerとdocker-composeコマンドを使用して、php, nginx, mysql, phpMyAdminが入っている環境を作成します。

PHPの実行環境について

PHPを実行する環境については、dockerを使用する他にもvagrant, mamp, xamppなどを使ったりローカルに直接インストールするなどの方法があります。
今回はdockerを使用した環境を構築します。

dockerのメリットとして、下記などがあります。
・直接インストールするわけではないので、仮想環境を削除すれば綺麗に消せてローカル環境を汚さない
・Dockerfileやdocker-compose.ymlを用意することで、環境構築がコマンドひとつで可能

構成するファイルさえ用意すれば、開発環境の共有が可能なので、おすすめです。

この記事の目標(作るもの)について

dockerを使用した環境で、phpが使えるようにして”Hello, World”が出力されるプログラムを作成してみます。
作成してアクセスすると、このように表示されます。
DockerのPHPでHello, World

phpMyAdminが立ち上がっているかも画面から確認できるので、立ち上げた後に確認してみます。
アクセスすると、このように表示されます。

DockerでphpMyAdminを表示

今回作成する環境について

今回作成する環境を簡単に説明します。

  • php
    phpを実装するためのに入れています。
    今回は、nginxと連携するためにphp-fpmを使用しています。

  • nginx
    nginxはhtmlやphpの出力結果をクライアントのブラウザ画面に表示するためのwebサーバーです。

  • mysql
    データを保存しておくためのデータベースです。
    phpなどのプログラミング言語からアクセスして送信されたデータを保存したり参照したりするために使います。

  • phpMyAdmin
    mysqlのデータをweb画面で見るためのツールです。
    SQLを発行することもでき、データベースのデータ変更なども可能です。

Dockerとは

dockerは使用しているパソコンに仮想環境を作成するためのツールです。
定義したファイルを元に実行することにより、簡単に開発環境を作成できます。

Macで実行環境を作る

Docker Desktop for Macをインストールする

Docker Desktop for Macを公式サイトのこちらからインストールします。

赤枠の箇所をクリックすると、ダウンロードが始まるのでダウンロードが終わるまで待ちます。

Docker for Macのダウンロード

ダウンロードが終わったあとは、ダウンロードしたdmgファイルをクリックすると、このように表示されます。
左から右にドラック&ドロップして、アプリケーションディレクトリにDockerを配置します。

あとは、アプリケーションディレクトリにあるDockerをクリックすると起動します。
このようにパソコンの右上にアイコンが表示されているので、動作していることが確認できます。

Windowsで実行環境を作る

Windows10 Proでないと、Docker Desktop for Windowsは使えないようでした。

Docker Desktop for Windowsをインストールする

Docker Desktop for Windowsを公式サイトのこちらからインストールします。

赤枠の箇所をクリックすると、ダウンロードが始まるのでダウンロードが終わるまで待ちます。

Docker for Windowsのダウンロード

ダウンロードしたファイルをインストールして、windowsの常駐しているアイコンの箇所にdockerのアイコンが出ていると完了です。

Dockerを使ってみる

インストールしたDockerを使用して、PHPの実行環境を作成します。

dockerコマンドが使えるか確認する

ターミナルを立ち上げたら、下記のコマンドを実行します。

$ docker -v

コマンドを実行すると、このようにバージョン情報が返ってきます。
問題なくバージョンが確認できればOKです。

$ docker -v
Docker version 20.10.2, build 2291f61

コンテナの構成ファイルのインストール

docker-compose.ymlなどのファイルをこちらに置いているので、git cloneするかダウンロードします。

任意のディレクトリにて、git cloneする場合は下記のコマンドを実行してください。

$ git clone https://github.com/YasuakiHirano/codelike_web_docker.git

実行したディレクトリ配下にcodelike_web_dockerディレクトリが作成されます。
cdコマンドで、移動して環境を立ち上げます。

$ cd codelike_web_docker

docker-composeコマンドで立ち上げる

codelike_web_dockerに移動した後に、下記のコマンドを実行します。

$ docker-compose -f .codelike_web_docker/docker-compose.yml up -d

すると、このようにインストールなどが走るので暫く待ちます。

$ docker-compose -f .codelike_web_docker/docker-compose.yml up -d
Creating network "codelike_web_docker_default" with the default driver
Building php
Step 1/8 : FROM php:fpm
 ---> 1e915dc40edc

// ---- 省略 ----

Creating codelike_web_mysql ... done
Creating codelike_web_phpmyadmin ... done
Creating codelike_web_php        ... done
Creating codelike_web_nginx      ... done

このように、4つそれぞれ、doneが出てきていたら環境構築完了です。

docker psコマンドを実行してみます。

$ docker ps

すると、このようにコンテナが立ち上がっていることが確認できます。(出力結果は一部省略しています)

$ docker ps
NAMES
codelike_web_nginx
codelike_web_phpmyadmin
codelike_web_php
codelike_web_mysql

立ち上がった環境を画面から確認する

立ち上がっていることはdocker psで確認可能ですが、実際にphpが動いているか確認してみます。

エディターを開いてください。一番簡単で有名すぎるプログラムを書きます。
下記の内容をindex.phpという名前で作成して、codelike_web_dockerディレクトリ配下に保存します。

<?php
echo "Hello, World!!";

保存したら、`http://localhost:8080`にアクセスしましょう。
このように表示されたら成功です。

phpMyAdminも画面で確認できるので、アクセスしてみましょう。
`http://localhost:8888`にアクセスしましょう。
このように表示されたら成功です。

このポート番号(8080、8888)は.codelike_web_docker/docker-compose.ymlに定義してあるため、この番号になっています。

docker環境の停止について

dockerの環境を使用しない場合は停止しておきましょう。
下記のコマンドを実行すると停止できます。

$ docker-compose -f .codelike_web_docker/docker-compose.yml down

また、起動し直す場合は下記のようにupコマンドを使用します。

$ docker-compose -f .codelike_web_docker/docker-compose.yml up -d

dockerコンテナへのログイン・ログアウト

dockerのphpコンテナにログインしてコマンドを実行する方法と、ログアウトについてです。
phpコマンドを使いたい場合などはログインして、使うことができます。

ログインする

下記コマンドでphpのコンテナに入ることが可能です。

$ docker-compose -f .codelike_web_docker/docker-compose.yml exec php /bin/bash

phpコンテナと、ローカルのindex.phpを置いたディレクトリ配下は共有しているので、同じファイルが配置されています。
下記のように、lsコマンドで確認すると表示されます。

root@f0635bc4aacf:/var/www/html# ls
README.md  index.php

phpのバージョンを確認するにはphpコマンドにvオプションを付けます。

root@f0635bc4aacf:/var/www/html# php -v
PHP 7.4.9 (cli) (built: Aug  6 2020 19:20:05) ( NTS )
Copyright (c) The PHP Group

ログアウトする

exitコマンドを使うと、ログアウトして元の環境に戻ることが可能です。

root@f0635bc4aacf:/var/www/html# exit
exit
xxx codelike_web_docker $

この環境のドキュメントルートについて

ドキュメントルートはwebサーバーのファイル外部に公開するファイルを置いている場所になります。
今回作成した環境でのドキュメントルートは`codelike_web_docker配下になります。

index.phpをcodelike_web_dockerに配下に置いて、実行しました。
index.phpという名前は特殊な名前で、nginxの設定で、そのディレクトリに来たら表示するようにしています。

なので、http://localhost:8080/でindex.phpが読み込まれました。
index.php以外の名前で、PHPを実行した場合は、URLにファイル名をつけるようにしましょう。

例えば、hello.phpという名前のファイルを作成して、ブラウザの画面で実行・表示したい場合ですが
http://localhost:8080/hello.phpとしてください。

その他のPHP入門のオススメ記事

そのほかに、このブログで書いているオススメ記事をご紹介します。

変数を使ってみよう

作った環境を使用して、PHPの変数を使ってみましょう。詳細は下記です。

PHP入門の記事一覧に戻る

こちらに他の情報もありますので、合わせてご確認ください。

コメント

  1. ワタル より:

    yasuaki 様

    Docker – PHP環境構築とても参考になりました。ありがとうございます!

  2. beginner より:

    お世話になります。
    docker compose.ymlを実行中に以下のエラーが出て止まってしまいました。
    お手数ですが、回避策をご教示いただければ幸いです。
    どうぞよろしくお願いいたします。

    path /mnt/c/Users/user name/web_docker/.codelike_web_docker/php/log is mounted on /mnt/c but it is not a shared mount.

    余談ですが、lamp環境を作りたくてdocker composeでインストールするも、mysqlだけが起動できずにいます。ネットでも同様の状況になる方がいらっしゃり、サイトを参考に何度もトライしましたができませんでした。。。途方に暮れていた時にこちらのサイトにたどり着きました。
    なんとか起動させたいです。
    よろしくお願いいたします。

    • yasuaki yasuaki より:

      ご覧いただきありがとうございます。
      エラーとしては.codelike_web_docker/php/logフォルダが共有されていないような感じですね。

      お使いのパソコンはWindowsでしょうか?
      こちらにあるように下記コマンドで、dockerボリュームを削除した後に再起動してみてはいかがでしょうか。

      docker volume rm -f 
      • beginner より:

        お世話になっております。

        ご連絡ありがとうございます。

        当方、win10Proを使用しております。

        昨日エラーが出た時点で、dockerのtroubleshootからReset to factory defaultsを実行してして空っぽの状態にしたのですが、これはdocker volume rm -fと同じことをしたと理解してよいでしょうか。

        先ほど再度docker-composeを実行し、インストールできました!

        この度はご教示くださり、ありがとうございました。

        • yasuaki yasuaki より:

          お世話になります。
          なるほど、Windowsでしたか。

          「Reset to factory defaults」は設定やデータなど全てを初期化してくれるようですね。
          docker volume rm -f [volume名]は、dockerで作成された指定したvolumeを削除するので、範囲がもっと狭い感じですね。

          とりあえず上手く動いたということで、よかったです😄

  3. ryotaro より:

    初めまして。お世話になります。

    docker-compose -f .codelike_web_docker/docker-compose.yml up -dの実行中に、Container codelike_web_php の部分のみエラーが出て上手く立ち上がりません。

    エラーの文章は下記の通りです。
    Error response from daemon: invalid mount config for type “bind”: bind source path does not exist: /Users/ryotaro/php_study/codelike_web_docker/.codelike_web_docker/php/log

    セキュリティ関連かなと思いdocker desctopやmacbookの設定をいじりましたがエラーは以前として同様です。お手数ですがご確認お願いいたします。

    • yasuaki yasuaki より:

      初めまして、ご覧いただきありがとうございます。

      「パスが存在しません」みたいなエラーですね。
      ディレクトリの権限まわりが怪しそうです。

      .codelike_web_dockerの配下にphpディレクトリを作成して、その中にlogディレクトリを作成してみてください。
      その後に.codelike_web_dockerに対して、chmod -R 777 .codelike_web_dockerなどとして権限を変更してみてください。

      これで立ち上がらない場合は、下記のようにフルディスクアクセスを設定してみてください。
      https://github.com/docker/docker.github.io/issues/4709#issuecomment-639596451

      以上になります、よろしくお願いします。

タイトルとURLをコピーしました