【初心者】LaradockでLaravelの開発環境を簡単構築


LaradockでLaravelアプリの開発環境を構築する際に、何度かのつまづきがありましたが、色々な参考サイトの情報をつなぎ合わせ、何とか解決に至りました。その備忘録です。
(特にphpmyadminからmysqlへの接続でコケたことが記事化の要因でした)


※本記事では、Laradock内の workspace nginx mysql phpmyadminのみの使用について記載しています。

リスペクトな記事

この記事を作成するにあたり、参考にした記事です。

前提条件

下記がインストールされている

  • docker

  • docker-compose

  • git

GitからLaradockをクローン

1)任意のディレクトリを作成(例:project) && 作成したディレクトリへ移動

$ mkdir project && cd project

2)上記ディレクトリへLaradockをGitクローン

project
$ git clone https://github.com/LaraDock/laradock.git

3)laradockへ移動 && .envファイルの作成

$ cd laradock && cp env-example .env

(補足)Gitクローンで上記ディレクトリproject内にlaradockディレクトリが生成されます。
.envは後に触りますので、所在を確認しておいてください。

今はこんな構成のはず
project /
 ┗laradock /
   ┗.env

(補足:はじめてLaradockを入れる場合は、この補足を無視してOK)
もし既にLaradockを導入している場合は(これから2つ目以上のLaradockを導入しようとしている場合は)、この時点でlaradock/.envCOMPOSE_PROJECT_NAME(コンテナ名)を編集した方がいいかもしれません。詳しくはコチラ

workspaceコンテナの起動とlaravelプロジェクトの作成

4)laradockディレクトリでworkspaceコンテナの起動
〜〜少し時間がかかります〜〜

laradock
$ docker-compose up -d workspace

5)workspaceコンテナが起動したら、コンテナへ入る
(11/7追記)※--user=laradockを忘れないように注意
もしDo not run Composer as root/super user!のアラートが出たらコチラ

laradock
$ docker-compose exec --user=laradock workspace bash

6)workspaceコンテナ内でlaravelプロジェクトを作成
(プロジェクト名は任意。例:sampleapp)

workspace
$ composer create-project laravel/laravel sampleapp

〜〜少し時間がかかります〜〜

7)終わったら、コンテナから出る

workspace
$ exit

8)一旦、コンテナを停止

laradock
$ docker-compose stop

この時点でprojectディレクトリ内にsampleappディレクトリが生成されています。また、laradocksampleappに、それぞれ.envファイルがあるので所在を確認。

今はこんな構成のはず
project /
 ┣laradock /
 ┃ ┗.env
 ┗sampleapp /
   ┗.env

.envファイルの変更

laradock.envファイルの変更

9)laradockディレクトリにある.envファイル内の一部を変更します。
まずは、ホストパス APP_CODE_PATH_HOST../から../sampleappへ変更。

laradock/.env
# APP_CODE_PATH_HOST=../
# my change ↓↓↓
APP_CODE_PATH_HOST=../sampleapp

10)データベースなどの保存先 DATA_PATH_HOST~/.laradock/dataから.laradock/dataへ変更(デフォルトではホームディレクトリ上に保存されるが、それをプロジェクトディレクトリのlaradock下へ変更)

laradock/.env
# DATA_PATH_HOST=~/.laradock/data
# my change ↓↓↓
DATA_PATH_HOST=.laradock/data

11)重要!次にmysqlのバージョンMYSQL_VERSION5.7に下げます。
latestのままだと、2019年10月時点では8.0がインストールされ、不都合があるらしい)
(バージョンを下げたことで、うまく行かない場合はコチラ

laradock/.env
# MYSQL_VERSION=latest
# my change ↓↓↓
MYSQL_VERSION=5.7

.envファイルを保存して閉じてください。

sampleapp.envファイルの変更

※ココから変更するのはsampleappディレクトリの方の.envファイルですので注意!(.envファイルはlaradockディレクトリとsampleappディレクトリの両方に存在して、ややこしいですがご注意ください)

12)アプリケーションの名前 APP_NAME を任意のものに変更(例:SampleApp)

sampleapp/.env
# APP_NAME=Laravel
# my change ↓↓↓
APP_NAME=SampleApp

13)laradock.envにあるmysqlの情報を参照しながら、
sampleapp.envにあるmysqlの情報を変更します。

(参照)laradock/.env
MYSQL_DATABASE=default
MYSQL_USER=default
MYSQL_PASSWORD=secret
MYSQL_PORT=3306
(変更)sampleapp/.env
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_PORT=3306
# DB_DATABASE=laravel
# DB_USERNAME=root
# DB_PASSWORD=
# my change ↓↓↓
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

.envファイルを保存して閉じてください。

コンテナの立ち上げ → ブラウザでの確認

14)laradockディレクトリから各コンテナを立ち上げます。

