JavaScriptを有効にしてください

LaravelとDocker:初心者向けの簡単セットアップガイド

 · 

LaravelとDocker:初心者向けの簡単セットアップガイド

Dockerは、アプリケーションの開発、配布、実行を簡単にするコンテナプラットフォームです。
Laravel開発にDockerを使用することで、環境設定の煩雑さを解消し、どこでも一貫した開発環境を保つことができます。
この記事では、Dockerを使ってLaravelを始める方法を初心者にも分かりやすく説明します。

Dockerとは?

Dockerは、アプリケーションとその依存関係をコンテナという形でパッケージ化します。
これにより、異なる環境間でのアプリケーションの実行を一貫して行えるようになります。

LaravelのDocker環境の構築

必要なツール

  • Docker Desktopのインストール
  • Docker Compose(Docker Desktopに含まれています)

Laravelプロジェクトのセットアップ

1.Laravel環境構築のルートディレクトリを作成

まず、適当な場所にsample-projectsディレクトリを作成します。
sample-projectsディレクトリをLaravel環境構築のルートディレクトリとします。
ここに各プロジェクトのディレクトリを作成していくイメージになります。

2.Docker Composeファイルの作成

PHPはComposerのインストールが必要なため、公式イメージをベースにしてComposerをインストールするDockerfileを作成してルートディレクトリに配置します。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
FROM php:8.2-fpm

RUN apt-get update && apt-get install -y \
    git \
    unzip \
    libzip-dev \
    zip \
    mariadb-client \
    && docker-php-ext-install pdo_mysql zip
# Composerのインストール
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Composerのグローバルベンダーバイナリのパスを取得し、PATH環境変数に追加
ENV PATH="${PATH}:/root/.composer/vendor/bin"

次にdocker-compose.ymlファイルをルートディレクトリに作成し、必要なサービス(例: PHP、MySQL、Nginx)を定義します。
appの部分がPHPなので上記で作成したdockerfileを指定します。
今回test1というプロジェクトを作成するため、DB名はtest1になっています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - .:/var/www/html
    depends_on:
      - app
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "8000:8000"
    volumes:
      - .:/var/www/html
    depends_on:
      - db
    environment:
      DB_CONNECTION: mysql
      DB_HOST: db
      DB_PORT: 3306
      DB_DATABASE: test1
      DB_USERNAME: root
      DB_PASSWORD: test1234
  db:
    image: mysql:8.2
    environment:
      MYSQL_DATABASE: test1
      MYSQL_ROOT_PASSWORD: test1234
    ports:
      - "3306:3306"

※MYSQL_ROOT_PASSWORDは適宜書き換えて下さい
※開発環境のためパスワードを直書きしていますが、本番環境ではパスワードは別の方法で設定しましょう

この時点のファイル構成は下記のようになっています。

1
2
3
4
~/sample-project$ tree
.
├── Dockerfile
└── docker-compose.yml

3.Docker Composeを使ってコンテナを起動

プロジェクトのルートディレクトリでコマンドラインで以下のコマンドを実行し、Docker Composeを使用してコンテナを起動します。

1
docker-compose up -d

4.Laravelをインストール

1
docker-compose exec app composer global require laravel/installer:v5.8.5

今回はLaravel installerを使用して、コンテナ内にLaravelをインストールします。
laravelはバージョンによって手順や設定が変わることが多いため、バージョンを指定しています。

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

Laravelプロジェクトを作成します。これもコンテナ内で行うことができます。
test1というプロジェクトを作成してみましょう。

1
docker-compose exec app laravel new test1

上記コマンドを実行すると1つ目の選択肢が出力されます。

  • No starter kit
  • Laravel Breeze
  • Laravel Jetstream

Laravel BreezeLaravel Jetstreamはそれぞれ便利なパッケージが最初からインストールされているものになります。
今回はテストで作ってみるだけなので、No starter kitを選択しましょう。

次にテストフレームワークの選択肢が出力されます。

  • Pest
  • PHPUnit

こちらはとりあえずPestを選択しましょう。
PestPHPUnitについては別で記事を書く予定です。

次にGitリポジトリの作成を行うかの選択肢が出力されます。
今回は特に使わないのでNoを選択します。

ここで必要なパッケージのダウンロードとインストールが実施されます。

インストール完了後、使用するデータベースの選択肢が出力されます。

  • SQLite
  • MySQL
  • MariaDB
  • PostgreSQL
  • SQL Server

こちらはMySQLを選択します。

次はマイグレーションを実行するかどうかの選択肢が出力されます。
こちらはyesを選択しましょう。
そうでないと実行に必要なテーブルが作成されません。

6.アプリケーションのアクセス

1
docker-compose exec app php test1/artisan serve --host=0.0.0.0

上記コマンドを実行後、ブラウザでhttp://localhost:8000にアクセスしてみましょう。
※http://0.0.0.0:8000にアクセスしても繋がらないのでご注意ください

すると下記画像のようにInternal Server Errorが表示されると思います。
Laravel Internal Server Error

エラーメッセージを確認すると、どうやらMySQLのDBにアクセスできていないようです。

様々な原因が考えられますが、まずは接続情報が正しいか確認してみましょう。

test1/.envファイルの22行目を見てみるとDB関連の設定は下記のようになっていました。

1
2
3
4
5
6
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=test1
DB_USERNAME=root
DB_PASSWORD=

DB_DATABASEはプロジェクトを作成したコマンドのプロジェクト名test1が設定されていますが、DB_HOSTはデフォルトのIPアドレスに、DB_PASSWORDは未設定になっていますね。
docker-compose.ymlで設定したDBのホスト名はdbになっていますのでまずはこちらをdbに修正します。
次にパスワードはtest1234に設定していますのでこちらも修正します。

修正後の.envファイルは次のようになります。

1
2
3
4
5
6
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=test1
DB_USERNAME=root
DB_PASSWORD=test1234

今回docker-composeで作成しているため.envファイルのユーザーがrootになっており、修正しようとすると書き込みができないはずです。
ですので、下記コマンドで自分のユーザーに設定しなおしましょう。

1
sudo chown {ユーザー名}:{ユーザー名} -R test1

権限を設定しなおして.envファイルを保存するとartisan serveコマンドのプロンプトに下記メッセージが表示されるはずです。

1
INFO  Environment modified. Restarting server... 

laravelは.envファイルの修正を監視していて、修正されると即座に更新されるようになっています。

では、もう一度ブラウザでhttp://localhost:8000にアクセスしてみましょう。
どうでしょうか?今度はエラーにならずデフォルトの画面が表示されたと思います。

まとめ

Dockerを使用することで、Laravelの開発環境を素早く簡単に構築できます。
これにより、開発プロセスがスムーズになり、環境依存の問題を避けることができます。
このガイドが、LaravelとDockerの世界への第一歩となることを願っています。


スポンサーリンク

共有

もふもふ
著者
もふもふ
プログラマ。汎用系→ゲームエンジニア→Webエンジニア→QAエンジニア