docker-compose.ymlファイルだけでphp環境を簡単に構築できないかと思い、調べて見ました。(残念ながらdocker-compose.ymlファイルだけではダメでしたが...)
リスペクトな記事
この記事を作成するにあたり、参考にさせていただいた記事です。
本件、同様の既存記事を踏襲する内容となります。
DockerによるPHP開発環境構築(PHP + MySQL + Nginx)
Docker + Nginx + PHP-FPM なら40秒くらいで環境を準備できる docker-compose が楽しくなってきました。
したいこと
dockerを使って、ローカル環境でphpを使いたい
したこと
1) docker-compose.yml の用意
下記、コピペでOKです
version: "3"
services:
db:
image: mysql:5.7
volumes:
- ./db/mysql:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root_pass_fB3uWvTS
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
restart: always
ports: ["8888:80"]
depends_on: ["db"]
environment:
MEMORY_LIMIT: 3G
UPLOAD_LIMIT: 3G
php:
image: php:7.4-fpm
volumes:
- ./nginx/html:/usr/share/nginx/html
- ./php/php.ini:/usr/local/etc/php/conf.d/php.ini
depends_on: ["db"]
nginx:
image: nginx:latest
volumes:
- ./nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
- ./nginx/html:/usr/share/nginx/html
restart: always
ports: ["8080:80"]
depends_on: ["php"]
2)とりあえず docker-compose up
docker-compose.ymlファイルのあるディレクトリでdocker-compose up -d
してみてください。エラーが出るはずです。
エラーが出たことを確認しましたらdocker-compose down
で停止してください。
エラーが出た理由はnginx:
サービスで使う default.conf ファイルがクライアント側に存在しないためです。
default.conf ファイルを用意する必要があります
もし「no matching manifest for linux/arm64/v8 in the manifest list entries」という表示が出て止まったら、次の参考サイトをご確認ください。
【参考サイト】
[Docker] M1 Macで「 no matching manifest for linux/arm64/v8 in the manifest list entries」のエラーの対処法
私はM2チップ搭載のMacBookで表示されました
3)【重要】 nginx用のdefault.confファイルの用意
default.conf ファイルを用意します。
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
4) default.confファイルの保存先
上記の工程(2)でdocker-compose up -d
をした後であれば、docker-compose.ymlファイルのあるディレクトリにnginx
php
db
という3つのディレクトリが生まれているはずです。
ディレクトリnginx / conf.d
の中にdefault.confファイルを保存してください。
「default.conf」というディレクトリが先に存在している場合は、削除してください(入れ替えてください)
5)もう一度 docker-compose up
再度にdocker-compose up -d
してください。今回は上手く立ち上がったのではないでしょうか?
6)確認してみる
動作確認のため、ディレクトリnginx / html
の中にindex.php
ファイルをおいてください。(index.php
ファイルの内容は何でも結構です)
<?php
echo phpinfo();
ブラウザでhttp://localhost:8080/
へアクセスして表示されれば確認完了です
補足
データベースとphpMyAdminは不要です
上記の docker-compose.yml には個人的な都合でmysqlとphpmyadminを入れておりますが、php環境を作る目的だけであれば不要なものです。
よってサービスdb:
とphpmyadmin:
は削除いただいてOKです。ただし、削除する場合はサービスphp:
内にあるdepends_on: ["db"]
を削除することを忘れないように。
もし、phpMyAdminへアクセスする場合はhttp://localhost:8888/
です。
ユーザー名root
、パスワードroot_pass_fB3uWvTS
でログインできるはずです。
nginx−default.conf の記述について
こちらの参考サイトがとても勉強になりました。
参考サイト:nginx連載4回目: nginxの設定、その2 - バーチャルサーバの設定
参考サイト:nginx連載5回目: nginxの設定、その3 - locationディレクティブ
nginx と PHP-FPM の関係性について
こちらの参考サイトがとても勉強になりました。
参考サイト:nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する
FastCGIって何?
こちらの参考サイトがとても勉強になりました。