LoginSignup
34
29

More than 1 year has passed since last update.

初心者|docker-compose|PHP+ Nginx + MySQL

Last updated at Posted at 2020-03-25

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です

docker-compose.yml
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で停止してください。

image.png

エラーが出た理由は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 ファイルを用意します。

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つのディレクトリが生まれているはずです。

image.png

ディレクトリnginx / conf.dの中にdefault.confファイルを保存してください。

「default.conf」というディレクトリが先に存在している場合は、削除してください(入れ替えてください)

5)もう一度 docker-compose up

再度にdocker-compose up -dしてください。今回は上手く立ち上がったのではないでしょうか?

image.png

6)確認してみる

image.png

動作確認のため、ディレクトリnginx / htmlの中にindex.phpファイルをおいてください。(index.phpファイルの内容は何でも結構です)

index.phpの例
<?php
echo phpinfo();

ブラウザでhttp://localhost:8080/へアクセスして表示されれば確認完了です

image.png


補足

データベースとphpMyAdminは不要です

上記の docker-compose.yml には個人的な都合でmysqlとphpmyadminを入れておりますが、php環境を作る目的だけであれば不要なものです。
よってサービスdb:phpmyadmin:は削除いただいてOKです。ただし、削除する場合はサービスphp:内にあるdepends_on: ["db"]削除することを忘れないように。

もし、phpMyAdminへアクセスする場合はhttp://localhost:8888/です。
ユーザー名root、パスワードroot_pass_fB3uWvTSでログインできるはずです。

image.png

nginx−default.conf の記述について

こちらの参考サイトがとても勉強になりました。

参考サイト:nginx連載4回目: nginxの設定、その2 - バーチャルサーバの設定
参考サイト:nginx連載5回目: nginxの設定、その3 - locationディレクティブ

nginx と PHP-FPM の関係性について

こちらの参考サイトがとても勉強になりました。

参考サイト:nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する

FastCGIって何?

こちらの参考サイトがとても勉強になりました。

参考サイト:調べなきゃ寝れない!と調べたら余計に寝れなくなったソケットの話

34
29
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
29