DockerでLaravel開発環境-Laradock

PHPフレームワークLaravelでWEBシステム開発するためのDockerによる開発環境Laradockを使ってみる。
For Windows。

Laradock v10、Laravel7でのWEB開発環境構築は「LaradockでLaravel7開発環境」へ!

必要なもの

docker
docker-compose
git

構築環境

Alpine Linux(Docker標準)
Nginx
MySQL5.7
PHP7
phpMyAdmin

開発ディレクトリ構成

C:\laravel
┠laradock
┠project1
┠project2
┠・・・

Laradockインストール

PS C:\> mkdir laravel
PS C:\> cd laravel
# Laradockをクローンして環境設定
PS C:\laravel> git clone https://github.com/laradock/laradock.git
PS C:\laravel> cd laradock
# Laradock環境設定ファイル作成
PS C:\laravel\laradock> cp env-example .env

C:\laravel\laradock\.env

DATA_PATH_HOST=.laradock/data
MYSQL_VERSION=5.7

※C:\laravel\laradock\data をMySQLのデータディレクトリに設定

Laradock起動

PS C:\laravel\laradock> docker-compose up -d workspace mysql nginx phpmyadmin

Laradock v10.0 から起動時に
ERROR: for phpmyadmin Cannot start service phpmyadmin:
driver failed programming external connectivity on endpoint laradock_phpmyadmin_1 ・・・:
Bind for 0.0.0.0:8080 failed: port is already allocated
などと8080番ポートがすでに割り当てられている的なエラーが出る。
これはWORKSPACEのコンテナが8080番を使用しているので.envファイルでこのポート番号を変更することで対応することにする。

WORKSPACE_VUE_CLI_SERVE_HOST_PORT=8080
↓
WORKSPACE_VUE_CLI_SERVE_HOST_PORT=8088

※初回起動時はイメージを作成するためすっごい時間がかかる。
※DockerでCドライブをShareしておかないとエラーに。。。
※エラーが出たら
・イメージ再構築(–buildオプションを付けて実行)
・Dockerの再起動
のどちらかで直ることが多い。

PS C:\laravel\laradock> docker-compose ps
指定されたパスが見つかりません。
Name Command State Ports
---------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1 dockerd-entrypoint.sh Up 2375/tcp, 2376/tcp
laradock_mysql_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
laradock_nginx_1 /bin/bash /opt/startup.sh Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
laradock_php-fpm_1 docker-php-entrypoint php-fpm Up 9000/tcp
laradock_phpmyadmin_1 /docker-entrypoint.sh apac ... Up 0.0.0.0:8080->80/tcp
laradock_workspace_1 /sbin/my_init Up 0.0.0.0:2222->22/tcp

http://localhost:8080 でphpMyAdminのログイン画面が表示される。

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

でログインできたらOK!

Laravelプロジェクト作成&設定

Laravelプロジェクト作成

例としてproject1というプロジェクトを作成します。

# BashでLaradockのworkspaceにアクセス
PS C:\laravel\laradock> docker-compose exec workspace bash
# プロジェクト作成
root@0a4312279de6:/var/www# composer create-project laravel/laravel project1

laradockの環境設定ファイル.envにLaravelプロジェクトを設定

C:\laravel\laradock\.env

APP_CODE_PATH_HOST=../
↓
APP_CODE_PATH_HOST=../project1

laradock再起動

PS C:\laravel\laradock> docker-compose down
PS C:\laravel\laradock> docker-compose up -d workspace mysql nginx phpmyadmin

http://localhost/ にアクセスしてLaravelのデモ画面が表示されたらOK!

★Laradockの環境設定ファイル.envを変更することでプロジェクトの切り替えができるのね!
同時に起動はできないけど。

タイムゾーンとロケールの設定

'timezone' => 'Asia/Tokyo',
'locale' => 'ja',

エラーメッセージ日本語化

PS C:\laravel\laradock> docker-compose exec workspace bash
root@0a4312279de6:/var/www# composer require laravel-ja/comja5
root@0a4312279de6:/var/www# composer update
root@0a4312279de6:/var/www# vendor/bin/comja5 -a
# 終了
root@0a4312279de6:/var/www# exit

※resources/lang/jaディレクトリが生成される。

データベースとメール(Gmail)を設定

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=project1
DB_USERNAME=root
DB_PASSWORD=root

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=********@gmail.com
MAIL_PASSWORD=xxxxxxxx
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS=********@gmail.com
MAIL_FROM_NAME="Project1"
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', 'mysql'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'project1'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', 'root'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],

補足:Windows起動時にDocker for Windowsの自動起動を停止

OS起動時に自動的にDocker for Windowsが立ち上がる。

設定で「Start Docker Desktop when you log in」のチェックを外したのにな~
と思っていたらWindowsのスタートアップに登録されてた。

タスクバーを右クリック
>タスクマネージャー
>スタートアップ[タブ]
>Docker Desktopを右クリックして「無効化」

補足:複数サイトを同時表示したい

Laradock環境設定ファイル.envのAPP_CODE_PATH_HOSTでhttp://localhost/で表示するプロジェクトを切り替えることにしたが、複数のプロジェクトを同時に利用したい。

【例】
project1をhttp://project1.local
project2をhttp://project2.local
でそれぞれ表示できるように設定します。

APP_CODE_PATH_HOST

APP_CODE_PATH_HOST=../

※元に戻す

Nginxの設定

laradock/nginx/sites/laravel.conf.example をコピーして
laradock/nginx/sites/project1.conf
laradock/nginx/sites/project2.conf
を作成し各ファイルを以下のように変更。

server_name laravel.test
root /var/www/laravel/public


project1.conf

server_name project1.local
root /var/www/project1/public

project2.conf

server_name project2.local
root /var/www/project2/public

hostsファイルに追記

Windows10なら
C:\Windows\System32\drivers\etc\hosts

127.0.0.1 project1.local
127.0.0.1 project2.local

起動

PS C:\laravel\laradock> docker-compose up -d workspace mysql nginx phpmyadmin

※workspaceはAPP_CODE_PATH_HOSTのパスになるのでコマンド実行時には注意!
特に複数サイトを同時表示が必要な場合だけにしたほうが楽ね。