LoginSignup
2
1

More than 3 years have passed since last update.

macでdocker-composeを使ってPHPとnginxをすぐに使えるようにする方法

Posted at

PHPの勉強用に「折角だからnginxをdockerで立てて使おう〜」と軽い気持ちでコンテナ立てて実行しようとしたところ「コンテナのnginxのドキュメントルートにどうやってファイル置くんだろ。」とか「もしかしてコンテナ入って置かないとダメ?」とか前知識が無くて全然うまく行かず。。

docker-composeを使って速攻で準備

出来ねぇ出来ねぇボヤいてたらwebエンジニアにdocker-composeを使って速攻でその辺の環境を作る方法を教えてもらいました。
コンテナを立てたい場所に下記のdocker-compose.ymlファイルを作成します。


[docker-compose.yml]

### nginxでphpをブラウザ上に表記するのに必要なコンテナ一式。
version: '3'
services:
  app:
    image: laradock/php-fpm:2.2-7.2
    # ローカルのカレントディレクトリに格納したファイルをコンテナの/var/phpappにマウントする
    volumes:
      - ./:/var/phpapp/

  nginx:
    image: nginx:latest
    # 8080ポートから来た接続をコンテナの80番ポートに連携する
    ports:
      - "8080:80"
    volumes:
      # ローカルの./docker/nginx/nginx.confのをnginxコンテナの/etc/nginx/conf.d/default.confにマウントする
      - ./docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
      # ローカルカレントディレクトリをコンテナの/var/phpappにマウント
      - ./:/var/phpapp/

  mysql:
    image: mysql:5.7
    # 33306ポートから来た接続をコンテナの3306番ポートに連携する
    ports:
      - 33306:3306
    volumes:
      - ./testdata/:/data
    environment:
        MYSQL_DATABASE: app
        MYSQL_ROOT_PASSWORD: root

あとnginx.confの内容を下記にします。
これはローカルの.docker/nginx/nginx.confに作成してください。


[nginx.conf]

server {
  listen 80;
  server_name localhost;
  root  /var/phpapp/web;
  index index.php index.html;
  location / {
    try_files $uri $uri/ /index.php$is_args$args;
  }

  location ~ \.php$ {
    fastcgi_pass   app:9000;
    fastcgi_index  index.php;
    fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    include        fastcgi_params;
  }
}

nginx.confの方は深く説明しませんが、この設定にしておけばローカルのカレントディレクトリのwebフォルダに格納したPHPファイルはちゃんと処理されてブラウザ上で表示されます。

あとはdocker-composeファイルを起動させれば準備完了します!

$ docker-compose up -d

出来たものはこちらです。


$ docker ps
CONTAINER ID        IMAGE                      COMMAND                  CREATED             STATUS              PORTS                                NAMES
04e0f98cc4ef        mysql:5.7                  "docker-entrypoint.s…"   7 hours ago         Up 7 hours          33060/tcp, 0.0.0.0:33306->3306/tcp   memo_keizi_mysql_1
8c0639887fb3        laradock/php-fpm:2.2-7.2   "docker-php-entrypoi…"   23 hours ago        Up 23 hours         9000/tcp                             memo_keizi_app_1
c3574c4c67b9        nginx:latest               "nginx -g 'daemon of…"   34 hours ago        Up 33 hours         0.0.0.0:8080->80/tcp                 memo_keizi_nginx_1

IMAGEのところがdocker-composeのimageで記述したものになっています。

PHPをブラウザで表示させるところまで確認する

折角なので格納したPHPファイルがブラウザ上で表示されるところまで確認します。
※今回MySQLは使用しません。

nginx.confで設定したroot /var/phpapp/web;によりwebフォルダがドキュメントルートになります。
カレントディレクトリにwebフォルダを作成し、PHPファイルを格納します。

$ ls web/
index.php

ファイルの内容はありきたりですが、Hello World出力で。。

[index.php]
<html>
 <head>
  <title>PHP Test</title>
 </head>
 <body>
 <?php echo '<p>Hello World</p>'; ?> 
 </body>
</html>

http://localhost:8080/でアクセスすると、、

image.png

問題なく出力されました。
このwebフォルダにPHPのファイルを入れてパス指定すれば問題なく起動します。

終わりに

半端な知識で「nginxはコンテナで!PHPはローカルに入ってるからそれで勝手に処理してくれるでしょ!」くらいの軽い気持ちでやったら泥沼でした。。

2
1
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
2
1