Help us understand the problem. What is going on with this article?

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

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"]

  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 ファイルを用意する必要があります

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って何?

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした