Docker で、PHP(Laravel)の環境構築をする。

3 min read読了の目安(約3100字

🐳 Dockerfile を新規作成する。

最終行の CMD ["php", "artisan", "serve", "--host", "0.0.0.0"] は、Laravel をインストールするまでは記述してはいけません。

FROM php:8.0.3

# ↓ Composer をインストールする。 ↓
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
  && php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
  && php composer-setup.php && php -r "unlink('composer-setup.php');" \
  && mv composer.phar /usr/local/bin/composer

# ↓ Laravel をインストールするために、.zip を解凍できるようにする。 ↓
# ↓ Laravel にてアセットコンパイルをするために、Node.js をインストールする。 ↓
RUN curl -fsSL https://deb.nodesource.com/setup_15.x | bash \
  && apt-get update && apt-get install -y zip unzip nodejs

WORKDIR /var/www/'アプリケーション名'
CMD ["php", "artisan", "serve", "--host", "0.0.0.0"]
  1. FROM php:8.0.3 で、Docker Hub から、PHP を導入する。
    ※ 現在の最新バージョンである PHP Version 8.0 を使用する。
    ※ 不意なバージョン・アップを防ぐため、Latest は使用していません。
  2. Composer をインストールする。
  3. この後、Laravel をインストールするために .zip を解凍できるようにし、開発において .scss をアセットコンパイルするために必要になる Node.js を導入しておく。
  4. 最後に作業用のアプリケーションディレクトリを指定する。

🐳 docker-compose.yml を新規作成する。

version: '3.9'

services:
  'サービス名':
    build: .
    container_name: 'コンテナ名'
    volumes:
      - 'ローカル環境に同期しておくディレクトリへのパス':'Docker 内のアプリケーションディレクトリへのパス'
    ports:
      - '8000:8000'
          # サーバーを起動したときに使用するポート 
    tty: true
      # 起動直後に終了させずに立ち上げ続けるために記述しておく。
    depends_on:
      - db

  'サービス名':
    image: mysql:8.0.23
    container_name: 'コンテナ名'
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_unicode_ci
    volumes:
      - 'ローカル環境に同期しておくディレクトリへのパス':/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: '値'
      TZ: 'Asia/Tokyo'
        # MySQL 内のタイムゾーンを指定する。

📦 Docker コンテナを起動させてから…

  1. $ composer create-project 'laravel/laravel=6.*' --prefer-dist 'アプリケーション名' を実行して、Laravel をインストールする。
    ※ 最新版の Laravel をインストールする場合は、 'laravel/laravel=6.*' は記述しない。
    --prefer-dist オプションを付与すると、Git ではなく、.zip でダウンロードされる。Git でダウンロードするよりも高速らしい。

以下の通り、7.0 系は既にサポート期間は終了しています。
最新版である 8.0 系を使用するか、安定版の 6.0 系を使用するかです。

バージョン リリース日 バグフィックス期限 セキュリティフィックス期限
6.0 系 2019年 9月 3日 2021年 9月 7日 2022年 9月 6日
7.0 系 2020年 3月 3日 2020年 10月 6日 2021年 3月 31日
8.0 系 2020年 9月 8日 2022年 3月 1日 2022年 9月 6日

🔑 .env を編集する。

アプリケーションディレクトリ内に生成される /.env を編集します。
特に、 DB_HOST の値に要注意しましょう。

APP_NAME='アプリケーション名'

DB_CONNECTION=mysql
DB_HOST='docker-compose.yml で設定した MySQL のサービス名'
DB_DATABASE='データベース名'
DB_USERNAME=root
DB_PASSWORD='docker-compose.yml で設定した MySQL のパスワード'

⚙️ app.php を編集する。

アプリケーションディレクトリ内に生成される /config/app.php を以下のように編集します。

  • 'timezone' を、 'timezone' => 'Asia/Tokyo' に変更する。
  • 'locale' を、 'locale' => 'ja' に変更する。