【簡単】DockerでシンプルにLaravel環境を構築する

docker-laravel.png

2022年11月13日

今回はLaravel環境をDockerで構築してみます。

前提

PCにGitとDockerのソフトウェアがインストール済み

ソフトウェア構成

PHP(ver. 8.3〜7.3)

Laravel(ver. 指定可能 or 既存)

Nginx

Mysql(ver. 8.0)

コンテナ構成

コンテナの構成は一般的なWeb3層の形で構築します。

infra
├── app
├── db
└── web

手順

以下の手順でコマンドを実行してください。

まずはdocker設定ファイルをクローンします。

$ git clone git@github.com:juno1140/docker-laravel.git .

PHPのバージョンはデフォルトで8.3を利用するようにしていますが、変更する場合はdocker-compose.ymlのapp>build>targetの「php83」を適宜変更してください。変更時は./infra/app/Dockerfileの指定のバージョンのコメントアウトを解除してください。

Laravel11以降はPHP8.2以上でないと動かないのでご注意ください。

問題なければ以下のコマンドを実行します。

$ docker-compose up -d

新規でLaravelプロジェクトを作成する場合

# 最新バージョン
$ docker-compose exec app composer create-project --prefer-dist laravel/laravel .

# バージョン指定の場合
$ docker-compose exec app composer create-project --prefer-dist "laravel/laravel=6.*" .

ブラウザでhttp://localhostにアクセスするとLaravelの初期画面が表示されます。

もしも、下記のようなエラーが出た場合。

The stream or file "/var/www/storage/logs/laravel.log"

以下のコマンドを実行します。

$ docker-compose exec app chmod 777 -R storage

既存のLaravelプロジェクトの場合

既存のプロジェクトがある場合はsrcディレクトリ直下にクローンしてください。

クローンしたらcomposer installします。

$ git clone git@github.com:juno1140/vuesplash.git ./src
$ docker-compose exec app composer install
$ docker-compose exec app cp .env.example .env
$ docker-compose exec app php artisan key:generate
$ docker-compose exec app php artisan storage:link

composer installでエラーが出る場合はPHPのバージョンやパッケージをご確認ください。

ブラウザでhttp://localhostで表示されます。

データベースの接続とmigration

.envのDB情報を以下のように編集します。

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=user
DB_PASSWORD=password

編集したらマイグレーションを実行しましょう。

$ docker-compose exec app php artisan migrate

エラーが出る場合はキャッシュクリア(ccコマンド)などお試しください。

これでDB接続とテーブルの作成が完了です。

コンテナへのアクセス

各コンテナへは以下のコマンドで入ることができます。

# appコンテナ
$ docker-compose exec app bash
# webコンテナ
$ docker-compose exec web sh
# dbコンテナ
$ docker-compose exec db bash

出るときはCtrl + Dもしくはexitコマンドで出れます。

おまけ

上記で一通りの環境構築は完了です。

以下、おまけとしてLaravelを使う上での便利機能をご紹介します。

alias

今回のLaravel環境では初期状態でコンテナ内でaliasの設定をしています。

例として、php artisanコマンドはコンテナ内ではartで実行できます。

$ art route:list

その他にも、キャッシュクリアはccでできるので便利です。

aliasの一覧はコマンドラインでaliasコマンドを実行してご確認ください。

追加・変更したい場合は、./infra/app/alias.shファイルを更新してdocker-compose build>docker-compose up -dすれば反映されます。

viteでのnpm run dev設定

これまでjsのモジュールバンドラー(複数のファイルを1つにまとめるツール)はwebpackでしたが、Laravel9からviteに変わりました。

viteでnpm run dev(vite)を実行した状態で、ファイルを編集するとホットリロードで瞬時に反映されるようになります。

npm run devの実行はデフォルトで5173ポートで動きます。ただし、今回のdocker環境ではappコンテナで5173ポートが解放されていないため、設定が必要になります。

docker-compose.ymlファイルに下記のコード(ports)を追加してください。

  app:
    build:
      context: .
      dockerfile: ./infra/app/Dockerfile
      target: php83
    volumes:
      - ./src:/var/www
    ports: # ⇦ここを追加
      - "5173:5173" # ⇦ここを追加
    working_dir: /var/www

次に、package.jsonにも下記のように–hostを追加します。

"scripts": {
    "dev": "vite --host",
    "build": "vite build"
},

設定はこれだけです。docker-compose up -dをし直して、appコンテナに入り、npm run devしてみましょう。

画面の表示自体はhttp://localhostのままで問題ありません(ポート番号の指定は不要)。

resources/js/app.jsなどをすぐに画面に反映されます。

ちなみに本番環境へ上げる場合はnpm run buildを実行してください。

まとめ

今回はdockerでLaravel環境を構築してみました。

dockerに関する詳細の説明は省いてしまったので、ご興味ある方は調べてみてください。

また、Laravelの複数プロジェクトの構築方法もご紹介しているのでそちらも参考にしてください。

参考図書

図解! Dockerのツボとコツがゼッタイにわかる本