Docker X Laravel ハンズオンイベントを主催して分かったことまとめ

## イベント

### DockerでLaravelのローカル環境を構築するハンズオン(オンライン)

- https://php-builders.connpass.com/event/211985

合計65人の方に参加申し込みいただきました。ありがとうございます🙏
discordのイベントチャンネルも50人以上オンラインになっておりハンズオンにしては大規模な開催となり嬉しく思います。

約12名の方に一緒にハンズオンしていただき、全員ハンズオン成功しました。

### PHP Builders(ぴーえっちぴー びるだーず)

PHPerによる、PHPerのための、PHPを勉強する勉強会コミュニティです。
教えたい/教わりたい/勉強したい方を歓迎してます！

connpass内にDiscordグループの招待リンクがあります。
質問や相談、雑談などもできますので、気軽にご参加ください。

- https://php-builders.connpass.com

## 資料

- ハンズオン資料記事: https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4
- 完成したリポジトリ: https://github.com/ucan-lab/docker-laravel-handson

## 宣伝

LaravelのOSSパッケージ開発を行なってます。
よければStarいただけると嬉しいです。

- https://github.com/ucan-lab/docker-laravel
- https://github.com/ucan-lab/laravel-dacapo

## ハンズオン参加レポート

ガミネさん([@gaminessium](https://twitter.com/gaminessium))が参加レポートを書いてくださりました🙏

- https://gaminessium.github.io/2021/05/02/laravel-handson-202105

## ハンズオン中の問題

ハンズオン中に発生したトラブルをまとめした。

### docker compose コマンドがない

`docker compose` コマンドは、docker desktop 3.2.1以降に技術プレビュー版としてリリースされた新しい `docker` コマンドのサブコマンドです。
Docker for Mac, Docker for Windowsを予めアップデートしておく必要がある。

### docker compose down -v がバグってる

`docker compose` は技術プレビュー版のためか名前付きボリュームが削除されないバグがある。

- https://github.com/docker/compose-cli/issues/1553
- https://github.com/docker/compose-cli/pull/1618

修正済みですが、記事執筆時点(v1.0.14)ではまだリリースされてない模様です。

### 謎のエラー

ハンズオン中にでた謎のエラーです。
実はリハーサルしてて同じエラーが出ていました。結局原因はわからないままですがdocker desktopをrestartすることで解決しました。

- [【Docker】Error response from daemon: invalid mount config for type "bind": bind source path does not exist](https://qiita.com/ucan-lab/items/7c0ca7db70deb56ad4fa)

### マイグレーションでエラー

このエラーが出た時は、原因わからなくて少し焦ってたんですがチャットサポートしてくれた方が教えてくださりました。

```
$ docker compose exec app bash
root@28e246f56b19:/work# php artisan migrate

   Illuminate\Database\QueryException 

  SQLSTATE[HY000] [1130] Host '172.22.0.2' is not allowed to connect to this MySQL server (SQL: select * from information_schema.tables where table_schema = laravel_local and table_name = migrations and table_type = 'BASE TABLE')

  at vendor/laravel/framework/src/Illuminate/Database/Connection.php:678
    674▕         // If an exception occurs when attempting to run a query, we'll format the error
    675▕         // message to include the bindings with SQL, which will make this exception a
    676▕         // lot more helpful to the developer instead of just the database's errors.
    677▕         catch (Exception $e) {
  ➜ 678▕             throw new QueryException(
    679▕                 $query, $this->prepareBindings($bindings), $e
    680▕             );
    681▕         }
    682▕ 
```

> このエラーが発生した場合は `my.cnf` を作成する前に `docker compose up -d` でビルドしてしまった可能性が高いです。
(って自分のハンズオン記事の補足に書いてありました...)

```
$ docker-compose down --volumes
$ docker compose build db
$ docker compose up -d
```

`docker compose down --volumes` は名前付きボリュームを削除してくれない問題がある

- https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4#%E3%83%9E%E3%82%A4%E3%82%B0%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AE%E8%A3%9C%E8%B6%B3

### Firefoxでアクセスできない

![Capture_2021-05-01_20.15.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/52879/c918431b-672e-89de-35dd-b81ed9464210.png)

普段Firefox使ってなかったので知らなかったです。
これはとても勉強になりました。

- https://tenforward.hatenablog.com/entry/20070810/1186724991

公開ポート番号を80から8080など別の番号に変更してもアクセスできるみたいです。

### ネットワーク回線遅い問題

docker pullやcomposer install等、ネットワーク回線によってなかなか進めない人がいた。
これは各家庭にnuro光を導入してもらうことで解決。

予めdockerイメージをpullしておいたり、ネットワーク使う箇所は質問タイムや解説タイムに使うといいかもしれないです。

### 雷は防げない

当日は雷の鳴る中のハンズオンイベントとなりました。
雨の音や雷の音が響く中、ハンズオンイベントが進められていました。

何かしらトラブルは起きるだろうと予想していましたが、参加者の中に停電が発生してしまう方がいました。
ノートPCは生きててもルーター落ちたら通信できなくて詰みますね...

## 質問

ハンズオン中に出た質問をまとめます。

### phpMyAdminを入れるにはどうしたらいいか？

今回のハンズオンの対象ではないですが、そんなこともあろうかと記事を書いておきました。

- [Docker x Laravel phpMyAdmin のコンテナを構築する](https://qiita.com/ucan-lab/items/a0c8d6d73aca03325362)

### MySQLのGUIクライアントで接続したいのですがどうしたらいいか？

Sequel Proという便利なMySQLのGUIクライアントツールがありますが、MySQL8に対応できていませんでした。
後継アプリのSequel Aceというアプリを紹介している記事があったのでご紹介します。

- [Sequel AceでMySQLに接続する(Sequel Proの後継)](https://qiita.com/ucan-lab/items/b1304eee2157dbef7774)

### 最小限の環境でLaravelを動かしてみたい

`docker-compose.yml` 1ファイルでLaravel環境を作ることもできます。
webサーバーとdbサーバーなしの構成です。

- [Docker x Laravel 脅威の1ファイル！最小構成でローカル開発環境を構築する](https://qiita.com/ucan-lab/items/11ab92b672e3fa2d9bdb)

## 感想

人数多かった割には大きな問題が起こることなく時間通りにハンズオン進めたのでとてもよかったです。
知らないエラーにも出会えて、私自身もとても勉強になりました。

都合が悪く参加できなかった方もいらっしゃるので、機会があればまたイベントを開催したいと思います。