Dockerを利用してLaravel(PHP)環境をMacからWindowsへ引っ越しする方法

Macで開発していたPHP-Laravelプロジェクトをwindowsに移動することになった。

Windows専用にPHP,Laravel,MySQL,Apacheをインストールしても良いのだが、パソコンが変わるたびに開発環境を用意するのは面倒だ。dockerなら一度、開発環境を整えてしまえば他の環境でも流用できる!

というわけで、この記事では以下について解説します。

  • dockerを利用してPHP,Laravel,MySQL,Apacheの環境をつくる手順
  • Windows環境(wsl2 linux)にMacで作っていたLaravelプロジェクトを移行する手順

について解説します。

\IT未経験者からのサポートあり!転職サービス3選!!/

サービス名
未経験 未経験OK 未経験の転職専用 経験者向け
公開の求人数 ITエンジニア全体で1万件以上
ITエンジニア未経験で600件以上
未公開 5,000件以上
利用対象 全職種 IT特化 IT特化
特徴 ✓誰もが知る転職サービス
✓経歴を登録しておくとオファーが来る
✓企業担当者と条件交渉
✓スキルの身につく企業を紹介
✓IT専門のエージェントが対応
✓転職成功すると年収200万円以上の大幅アップがある
転職サポート内容
  • 求人検索
  • 企業担当者と交渉
  • 求人紹介
  • ライフプランのサポート
  • キャリア相談
  • 求人紹介
  • 提出書類の添削
  • 面接対策
公式サイト リクナビネクスト テックゲート レバテックキャリア

 

この記事を読む前の前提条件

この記事では、以下の人を対象として書いています。

  • Laravelを使ったことがある
  • dockerを既にWindowsにインストールしている
  • Mac、もしくはLinux上でlaravelプロジェクトを1つ以上作っている
  • Laravelプロジェクト内にcomposer.jsonが存在する
  • プロジェクトはgithub上にあるものとする

 

開発環境について

この記事を書くときに検証した開発環境は以下のとおりです。

  • Windows11
  • wsl2 linux
  • PHP7.3(移動まえのMacでもPHP7.3を利用していました)
  • Laravel 8.12

まずはDockerでPHP、Apache、MySQLの開発環境を作る

まずは、dockerでPHP、Apache、MySQLの開発環境を作ります。

ここで紹介する環境は、GitHubにもコードを公開しているので、参考にしてみてくださいね。

GitHub

dockerでphpとmysqlの開発環境を作る設置. Contribute to jshirius/docker_ph…

 

docker環境でPHP、Apache、MySQLをインストールするための準備

docker環境でPHP、Apache、MySQLをインストールするための準備として、以下のようなファイル構成を作ります。

root(ルート)
├── docker
│ ├── mysql #mysql用のコンテナ設定
│ │ ├── Dockerfile
│ │ └── data ここにmysqlのデータファイル類を格納する(dataフォルダの中身は空にしておくこと)
│ └── php #PHP、apache用のコンテナ設定
│     ├── 000-default.conf
│     └── Dockerfile
├── docker-compose.yml
└── src #laravelのプロジェクトファイル一式を格納する場所
      └── ここに、あなたのLaravelプロジェクト(フォルダに格納された状態)を置きます

また、本記事では、上記のようなファイル構成を前提に解説します。

以降、ファイルごとに説明します。

「root/docker/php/000-default.conf」で.htaccess(rewrite)の設定

root/docker/php/000-default.confの設定例

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/html/engineer-begin-site/public
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Directory /var/www/html/engineer-begin-site/public>
         AllowOverride All
    </Directory>
</VirtualHost>

上記の例は、Laravelのプロジェクトファイル名が「engineer-begin-site」になっています。engineer-begin-siteの部分は、ご自身のプロジェクト名に合わせて設定します。

「root/docker/php/Dockerfile」でPHP、Apacheの設定をする

設定例は以下の通り。

FROM php:7.3-apache

# 設定ファイルの設定
ADD 000-default.conf /etc/apache2/sites-enabled/

# PHPと一緒にライブラリーもインストール
RUN apt-get update  && docker-php-ext-install pdo_mysql mysqli mbstring

# unzipなどの必要ライブラリも一緒にインストール
RUN apt-get install -y unzip  \
git \
zip \
unzip \
vim \
libpng-dev \
libpq-dev

# ログイン直後のディレクトリを指定する
WORKDIR /var/www/html

# Composerをインストールする(Docker 17.05以上)
COPY --from=composer /usr/bin/composer /usr/bin/composer

# Laravelで必要になるmodRewriteを有効化する(.htaccessの利用)
RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN /bin/sh -c a2enmod rewrite

EXPOSE 80

PHPのバージョンは、composer.jsonの以下を設定を確認して入れます。

composer.jsonファイルの一例

