Docker

Laravel開発環境をDockerを使ってサクッと構築する【最小限のコード】

Laravel開発環境をDockerを使ってサクッと構築する【最小限のコード】

この記事では、Dockerを使ってLaravelのローカル開発環境を構築する方法(Apache)をご紹介します。

この記事を読めば、以下のことができるようになるでしょう。

  • Dockerを使ってLaravelのローカル開発環境を構築し、Laravelのデフォルト画面を表示する
  • Laravelからローカルのデータベースコンテナに接続する

 

なるべく細かく丁寧に説明するので、参考にして頂けると幸いです。

環境情報
  • Apache:2.4.38
  • PHP:8.0.5
  • Laravel:8.40.0
  • MySQL:8.0

 

Laravel開発環境をDockerを使ってサクッと構築する【最小限のコード】

Dockerを使って開発環境でLaravelのデフォルト画面を表示する + ローカルのデータベースコンテナと接続するを目標に、最小構成でのLaravel環境構築を目指します。

最終的なディレクトリ構成は以下です。

Dockerを使ったLaravel開発環境構築のディレクトリ構成

 

以下の順にファイルの生成と動作確認を行います。

  • appディレクトリの作成
  • Dockerfileの作成
  • docker-compose.yamlの作成
  • Laravelのインストール
  • 画面表示確認
  • データベース接続確認

 

app(Laravelのコードを配置するディレクトリ)の作成

まずはlaravel-dockerの下に、空のディレクトリ(app)を作成して下さい。

後ほどapp配下にLaravelのコードを配置します。

mkdir app

 

Dockerfileの作成

次に、Dockerfile(ベースイメージをカスタマイズして独自のDockerイメージを作るためのファイル)を作成します。

laravel-dockerの下にdockerディレクトリを作成し、dockerディレクトリの下に以下のDockerfileを記述して下さい。

FROM php:8.0-apache

COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

RUN apt-get update && apt-get install -y \
    git \
    && docker-php-ext-install pdo_mysql
    
RUN sed -i 's!/var/www/html!/var/www/app/public!g' /etc/apache2/sites-available/000-default.conf

 

簡単にコードの説明をします。

FROMではベースとなるイメージを指定します。

今回はApacheの拡張(モジュール版)としてPHPを実行します。バージョンは、現在(2021/5)のPHPのサポートバージョンである8.0を選択しました。

参考:今回使ったベースイメージのDockerfile

 

COPYでは、マルチステージビルドという手法でコンテナ内にComposer(PHPのパッケージ管理ツール。Laravelをインストールする際に使う)をインストールしています。

マルチステージビルドとは、Dockerイメージの一部を別のイメージで使用する手法のことです。

例えば今回だと、--from=composer:latestでイメージを指定し、その中の/usr/bin/composerを今回作成するコンテナ内の/usr/bin/composerにコピーしています。

この手法は裏技でもなんでもなく、DockerHubのComposerのところでも紹介されている手法です。

参考:Composer(DockerHub)

 

一つ目のRUNでは、必要なパッケージとPHP拡張モジュールをインストールしています。

今回はComposerを使ってLaravelをインストールする際に必要なgitと、LaravelからMySQLコンテナに接続する際に必要なPHPのMySQL拡張をインストールしています。

 

二つ目のRUNではsedコマンドを使ってApacheのドキュメントルート(Webサーバがリクエストを流す場所)を書き換えています。

Laravelの場合は、publicディレクトリ配下のindex.phpで最初にリクエストを処理する仕様になっているため、Apacheドキュメントルートにpublicディレクトリを指定する必要があります。

参考:Publicディレクトリ

今回はsedコマンド(ファイル内の記述を置換するコマンド)を使って000-default.conf内の/var/www/htmlを/var/www/app/publicに書き換えました。

 

docker-compose.yamlの作成

laravel-dockerの下に、以下の構成でdocker-compose.yamlを作成して下さい。

version: '3'

services:
  app:
    build: ./docker
    ports:
      - 80:80
    volumes:
      - ./app:/var/www/app
    working_dir: /var/www/app

  db:
    image: mysql:8.0
    ports:
      - 3306:3306
    environment:
      MYSQL_DATABASE: database
      MYSQL_USER: user
      MYSQL_PASSWORD: pass

 

 

簡単にコードの説明をします。

 

versionはdocker-compose.yamlのバージョンです。

 

