目的
LaravelPHPの開発環境をDockerを利用して構築します。
自前でdocker-composeとDockerfileを作成してもよかったのですが、「既にできているイメージを利用する」のはDockerのメリットの一つです。活用させていただきます。
参考
PHPフレームワーク「Laradock」で、手軽にLaravel+Dockerな開発環境を構築する
※ほとんど記事そのままです(助かりました)。個人的に欲しい情報を追加しています。
環境
Windows10
Docker Tool Box
実践
準備
Windows10の場合ユーザフォルダ直下に作成するのがおすすめです。
ここ以外に作成すると、Virtual Boxのパスが通ってなかったりして、何かと面倒です。
ユーザフォルダ直下から始めます。
user@xxx ~/
$ mkdir colejo
$ cd colejo
user@xxx ~/colejo
$ git init
Initialized empty Git repository in C:/Users/{ユーザ名}/colejo/.git/
user@xxx ~/colejo (master)
$ mkdir src
Laradockをダウンロード
user@xxx ~/colejo (master)
$ git submodule add https://github.com/Laradock/laradock.git
Cloning into 'C:/Users/{ユーザ名}/colejo/laradock'...
remote: Counting objects: 6289, done.
remote: Compressing objects: 100% (40/40), done.
remote: Total 6289 (delta 18), reused 29 (delta 7), pack-reused 6241
Receiving objects: 100% (6289/6289), 6.01 MiB | 393.00 KiB/s, done.
Resolving deltas: 100% (3298/3298), done.
Checking connectivity... done.
warning: LF will be replaced by CRLF in .gitmodules.
The file will have its original line endings in your working directory.
user@xxx ~/colejo (master)
$ ls
laradock/ src/
.envを作成
Laradoc関連ファイルは「laradock」フォルダに格納されています。
user@xxx ~/colejo (master)
$ cd laradock/
「env-example」を「.env」という名前でコピーして利用します。
user@xxx ~/colejo/laradock (master)
$ cp env-example .env
.envの修正
### Application Path ###################################################################################################
# Point to your code, will be available at `/var/www`.
APPLICATION=../src/
MySQLの設定
/laradock/.env にMySQLのバージョン(2017年12月現在8.0)、データベース名、ユーザ名、ユーザ名のパスワード、ポート番号(3306のまま)、ルートのパスワードを設定します。
セキュリティを考慮してMySQLの初期設定を変更します。
先ほどコピーしたlaradockフォルダ下にある.envファイルを開きます。
### MYSQL ##############################################################################################################
MYSQL_VERSION=8.0
MYSQL_DATABASE={任意のデータベース名 例:colejo}
MYSQL_USER={任意のユーザ名 例:colejo}
MYSQL_PASSWORD={任意のパスワード 例:colejo_pass}
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD={任意のrootパスワード 例:colejo_root_pass}
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
docker-composeコマンドでビルドしてコンテナを立ち上げる
Laradockにはapacheやphpmyadmin、redisなど様々なサービスがあります。
ここではシンプルにnginxとmysqlのみを立ち上げます。
user@xxx ~/colejo/laradock (master)
$ docker-compose up -d nginx mysql
... インストール たくさんメッセージ ...
Recreating laradock_applications_1 ...
Recreating laradock_mysql_1 ...
Recreating laradock_applications_1
Recreating laradock_applications_1 ... done
Recreating laradock_workspace_1 ...
Recreating laradock_workspace_1 ... done
Recreating laradock_php-fpm_1 ...
Recreating laradock_php-fpm_1 ... done
Recreating laradock_nginx_1 ...
Recreating laradock_nginx_1 ... done
ダウンロード、ビルド、コンテナ起動までやってくれちゃいます…
ブラウザで
http://192.168.99.100
にアクセスするとnginx 404エラーが表示されるはずです。
user@xxx ~/colejo/laradock (master)
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
530b4296be85 laradock_nginx "nginx" 56 seconds ago Up 55 seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp laradock_nginx_1
80b9ab70dc63 laradock_php-fpm "docker-php-entryp..." 57 seconds ago Up 56 seconds 9000/tcp laradock_php-fpm_1
6630e9bd63f6 laradock_workspace "/sbin/my_init" 57 seconds ago Up 56 seconds 0.0.0.0:2222->22/tcp laradock_workspace_1
949ab9ef9495 laradock_mysql "docker-entrypoint..." 58 seconds ago Up 57 seconds 0.0.0.0:3306->3306/tcp laradock_mysql_1
laradock_nginx_1
laradock_nginx_1
laradock_workspace_1
laradock_mysql_1
のステータスが「Up」であれば、起動できています。
Laravelプロジェクトを作成
user@xxx ~/colejo/laradock (master)
$ docker-compose exec workspace composer create-project --prefer-dist laravel/laravel ./
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Installing laravel/laravel (v5.5.22)
- Installing laravel/laravel (v5.5.22): Downloading (100%)
Created project in ./
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
... 略 ...
> @php artisan key:generate
Application key [base64:{キー}] set successfully.
$
ローカル環境からDocker上でコマンドを実行しています。
Docker上でコマンドを実行しなくてもインストールできますが、あとあと謎の不具合に悩むことになりかねません!!!
必ずDocker上でLaravelのプロジェクトを作成してください!!!
※詳細はDocker Tips コンテナ上でコマンドを実行する(dockerとdocker-composeを使った場合)を参照してください。
ここで
http://192.168.99.100/
にアクセスすると、Laravelのウェルカム画面が表示されます。
MySQLの設定を反映
/laradock/.env に設定したMySQL
### MYSQL ##############################################################################################################
MYSQL_VERSION=8.0
MYSQL_DATABASE={任意のデータベース名 例:colejo}
MYSQL_USER={任意のユーザ名 例:colejo}
MYSQL_PASSWORD={任意のパスワード 例:colejo_pass}
MYSQL_PORT=3306
MYSQL_ROOT_PASSWORD={任意のrootパスワード 例:colejo_root_pass}
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d
これを、/src/.envファイルに反映します。
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE={.envで設定したデータベース名 例:colejo}
DB_USERNAME={.envで設定したユーザ名 例:colejo}
DB_PASSWORD={.envで設定したパスワード 例:colejo_pass}
ついでにLaravelのdatabase.phpの値も変更します。
/src/config/database.phpを開きます。
// 略
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
],
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', 'mysql'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', '{.envで設定したデータベース名 例:colejo}'),
'username' => env('DB_USERNAME', '{.envで設定したユーザ名 例:colejo}'),
'password' => env('DB_PASSWORD', '{.envで設定したパスワード 例:colejo_pass}'),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'strict' => true,
'engine' => null,
],
// 略
Laravelからデータベースにアクセスできることを確認します。
Laravelにはマイグレーションという機能があり、テーブルのスキーマもプログラムで管理できます。
マイグレーションを行う際に、Laravelからデータベースにアクセスするため、確認ついでに実行します。
docker-compose exec workspace php artisan migrate
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated: 2014_10_12_100000_create_password_resets_table
これでLaravelの開発環境が整いました!