laradock
$ docker-compose up -d workspace nginx mysql phpmyadmin

〜〜多少、時間がかかります〜〜

15)コンテナの立ち上がりを確認(とくにmysqlもちゃんと立ち上がっているか)

laradock
$ docker ps                                                                             
CONTAINER ID        IMAGE                 COMMAND                  CREATED              STATUS              PORTS                                      NAMES
a501918bd6d5        laradock_nginx        "/bin/bash /opt/star…"   About a minute ago   Up About a minute   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   laradock_nginx_1
b3f1661bc327        laradock_php-fpm      "docker-php-entrypoi…"   About a minute ago   Up About a minute   9000/tcp                                   laradock_php-fpm_1
9b59af74dc9c        laradock_phpmyadmin   "/docker-entrypoint.…"   About a minute ago   Up About a minute   0.0.0.0:8080->80/tcp                       laradock_phpmyadmin_1
106b6d2851c0        laradock_workspace    "/sbin/my_init"          About a minute ago   Up About a minute   0.0.0.0:2222->22/tcp                       laradock_workspace_1
b50a3cc6b88a        laradock_mysql        "docker-entrypoint.s…"   About a minute ago   Up About a minute   0.0.0.0:3306->3306/tcp, 33060/tcp          laradock_mysql_1
d6e837f0f469        docker:dind           "dockerd-entrypoint.…"   About a minute ago   Up About a minute   2375-2376/tcp                              laradock_docker-in-docker_1

16)では、ブラウザからhttp://localhost/へアクセスを確認

sampleappディレクトリをいじってみる

試しにsampleappディレクトリをいじって、表示が変更できるかを確認。
Laravelヤッホーに変えて見ます。

17)sampleapp/resources/views/welcome.blade.phpをエディタで開き編集

sampleapp/resources/views/welcome.blade.php
<div class="title m-b-md">
  Laravel
</div>
    ↓↓↓
<div class="title m-b-md">
  ヤッホー
</div>

18)保存して、ブラウザをリフレッシュして、変更を確認

データベースmysqlへphpmyadminでアクセス

19)ブラウザでhttp://localhost:8080/へアクセス

20)ログインできるかを確認
ログイン情報は上記で設定した内容を参照

sampleapp/.env
DB_HOST=mysql
DB_USERNAME=default
DB_PASSWORD=secret

工程は以上です。

うまくいかなかった場合

一度、すべてのコンテナ、イメージ、ボリューム、ネットワークを削除して、やり直すことを提案します。

しかし、この方法で削除すると、本当に全部が消えるので、他のプロジェクトに関わるコンテナやイメージがある場合は、個々に削除してください。

全てのコンテナの停止

$ docker stop $(docker ps -q)

コンテナの一括削除

$ docker system prune

イメージ一括削除

$ docker rmi `docker images -q`
$ docker rmi `docker images -f "dangling=true" -q`

ボリュームの一括削除

$ docker volume prune

ネットワークの一括削除

$ docker network prune

別のプロジェクト(別のコンテナ名)で立ち上げる場合

どうぞ、こちらもご覧ください。

補足

(番外編)sampleappの所有者の変更


(11/7追記)
※下記に記載しているアラートの解決方法がわかりました。
※上記工程(5)で workspaceコンテナへ入るときに、--user=laradockを付けていないと、下記のアラートが表示されます。ちゃんとつけていたら「所有者の変更」はしなくて良いです。この補足事項は無視してOKです。

私の場合、laravelプロジェクトを作成した際に下記が表示された
Do not run Composer as root/super user! See https://getcomposer.org/root for details

そして、生成されたディレクトリsampleappは所有者がrootになっており、私が書き込みできなくなっていました。(この後にsampleapp内の.envファイルを変更しますが、書き込みができず進めませんでした)

project
$ ls -l
drwxr-xr-x 69 user user  4096 10月 13 08:29 laradock
drwxr-xr-x 12 root root 4096 10月 13 08:32 sampleapp

そこで、sampleappの所有者の変更をしました(所有者をrootからuserへ変更)。

project
$ sudo chown -R user sampleapp
[sudo] user のパスワード:

所有者を変更したことで、以降は問題なく進めることができました。

project
$ ls -l
drwxr-xr-x 69 user user  4096 10月 13 08:29 laradock
drwxr-xr-x 12 user root 4096 10月 13 08:32 sampleapp

(番外編)~/.laradock/data/mysqlの削除


(11/7追記)
※データベースなどの保存先 DATA_PATH_HOST~/.laradock/dataから.laradock/dataへ変更している場合は、この補足事項は無視してOKです。

上記でmysqlのバージョンを下げましたが、これにともない、ホームディレクトリ下にある.laradock/data/mysqlを削除した方が良いらしい。

$ sudo rm -rf ~/.laradock/data/mysql