DockerでLaravelの環境構築(Laradock)

2022/02/26

前回、DockerでNginxを使ってWebページを表示させました。

今回は、Docker を使ってLaravel の環境構築をします。

 

演習

Laradock を使って、Laravelの開発環境を構築します。

LaradockとはDockerを用いてlaravelの環境を作るために必要なものが全てパッケージ化されているものです。各サービス毎にコンテナを立ち上げる土台が用意されていて、環境変数を設定すれば欲しいものだけ立ち上げてくれます。

 

目的
  • Laravelのスタートページを表示
  • DBの設定⇒マイグレーションの実行
  • PhpMyAdminの画面表示

 

前提条件
1.Gitが使える環境になっていること

Git for Windows

 

2.Dockerが使える環境になっていること

 

仕様
  • プロジェクト名:laravel_app
  • 構築する環境:PHP 7.3/MySQL 5.7/Apache 2
  • Laravel 6.10

laravel_app(開発環境用リポジトリ)
 └ laradock/(laradockリポジトリ)
 └ src/(laravelのソースリポジトリ)

 

コマンド実行結果

基本、作業は Git Bash でコマンドを実行していきます。

Git Bash は Git for Windows (※Windowsユーザー)をインストールするとついてきます。(※下のスクショではlaravel 6.5 になってます。)

 

手順

1.作業ディレクトリの作成


$ mkdir laravel_app
$ cd laravel_app
$ mkdir src

 

srcディレクトリは Laravel の格納場所になります。

 

2.Laradockをダウンロード(git submodule)

外部のリポジトリ(Laradock)を現在のプロジェクトに追加するために、git submoduleコマンドを使います。


# git moduleでLaradockを取り込むためにリポジトリを作成
$ git init

# git ignoreでphpstormの設定ファイル(.idea)を消しておく
$ vi .gitignore

# プロジェクト(laravel_app)にサブモジュール(Laradock)を追加
$ git submodule add https://github.com/laradock/laradock.git

 

ディレクトリ構成は以下のようになります。

 

3.設定ファイルを編集

ダウンロードしたlaradockディレクトリに移動してenv-exampleをコピーして.envを作成します。


$ cd laradock
$ cp env-example .env

 

次に先ほど作成した Laradock の設定ファイル(.envファイル)を編集します。

.envファイル(設定ファイル)はUTF8で保存してください。エラーになります。
エディタによると Shift-JIS で開いてそのまま保存するので注意!

 

laravelの格納場所を設定

// 変更前
APP_CODE_PATH_HOST=../

// 変更後
APP_CODE_PATH_HOST=../src/

 

PHPのバージョンを設定

PHPのバージョンはデフォルトのままにしました。

流石にPHP5.6以下は選べないようになっています。


### PHP Version ###########################################

# Select a PHP version of the Workspace and PHP-FPM containers (Does not apply to HHVM).
# Accepted values: 7.4 - 7.3 - 7.2 - 7.1 - 7.0 - 5.6
PHP_VERSION=7.3

 

MySQLのバージョンを設定

MySQL5.8系から認証が変わりました。Laradockのmysqlディレクトリの設定を変更しないと、PHPからコネクト(マイグレーション)するときにエラーになります。

MySQL5.8である必要がない方は5.7でやると "すんなり" といきます。


// 変更前
MYSQL_VERSION=latest

// 変更後
MYSQL_VERSION=5.7

 

4.ApacheとMySQLのコンテナの起動

ApacheとMySQLのコンテナを作成&起動します。

Nginxを使いたい場合はapache2をnginxに置き換えるだけでOK。


// Dockerコマンドと同じく-dオプションはバックグランドで実行(デタッチモード)
$ docker-compose up -d apache2 mysql php-fpm workspace

// コマンドを短くしたいなら下記でもOK。
// docker-compose.yml の apache2 の項目で依存関係があるコンテナが指定されているため、一緒に立ち上がる
$ docker-compose up -d apache2 mysql

 
作業ディレクトリ(C:\プロジェクト名\laradoc)に移動していないとdocker-composerコマンドが使えないので注意!

docker-composeコマンドは複数のdockerコマンドを docker-compose.yml に書いて docker-compose upコマンド 一発でコンテナが全部動くようにすることができるコマンドです。image名とか、開けるポートとかビルドするDockerfileのパスは、まとめてdocker-compose.ymlに書きます。

 

