Docker

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

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

この記事では、Dockerを使って最小限のコードでローカル開発環境を構築する方法(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開発環境構築のディレクトリ構成

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

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

 

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モジュールを有効にする必要があります。(DockerfileにRUN a2enmod rewriteを追加)

参考:Apache(Laravel公式)

 

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

 

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

 

今回は以上となります。

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

Twitterで発信中!

Twitterでプログラミング学習やブログ運営に関するTipsを発信しています。

ぜひフォローをお願いします!

こちらも記事もおすすめです

Web系エンジニアとして成長し続けるために意識していること
Web系エンジニアとして成長し続けるために意識していることWeb系エンジニアとして成長し続けるために意識していることをまとめてみました。...
エンジニアが分からないことを質問するタイミングについて、私の意見
エンジニアが分からないことを質問するタイミングについて、私の意見エンジニアが分からないことを質問するタイミングについて、私の意見をご紹介します。...
CDNとは?基礎をわかりやすく図解してみた【初心者向け】
CDNとは?基礎をわかりやすく図解してみた【初心者向け】CDNの基礎を初心者向けにわかりやすく図解してみました。...

COMMENT

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

CAPTCHA