servicesでは、立てるコンテナ群を指定します。今回はアプリ用のappコンテナとデータベース用のdbコンテナを立てます。

 

次に、appコンテナの説明です。

buildでは、コンテナを作る素となるDockerイメージを作成するのに使うDockerfileの位置を指定します。

今回はdockerディレクトリ配下にDockerfileを作成したので、./dockerを指定しています。

 

portsでは、割り当てるポート番号を指定します。

左側がホスト側のポート番号で、右側がコンテナ側のポート番号です。

これを設定しておくことにより、ホスト側から80番ポートでコンテナ側の80番ポートにアクセスできます。(ポートフォワーディング)

 

volumesではコンテナ内に配置するローカルのファイルを指定します。

今回は、Laravelのコードを配置するappディレクトリをコンテナ内のvar/www配下に置いています。

この設定により、コンテナ内での操作(ファイルの作成や変更など)がローカルのファイルにも反映されます。

 

working_dirでは、コンテナに入った際のデフォルトのディレクトリを指定します。

この設定により、execコマンドでコンテナに入った際に、/var/www/appから操作をスタートすることができます。

 

次に、dbコンテナです。

imageではコンテナを作るのに必要なDockerイメージを指定します。

コンテナを作る際には、DockerイメージかDockerfileのどちらかを必ず指定する必要があります。(コンテナの素(Dockerイメージ)が無い状態でコンテナは作れません)

 

environmentではコンテナの環境変数を指定します。

今回は、Laravelからデータベース(MySQLコンテナ)に接続するために必要な接続情報を設定しました。

 

必要なファイルの作成は以上です。

Laravelのインストール

次に、コンテナを立ち上げて、Laravelをインストールしていきます。

以下のコマンドを実行してコンテナを立ち上げて下さい。

docker-compose up -d

 

コンテナが立ち上がったら、以下のコマンドでappコンテナに入りましょう。

docker-compose exec app bash

 

 

コンテナに入ったら、appディレクトリ配下にLaravelのコードをインストールしていきます。

var/www/appにいる状態で以下のコマンドを実行して下さい。

composer create-project laravel/laravel .

 

参考:Laravelアプリをカレントディレクトリ配下にインストールする方法

 

ローカルのappディレクトリ配下にLaravelのコード群が生成されていたらOKです。

 

画面表示確認

ここまで設定できたら、Laravelのデフォルト画面が表示できるはずです。

以下のURLをブラウザの検索窓に打ち込んで下さい。

Laravel(8.x)のデフォルト画面が表示されていたらOKです。

http://localhost:80

 

Laravelのデフォルト画面を表示

データベース接続確認

次に、データベース接続の確認をしていきます。

Laravelからデータベースに接続するには、Laravel内の.envファイル(環境情報を記述するファイル)に以下の設定を記述します。(docker-compose.yamlでdbコンテナに設定した値です)

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=database
DB_USERNAME=user
DB_PASSWORD=pass

 

これでDBコンテナには接続できるはずです。マイグレーションを実行して確かめてみましょう。

コンテナ内で以下のコマンドを実行して下さい。

php artisan migrate

 

以下の様にマイグレーションを実行できたら、データベースコンテナへの接続は上手くいっています。

LaravelからDockerのMySQLコンテナに接続できていることを確認

Laravel開発環境をDockerを使ってサクッと構築する まとめ

今回は、以下を達成することを目標に、Laravelの開発環境構築をしました。

  • Dockerを使ってLaravelのローカル開発環境を構築し、Laravelのデフォルト画面を表示する
  • ローカルのデータベースコンテナと接続する

 

そして、Laravelのデフォルト画面を表示し、データベースとも接続することができました。

 

ただ、これだけでLaravelに関する全ての設定がOKな訳ではありません。

例えば、Laravelのデフォルト画面以外を表示させる場合には、Apacheのrewriteモジュールを有効にする必要があります。

参考:Apache(Laravel公式)

 

その他、必要な機能によって、追加でモジュールやライブラリをインストールする必要も出てくるでしょう。

 

そのため、今回の実装はあくまで「最低限のもの」と捉えて、必要なときに必要なコードを追加して頂けるとありがたいです。

 

今回は以上となります。

この記事が少しでもDockerでLaravelの開発環境を構築する際の参考になっていれば幸いです。

COMMENT

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA