LaravelとDockerでMySQL連携する方法!初心者でもわかる永続化設定
生徒
「LaravelとMySQLをDockerで動かすってよく聞くんですが、どういうことですか?」
先生
「Dockerを使うと、パソコンに直接ソフトをインストールしなくても、LaravelやMySQLをまとめて動かせる環境を作れます。」
生徒
「データベースのデータは消えたりしないんですか?」
先生
「そこが重要なポイントで、永続化という設定をすればデータは安全に保存されます。」
生徒
「設定方法を教えてほしいです!」
先生
「では、DockerとLaravelを使ってMySQLを連携する方法を順番に見ていきましょう。」
1. Dockerとは何かをやさしく理解する
Dockerとは、アプリケーションを動かすための環境をまとめてパッケージ化できる仕組みです。通常はパソコンにPHPやMySQLをインストールする必要がありますが、Dockerを使えばそれらを一括で管理できます。
初心者の方は、Dockerを仮想のパソコンのようなものと考えるとわかりやすいです。その中でLaravelやMySQLが動いているイメージです。
2. LaravelとMySQLをDockerで動かす全体像
LaravelとMySQLをDockerで動かす場合、複数のコンテナを連携させます。コンテナとは、アプリごとに分かれた小さな環境です。
- Laravel用コンテナ
- MySQL用コンテナ
これらを連携させることで、Webアプリとデータベースが通信できるようになります。
3. docker-compose.ymlを作成する
docker-compose.ymlは、複数のコンテナをまとめて管理するための設定ファイルです。
version: '3'
services:
app:
build: .
container_name: laravel_app
ports:
- "8000:8000"
volumes:
- .:/var/www
db:
image: mysql:8.0
container_name: mysql_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel_db
MYSQL_USER: user
MYSQL_PASSWORD: password
ports:
- "3306:3306"
この設定でLaravelとMySQLのコンテナが起動します。
4. 永続化とは何かを理解する
永続化とは、コンテナを停止してもデータが消えないようにする仕組みです。
何も設定しない場合、Dockerを停止するとMySQLのデータは消えてしまいます。これでは実用的ではありません。
そこでボリュームという仕組みを使って、データを外部に保存します。
5. MySQLのデータを永続化する設定
docker-compose.ymlにボリューム設定を追加します。
version: '3'
services:
db:
image: mysql:8.0
container_name: mysql_db
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: laravel_db
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
この設定により、MySQLのデータはdb_dataという場所に保存されます。コンテナを削除してもデータは残ります。
6. Laravel側のデータベース接続設定
Laravelでは.envファイルを使ってデータベース接続を設定します。
DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=user
DB_PASSWORD=password
DB_HOSTにdbと書いているのは、docker-composeで定義したサービス名を使っているためです。
7. コンテナの起動と動作確認
設定ができたら、以下のコマンドでDockerを起動します。
docker-compose up -d
ブラウザでアクセスしてLaravelが表示されれば成功です。
Laravelのトップページが表示されます
8. 永続化ができているか確認する
一度コンテナを停止して再起動してみましょう。
docker-compose down
docker-compose up -d
データベースの内容が消えていなければ、永続化が成功しています。
これは、ボリュームによってデータが安全に保存されているためです。
9. 初心者がつまずきやすいポイント
初心者の方がよく間違えるポイントを解説します。
- DB_HOSTはlocalhostではなくサービス名を使う
- ボリューム設定を忘れるとデータが消える
- ポート番号の重複に注意する
これらを意識することで、トラブルを防ぐことができます。