"license": "MIT",
"require": {
"php": "^7.3|^8.0",
"artesaos/seotools": "^0.20.0",
"encore/laravel-admin": "^1.8",
"fideloper/proxy": "^4.4",
"fruitcake/laravel-cors": "^2.0",
"guzzlehttp/guzzle": "^7.0.1",
"laravel/framework": "^8.12",
"laravel/tinker": "^2.5",
"laravelium/sitemap": "^8.0"
},

本記事では、PHP7.3でLaravelプロジェクトを作成しているので、PHP7.3をインストールします。

 

補足:

PHP8をインストールすると、Laravelエラーが出て(エラーの内容忘れました・・・)うまく動かなかったので、移動前の環境に合わせてPHP7.3をインストールしました。

「root/docker/mysql/Dockerfile」でMySQLの設定をする

mysqlの設定例

# windows wsl2環境で動かす場合は、「5.7.16」まで指定しないと、なぜかビルドに失敗します
FROM mysql:5.7.16

EXPOSE 3306

root/docker-compose.yml

docker-compose.ymlの設定例

version: '3'
services:
  app:
    build:
      context: ./docker/php
      dockerfile: Dockerfile
    volumes:
      # ドキュメントルートの設定。PC側からはsrcで参照できるようにした
      - ./src:/var/www/html
    ports:
      - "80:80"
    # コンテナ名を明示的に指定する
    container_name: laravel-container
    depends_on:
      - db

  db:
    build:
      context: ./docker/mysql
      dockerfile: Dockerfile
    volumes:
      - ./docker/mysql/data:/var/lib/mysql
    ports:
      - "3306:3306"
    # コンテナ名を明示的に指定する
    container_name: mysql-container
    environment:
      - MYSQL_ROOT_PASSWORD=mysql_pass

dockerでビルドしてPHP、Apache、MySQLをインストールする

上記までの準備がおわったら、以下のコマンドを実行してPHP、Apache、MySQLをインストールします。

尚、「root/docker/mysql/data/」の中に何かしらのファイルがあると、mysqlを起動できないので注意が必要です

docker compose up -d

無事にインストールが終わると、Docker Desktopで確認すると以下のようになっています。

※ StatusがExitedになっていたら、「▶」ボタンを押して起動します。

laravelプロジェクトをインポートする

前章でPHP、Apache、MySQLをインストールしました。

ここでは、インストールしたPHP、Apache、MySQLが起動していること前提で話を進めます。

  1. Laravelプロジェクトを設置するディレクトリに移動します。
    この記事では、srcディレクトリにLaravelプロジェクトを設置する前提で話を進めます。
  2. GitHubでLaravelのプロジェクトファイル一式をcloneする
    GitHubを利用していない場合は、移動元のPCからプロジェクトファイル一式を持ってきても良いです。
  3. 「docker compose exec app bash」 を実行してPHP側のコンテナの中に入る
    このあとの操作は、特に記載がない限りはコンテナの中で操作します。
  4. laravelのルートに移動する(composer.jsonファイルが有る場所)
  5. composer updateでLaravelプロジェクトに必要なライブラリをインストールする
  6. ルートにvenderフォルダが作成されていることを確認します
  7. 「php artisan key:generate」を実行して、アプリケーションキーを作成する
  8. envを環境に合わせて編集します。
    「DB_HOST=mysql-container」のホストは、mysqlのコンテナ名を設定すること。「localhostではありません!」ここ間違えやすいです。
  9. mysqlのデータをimportします
  10. ブラウザで「http://localhost」にアクセスして、Laravelプロジェクトが表示されるか確認します。

 

まとめ

以上、Macで開発していたPHP-LaravelプロジェクトをDockerを用いてwindowsに移動する方法でした。

 

参考にさせて頂いたサイト

Qiita

https://note.com/pocke_techblog/n/n8af813848fa0上記の記事通りにすすめて、…

 

\IT未経験者からのサポートあり!転職サービス3選!!/

サービス名
未経験 未経験OK 未経験の転職専用 経験者向け
公開の求人数 ITエンジニア全体で1万件以上
ITエンジニア未経験で600件以上
未公開 5,000件以上
利用対象 全職種 IT特化 IT特化
特徴 ✓誰もが知る転職サービス
✓経歴を登録しておくとオファーが来る
✓企業担当者と条件交渉
✓スキルの身につく企業を紹介
✓IT専門のエージェントが対応
✓転職成功すると年収200万円以上の大幅アップがある
転職サポート内容
  • 求人検索
  • 企業担当者と交渉
  • 求人紹介
  • ライフプランのサポート
  • キャリア相談
  • 求人紹介
  • 提出書類の添削
  • 面接対策
公式サイト リクナビネクスト テックゲート レバテックキャリア
最新情報をチェックしよう!