14
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

docker-composeでLaravel開発環境を構築する ~②nginx・PHPコンテナとLaravelプロジェクトの作成~

Posted at

はじめに

業務でLaravelの開発環境をdocker-composeで構築することがありました。
しかし詳しいことは全く知らなかったので、自分で1から作ってみようと思います。

環境はWEB(nginx)PHPDB(MySQL)サーバーの構成となります。

今回は目次の
3、4、5についてです。
1、2に関してはこちらをご覧ください。

目次

 1. docker-compose.ymlについて
 2. 必要なディレクトリ、ファイルの準備
 3. nginxコンテナの作成  → 今回はここから
 4. PHPコンテナの作成
 5. Laravelプロジェクトの作成  → 今回はここまで
 6. MySQLコンテナの作成
 

nginxコンテナの作成

それでは、nginxコンテナの作成をしていきます。
前回作成したwebディレクトリ配下にある、Dockerfiledefault.confに書き込みを行い、それに伴いdocker-compose.ymlにもコンテナについて定義していきます。

laravel
└── docker
    ├── docker-compose.yml --> 書き込み
    ├── web
    │   ├── Dockerfile    --> 書き込み
    │   └── default.conf  --> 書き込み
    └── php
    │   ├── Dockerfile
    │   ├── php.ini
    └── db
        ├── Dockerfile
        └── my.conf

1. nginxの設定ファイルdefault.confの作成

設定ファイルはlaravel公式ドキュメントを参考にしました。

~/laravel/docker/web/default.conf
server {
    # サーバが待ち受けるポートの指定
    listen 80;
    listen [::]:80;
    # ルートディレクトリの指定
    root /var/www/html/public;

    # ヘッダーの追加
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    # indexディレクティブの指定
    index index.php;

    # 文字コードの指定
    charset utf-8;

    # URIのパス毎の指定
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    location ~ \.php$ {
        fastcgi_pass php:9000; 
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }

    # 404エラーが起きた際のページの指定
    error_page 404 /index.php;
}

2. Dockerfileの作成

コンテナ作成に必要なDockerfileを作成します。

# ベースイメージの指定
# FROM <イメージ>:<タグ>
FROM nginx:stable-alpine

# 作成した設定ファイルをnginxコンテナの設定ファイルにコピー
# COPY <コピー元> <コピー先>
COPY ./web/default.conf /etc/nginx/conf.d/default.conf

3. docker-compose.ymlの作成

上で作成したファイルを元にdocker-compose.ymlnginxコンテナを定義します。

~/laravel/docker/docker-compose.yml
# docker-composeのバージョン
version: "3" 

# コンテナの定義
services:
  # nginxコンテナ
  web:
    # コンテナ名
    container_name: "web"
    # コンテナ作成に使用するDockerfileのパス
    build:
      dockerfile: "./web/Dockerfile"
    # ホストとコンテナのポート番号の対応付け
    # <ホスト側のポート>:<コンテナ側のポート>
    ports:
      - "8080:80"
    # volumeをバインド
    # <ホスト側のパス>:<コンテナ側のパス>
    # srcは後ほど作成するlaravelプロジェクト
    volumes:
      - "../src:/var/www/html"

以上でnginxコンテナを起動する準備ができました。
コマンドで起動をします。

$ cd docker
$ docker compose up -d --build

以下のとおり正常に起動したのを確認し、http://localhost:8080にアクセスしてみましょう。

[+] Running 2/2
 ⠿ Network docker_default  Created
 ⠿ Container web           Started

しかし現段階だと、指定したroot配下にファイルがないためエラー画面が表示されてしまいます。
一旦このままPHPコンテナの作成に進みたいと思います。

PHPコンテナの作成

nginxコンテナと同様に、Dockerfilephp.iniに書き込みを行い、
docker-compose.ymlにもコンテナについて定義していきます。