docker-compose 基本コマンド
コマンド 説明
docker-compose ps コンテナの一覧
docker-compose images イメージの一覧
docker-compose build サービスのimageをビルド
docker-compose restart サービスを再起動
docker-compose run サービスを起動
(※-dオプションでバックグランドで起動)
docker-compose up コンテナの作成と起動
docker-compose exec サービスに対してコマンドを実行
docker-compose logs サービスのログを出力
docker-compose stop サービスを停止させる
docker-compose rm docker-compose.ymlにかかれているコンテナを削除
docker-compose down コンテナを停止&削除

 

5.Workspaceコンテナの起動

Laravel本体のインストールは composer で行います。

composerや必要なライブラリが揃った workspaceコンテナ に入って行います。

まずは、workspaceコンテナを起動。


// コンテナを作成&起動(※-dオプションでデタッチモード)
$ docker-compose up -d workspace

 
次に作成されたworkspaceコンテナに入ります。


$ winpty docker-compose exec  workspace bash

 

winptyコマンド

Git Bashで execコマンド を実行するとエラーが表示されます。この場合、winptyをコマンドの頭につけると上手くいきます。

 

6.Laravelのインストール

workspaceコンテナ内にはcomposerはすでにインストールされています。

composerコマンドでlaravelをインストールします。


// -prefer-distオプション → zipでダウンロード。
[root@7e68a8b32e2a] composer create-project --prefer-dist laravel/laravel ./

 

7.スタートページの表示

ブラウザを開いて http://localhost/public にアクセスします。

以下のようにLaravelのスタートページが表示されれば第一段階はOK。

【 ログに書き込む権限がないと怒られたら 】


# Laravelプロジェクトルートに移動
[root@example ~]# cd /var/www/

# 権限変更
[root@example ~]# chmod 775 -R storage/

# 775でも権限エラーが出る場合
[root@example ~]# chmod 777 -R storage/

 

8.Laravelのデータベース設定

Laradockディレクトリにある.envファイルにmysqlの設定がかかれているのでそれを参考にします。

上記の項目を先ほどインストールしたLaravelの.envファイルに設定します。


:
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret
:

 

9.マイグレーション

laravelの設定ファイルを変更したらマイグレーションを実行。


[root@7e68a8b32e2a] php artisan migrate

 

10.PhpMyAdminコンテナの起動

exitコマンドでworkspaceコンテナを抜けて phpmyadminコンテナを作成&起動します。


$ docker-compose up -d phpmyadmin

 

11.データベースの確認

ブラウザから「http://localhost:8080」にアクセスして、以下のようにPhpMyAdminのログイン画面が表示されていればOKです。

【 注意 】
2022 年 2 月の時点では PhpMyAdmin のポート番号が 8081 になっているそうです。
その場合は「http://localhost:8081」にアクセスしてください。

サーバー:mysql
ユーザー名:default
パスワード:secret

でログインできます。

マイグレーションしたテーブルが作成されているか確認してみましょう。

 

12.URLからpublicを消す

Laravelをインストールしてプロジェクトを作成するとURLは https://example.com/public となってしまいます。

publicを消すには、基本的にはpublicフォルダーの中身をプロジェクトのルートに持ってきてindex.phpを編集します。

しかし、実は上記以外にもhtaccessだけでも可能です。

liaotzukai/Php laravel 5.5 project .htaccess file


<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>
    
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} -d [OR]
    RewriteCond %{REQUEST_FILENAME} -f
    RewriteRule ^ ^$1 [N]

    RewriteCond %{REQUEST_URI} (\.\w+$) [NC]
    RewriteRule ^(.*)$ public/$1 

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ server.php

</IfModule>

 

こちらの.htaccessファイルをlaravelのプロジェクトのルートディレクトリに配置すればOKです。

https://example.comにアクセスした時にドキュメントルートを設定しなくてもきれいなURL(※publicがいらない)でアクセス可能になります。

 
以上です。

 

自宅ではじめるDocker入門

Docker関連の数ある本でも、図や丁寧な解説で「わかりやすい」と評判がいい本です。コマンドを叩きながら、Dockerにおける「イメージ」「コンテナ」が理解できます。まだ、Kindle版が出てないのは惜しいですが、Docker入門としておススメの1冊です。

Amazonで詳細を見る

オススメ

 

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-環境構築