DockerでLaravel 11のローカル開発環境を構築していきます。
DB確認用に、phpmyadminもインストールします。
コンテナは以下のような構成です。本番環境に応用できるように、あえてSailは使いません。
- アプリコンテナ
- PHP:8.3をインストールして、Laravel 11をインストールする
- Nginxコンテナ
- 最新のNginxをインストール
- DBコンテナ
- MySQL:8.0.36をインストール
- phpmyadminコンテナ
- 最新のphpmyadminをインストール(現時点の最新バージョン5.2.1をインストール)
では実際にローカル開発環境を構築していきます。
各コマンドをコピペで環境構築できます!
Laravelのローカル開発環境構築
まずは、完成系のディレクトリ構成から記載します。
ディレクトリ構成
以下のような構成となります。
├── docker
│ ├── db # MySQL(DB)コンテナの設定ファイル等を入れるディレクトリ
│ │ └── my.cnf
│ ├── nginx # nginxコンテナの設定ファイル等を入れるディレクトリ
│ │ └── default.conf
│ └── php # アプリ(PHP)コンテナの設定ファイル等を入れるディレクトリ
│ └── Dockerfile
└── docker-compose.yml
ディレクトリの作成
上記ディレクトリ構成を作成するためのディレクトリを作成します。
mkdir test_laravel
cd test_laravel/
準備はできましたので、ディレクトリ構成に記載のディレクトリとファイルを作成していきます。
docker-compose.ymlの作成
docker-compose.ymlを作成します。
vi docker-compose.yml
<ファイルの中身>
version: '3'
services:
app:
container_name: app_laravel
build: ./docker/php
volumes:
- .:/var/www
nginx:
image: nginx
container_name: nginx
ports:
- 8000:80
volumes:
- .:/var/www
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
working_dir: /var/www
depends_on:
- app
db:
image: mysql:8.0.36
container_name: db
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: database
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
- ./docker/db/sql:/docker-entrypoint-initdb.d
ports:
- 3306:3306
# phpMyAdmin
phpmyadmin:
container_name: test_phpmyadmin
image: phpmyadmin
environment:
- PMA_USER=root
- PMA_PASSWORD=password
ports:
- 8080:80
MySQLのmy.confを作成
MySQLのmy.confを作成します。
mkdir docker
mkdir docker/db
vi docker/db/my.conf
<ファイルの中身>
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default_authentication_plugin=mysql_native_password
[client]
default-character-set=utf8mb4
nginxのdefault.confを作成
nginxのdefault.confを作成します。
mkdir docker/nginx
vi docker/nginx/default.conf
<ファイルの中身>
server {
listen 80;
root /var/www/laravel-project/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
アプリコンテナのDockerfile作成
アプリコンテナのDockerfile作成を作成します。
mkdir docker/php
vi docker/php/Dockerfile
<ファイルの中身>
FROM php:8.3-fpm
RUN apt-get update \
&& apt-get install -y zlib1g-dev mariadb-client vim libzip-dev \
&& docker-php-ext-install zip pdo_mysql
#Composer install
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_HOME /composer
ENV PATH $PATH:/composer/vendor/bin
WORKDIR /var/www
RUN composer global require "laravel/installer"
必要なファイル作成が終わりましたので、コンテナ立ち上げてLaravel11をインストールしていきます。
コンテナ立ち上げ
以下のコマンドでコンテナを立ち上げます。
docker compose up -d
Laravel 11のインストール
アプリコンテナの中に入りLaravel11をインストールします。
# アプリコンテナに入るコマンド
docker compose exec app bash
# Laravel11インストールコマンド
composer create-project --prefer-dist laravel/laravel laravel-project "11.*"
DBの接続先をsqlliteからmysqlに変更します。
vi laravel-project/.env
<ファイルの中身(DB設定箇所を編集します)>
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=password
以下のコマンドでマイグレーションを実行します。
cd laravel-project/
php artisan migrate
以上で環境が出来上がりましたので、最後に動作確認します!
動作確認
- http://localhost:8000/にアクセスして
- 以下のLaravelの画面が見れればOK
- http://localhost:8080/にアクセスして
- phpmyadminが見れればOK
sailを使う場合
以下のコマンドでプロジェクトインストールします。
curl -s "https://laravel.build/example-app" | bash
以下のコマンドでコンテナを立ち上げます。
cd プロジェクト名 && ./vendor/bin/sail up
ブラウザで「http://localhost/」 へアクセスすると以下のエラーが出ます。
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel.sessions' doesn't exist
「RUN MIGRATIONS」をクリックした後、「Refresh now」をクリックするとLaravelのスタート画面が表示されます。成功〜〜