Help us understand the problem. What is going on with this article?

Laravel & Docker 環境構築 with Laradock

はじめに

Laravelをdockerを使用して環境構築します。
vagrantを立ててコマンドを1つ1つ..ってやるのは非常に面倒(初学習者だとかなり時間がかかる)なので、Laradockを使うとかなり環境構築の時間を省けます。

では、やっていきましょう。

前提

Dockerはインストールしておいてください。
https://docs.docker.com/docker-for-mac/install/

1. 作業ディレクトリ作成 & Laradockのクローン

$ mkdir laravel_app
$ cd laravel_app
$ mkdir hoge_project # Laravelが配置される場所
$ git clone https://github.com/LaraDock/laradock.git

2. 環境変数の変更

laradockにある環境変数のサンプルファイルをコピーして、Laravelのインストール先の設定と、nginxのポート番号を変更します。

$ cd laradock
$ cp env-example .env
.env
### Paths #################################################

# Point to the path of your applications code on your host

# APP_CODE_PATH_HOST=../
APP_CODE_PATH_HOST=../hoge_project/

### NGINX #################################################

# NGINX_HOST_HTTP_PORT=80
NGINX_HOST_HTTP_PORT=3000

3. Dockerコンテナの実行

$ docker-compose up -d nginx mysql redis

ネットワークの影響で多少差はありますが、最初だけ25分前後かかりました。

Starting laradock_mysql_1            ... done
Starting laradock_redis_1            ... done
Starting laradock_docker-in-docker_1 ... done
Starting laradock_workspace_1        ... done
Starting laradock_php-fpm_1          ... done
Starting laradock_nginx_1            ... done

起動したらhttp://localhost:3000 にアクセスしてみましょう。
404エラーが表示されればOK。

4. Laravelのインストール

laradockのworkspaceにログインしてLaravelをインストールします。

$ docker-compose ps

           Name                          Command               State                      Ports
------------------------------------------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh            Up       2375/tcp
laradock_mysql_1              docker-entrypoint.sh mysqld      Up       0.0.0.0:3306->3306/tcp
laradock_nginx_1              nginx                            Up       0.0.0.0:443->443/tcp, 0.0.0.0:3000->80/tcp
laradock_php-fpm_1            docker-php-entrypoint php-fpm    Up       9000/tcp
laradock_phpmyadmin_1         /run.sh supervisord -n           Exit 0
laradock_redis_1              docker-entrypoint.sh redis ...   Up       0.0.0.0:6379->6379/tcp
laradock_workspace_1          /sbin/my_init                    Up       0.0.0.0:2222->22/tcp

workspaceのNameを確認してログイン

$ docker exec -it laradock_workspace_1 /bin/bash
root@f19315fd6:/var/www#
$ composer create-project --prefer-dist laravel/laravel ./

Installing laravel/laravel (v5.6.21)
  - Installing laravel/laravel (v5.6.21): Downloading (100%)
Created project in ./
> @php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 70 installs, 0 updates, 0 removals
  - Installing vlucas/phpdotenv (v2.5.0): Downloading (100%)
  - Installing symfony/css-selector (v4.1.1): Downloading (100%)
.
.
Generating optimized autoload files
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover
Discovered Package: fideloper/proxy
Discovered Package: laravel/tinker
Discovered Package: nunomaduro/collision
Package manifest generated successfully.
> @php artisan key:generate
Application key [base64:/rBs0vBIauYkQPUhKOfad2JIk3ohMdBbeCVaFewlLQ+s=] set successfully.

5. アクセス

http://localhost:3000 に再度アクセスしてこれが表示されればOK!
スクリーンショット 2018-07-05 10.23.27.png

6. MySQL接続設定

workspace上でマイグレーション実行

$ php artisan migrate

エラーが表示されなければ終了。

PDOException::("SQLSTATE[HY000] [2002] Connection refused")の対処

laradockではなくlaravelプロジェクトのほうの.envの修正が必要だそう。
(間違いやすいので注意)

.env
DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=default
DB_USERNAME=default
DB_PASSWORD=secret

SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client の対処

MySQLの認証方式の変更が必要だそう。

mysqlのコンテナIDをチェック。

$ docker ps
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                        NAMES
eb9734566dad        laradock_mysql        "docker-entrypoint.s…"   33 minutes ago      Up 23 minutes       0.0.0.0:3306->3306/tcp                       laradock_mysql_1

mysqlにログインする。

$ docker exec -it eb9734566dad /bin/bash
root@eb9734566dad:/#

$ mysql -u root -p
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

ユーザーの認証方式をチェックする。

mysql> SELECT user, host, plugin FROM mysql.user;
+------------------+-----------+-----------------------+
| user             | host      | plugin                |
+------------------+-----------+-----------------------+
| default          | %         | caching_sha2_password |
| root             | %         | caching_sha2_password |
| mysql.infoschema | localhost | mysql_native_password |
| mysql.session    | localhost | mysql_native_password |
| mysql.sys        | localhost | mysql_native_password |
| root             | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
6 rows in set (0.00 sec)

認証方式をcaching_sha2_passwordからmysql_native_passwordに変更する。

mysql> ALTER USER 'default'@'%' IDENTIFIED WITH mysql_native_password BY 'secret';
Query OK, 0 rows affected (0.19 sec)

MySQLが接続時の認証方式のデフォルト値を変更する。

my.cnf
# mysqlを抜けた後
$ vim mysql/my.cnf
[mysqld]
default_authentication_plugin= mysql_native_password # 追加

マイグレーション実行

$ docker-compose exec workspace bash
$ 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

おわりに

DB接続時のエラー対処を含めた記事が他になかったので、参考になれば幸いです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした