Laravel × Docker ローカル環境構築
あ~、プログラミング 勉強しよ って思っても、そもそものコーディングするためのローカル環境構築って意味わからん!
今回は 王道中の王道 PHPのフレームワーク Laravel 環境をDockerを使用して構築していきます。
前提
・Docker Desktop はインストールして、起動している状態。
(こちら からインストールできるよ)
・PCはWindows
①プロジェクトディレクトリの準備
プロジェクトを管理するディレクトリを作成します。
PC内のどこでもOK!
コマンドプロンプトを開いて下記を実行します。
cd (任意の場所)
mkdir TalkBoard-back
cd TalkBoard-back
②必要なファイルの準備
ディレクトリ内に4つのファイルを用意して進めます。
docker-compose.yml
Dockerfile
nginx.conf
php.ini
docker-compose.yml
services:
app:
build:
context: .
container_name: talkboard_app
volumes:
- .:/var/www/html
working_dir: /var/www/html
ports:
- "8000:80"
environment:
- APP_PORT=8000
depends_on:
- db
db:
image: mysql:8.0
container_name: talkboard_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel
MYSQL_USER: laravel
MYSQL_PASSWORD: password
ports:
- "3306:3306"
volumes:
- dbdata:/var/lib/mysql
nginx:
image: nginx:latest
container_name: talkboard_nginx
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
- .:/var/www/html
ports:
- "8080:80"
depends_on:
- app
volumes:
dbdata:
Dockerfile
FROM php:8.2-fpm
# 必要なパッケージをインストール
RUN apt-get update && apt-get install -y \
zip unzip curl libpng-dev libonig-dev libxml2-dev \
&& docker-php-ext-install pdo_mysql mbstring gd
# Composer をインストール
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# 作業ディレクトリを設定
WORKDIR /var/www/html
nginx.conf
server {
listen 80;
server_name localhost;
root /var/www/html/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass app:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
}
php.ini
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 64M
max_execution_time = 300
display_errors = On
display_startup_errors = On
error_reporting = E_ALL
③Laravelインストール
コンテナを起動してLaravelプロジェクトを作成します。
コマンドプロンプトで下記を実行!
docker-compose up -d
docker exec -it talkboard_app bash
composer create-project --prefer-dist laravel/laravel .
④権限の設定
現段階で http://localhost:8080 にアクセスすると「権限がどうたらこうたら~~~」みたいなエラー画面になると思うのでファイルの権限を修正します。
コマンドプロンプトで下記を実行!
chmod -R 775 storage bootstrap/cache
chown -R www-data:www-data .
④コンテナ再起動
コンテナを再起動し、ブラウザで http://localhost:8080 にアクセスします。
コマンドプロンプトで下記を実行!
docker-compose down
docker-compose up -d
ウェルカムページが表示されれば成功!!
★追記
各ファイルの役割と効果について
docker-compose.yml
概要: Docker Composeを使用して複数のコンテナを一括で定義・管理する設定ファイルです。
役割: Laravelアプリケーション(PHP-FPM)、MySQLデータベース、Nginx(Webサーバー)の各サービスを設定します。
効果: サービス間の連携(例: PHPとMySQLの通信)やボリューム(データ永続化)の設定を簡単に行えます。
例:
PHPアプリケーション用のコンテナ定義
データベースの環境変数設定(ユーザー名、パスワードなど)
Nginxを介したリクエストのルーティング
Dockerfile
概要: アプリケーションを動作させる環境(コンテナ)を構築するための設定ファイルです。
役割: PHP環境を構築し、Laravelを動作させるのに必要な拡張機能やツールをインストールします。
効果: Laravelの依存関係を満たすPHP環境をカスタマイズして構築できます。
例:
pdo_mysql や mbstring のようなPHP拡張機能のインストール
Composer(PHPの依存関係管理ツール)のセットアップ
作業ディレクトリ(Laravelのソースコード配置場所)の設定
nginx.conf
概要: Nginx(Webサーバー)の設定ファイルです。
役割: HTTPリクエストを適切に処理し、PHP-FPM(Laravelアプリケーション)に転送します。
効果: Laravelのルーティングを動作させるための設定を行います。
例:
/ へのリクエストを index.php に転送する
静的ファイル(CSSやJS)を直接提供する
セキュリティ設定(.htファイルへのアクセス禁止など)
php.ini
概要: PHPの動作設定を記述するファイルです。
役割: Laravelアプリケーションに必要なPHPの設定(メモリ制限、エラー表示など)を調整します。
効果: Laravelが適切に動作し、デバッグやパフォーマンスを向上させる環境を整備します。
例:
memory_limit の拡張(メモリ不足エラー防止)
display_errors をオンにして開発時のエラーメッセージを表示
ファイルアップロードサイズの設定(upload_max_filesize)