laravel
└── docker
    ├── docker-compose.yml --> 書き込み
    ├── web
    │   ├── Dockerfile
    │   └── default.conf
    └── php
    │   ├── Dockerfile    --> 書き込み
    │   ├── php.ini       --> 書き込み
    └── db
        ├── Dockerfile
        └── my.conf

1. PHPの設定ファイルphp.iniの作成

タイムゾーンと言語の設定を定義します。

~/laravel/docker/php/php.ini
# タイムゾーンの指定
[Date]
date.timezone = "Asia/Tokyo"
# 言語の指定
[mbstring]
mbstring.language = "Japanese"

2. Dockerfileの作成

コンテナ作成に必要なDockerfileを作成します。

# ベースイメージの指定
FROM php:fpm-buster

# 作成した設定ファイルをphpコンテナの設定ファイルにコピー
COPY ./php/php.ini /usr/local/etc/php/php.ini

# コンテナ内で作業する際のカレントディレクトリの指定
WORKDIR /var/www/html

3. docker-compose.ymlの作成

上で作成したファイルを元にdocker-compose.ymlPHPコンテナを定義します。

~/laravel/docker/docker-compose.yml
# docker-composeのバージョン
version: "3" 

# コンテナの定義
services:
  # nginxコンテナ
  web:
    ### 省略 ###
  # PHPコンテナ
  php:
    # コンテナ名
    container_name: "php"
    # コンテナ作成に使用するDockerfileのパス
    build:
      dockerfile: "./php/Dockerfile"
    # volumeをバインド
    volumes:
      - "../src:/var/www/html"

以上でPHPコンテナを起動する準備ができました。
コマンドで起動をします。

$ docker compose up -d --build

以下のとおり正常に起動したのを確認できました。

[+] Running 3/3
 ⠿ Network docker_default  Created
 ⠿ Container php           Started
 ⠿ Container web           Started

Laravelプロジェクトの作成

Laravelプロジェクトを作成するには、composerpdo_mysqlなど各種インストールが必要です。
Dockerfileにインストールする内容を記載し、イメージ構築時に必要なものをインストールするようにします。

1. Dockerfileの修正

既存のDockerfileにインストールする命令を追記します。

# ベースイメージの指定
FROM php:fpm-buster

# 作成した設定ファイルをphpコンテナの設定ファイルにコピー
COPY ./php/php.ini /usr/local/etc/php/php.ini

# パッケージのインストール
RUN apt-get update \
    && apt-get -y install git zip unzip vim

RUN docker-php-ext-install pdo_mysql

# composerのインストール
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer

# コンテナ内で作業する際のカレントディレクトリの指定
WORKDIR /var/www/html

2. Laravelプロジェクトの作成

上記でインストールした内容を反映させるために再度コンテナを起動します。

$ docker compose up -d --build

正常に起動したのを確認し、PHPコンテナ内でLaravelプロジェクトを作成します。

$ docker compose exec php bash
$ composer create-project --prefer-dist "laravel/laravel=" .

カレントディレクトリはPHPDockerfileで指定した/var/www/htmlとなり
nginxDockerfileで指定したルート/var/www/html/publicは、作成したLaravelプロジェクトのpublicディレクトリ配下を指します。
改めてhttp://localhost:8080にアクセスしてみましょう。
スクリーンショット 2023-04-17 9.30.44.png
Laravelの画面が確認できました。
ここまででフォルダ構成は以下のようになります。

laravel
└── docker
    ├── docker-compose.yml
    ├── web
    │   ├── Dockerfile
    │   └── default.conf
    └── php
    │   ├── Dockerfile
    │   ├── php.ini
    └── db
        ├── Dockerfile
        └── my.conf
├── src  -->laraveプロジェクト

まとめ

今回はnginxPHPのコンテナ作成、Laravelプロジェクトの作成まで行いました!
次はDB(MySQL)コンテナを作成していきます!

参考

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?