カテゴリ: Laravel 更新日: 2026/08/28

LaravelとDockerでMySQL連携する方法!初心者でもわかる永続化設定

LaravelとMySQLをDockerで連携する設定(永続化対応)
LaravelとMySQLをDockerで連携する設定(永続化対応)

先生と生徒の会話形式で理解しよう

生徒

「LaravelとMySQLをDockerで動かすってよく聞くんですが、どういうことですか?」

先生

「Dockerを使うと、パソコンに直接ソフトをインストールしなくても、LaravelやMySQLをまとめて動かせる環境を作れます。」

生徒

「データベースのデータは消えたりしないんですか?」

先生

「そこが重要なポイントで、永続化という設定をすればデータは安全に保存されます。」

生徒

「設定方法を教えてほしいです!」

先生

「では、DockerとLaravelを使ってMySQLを連携する方法を順番に見ていきましょう。」

1. Dockerとは何かをやさしく理解する

1. Dockerとは何かをやさしく理解する
1. Dockerとは何かをやさしく理解する

Dockerとは、アプリケーションを動かすための環境をまとめてパッケージ化できる仕組みです。通常はパソコンにPHPやMySQLをインストールする必要がありますが、Dockerを使えばそれらを一括で管理できます。

初心者の方は、Dockerを仮想のパソコンのようなものと考えるとわかりやすいです。その中でLaravelやMySQLが動いているイメージです。

2. LaravelとMySQLをDockerで動かす全体像

2. LaravelとMySQLをDockerで動かす全体像
2. LaravelとMySQLをDockerで動かす全体像

LaravelとMySQLをDockerで動かす場合、複数のコンテナを連携させます。コンテナとは、アプリごとに分かれた小さな環境です。

  • Laravel用コンテナ
  • MySQL用コンテナ

これらを連携させることで、Webアプリとデータベースが通信できるようになります。

3. docker-compose.ymlを作成する

3. docker-compose.ymlを作成する
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. 永続化とは何かを理解する

4. 永続化とは何かを理解する
4. 永続化とは何かを理解する

永続化とは、コンテナを停止してもデータが消えないようにする仕組みです。

何も設定しない場合、Dockerを停止するとMySQLのデータは消えてしまいます。これでは実用的ではありません。

そこでボリュームという仕組みを使って、データを外部に保存します。

5. MySQLのデータを永続化する設定

5. 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側のデータベース接続設定

6. Laravel側のデータベース接続設定
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. コンテナの起動と動作確認

7. コンテナの起動と動作確認
7. コンテナの起動と動作確認

設定ができたら、以下のコマンドでDockerを起動します。


docker-compose up -d

ブラウザでアクセスしてLaravelが表示されれば成功です。


Laravelのトップページが表示されます

8. 永続化ができているか確認する

8. 永続化ができているか確認する
8. 永続化ができているか確認する

一度コンテナを停止して再起動してみましょう。


docker-compose down
docker-compose up -d

データベースの内容が消えていなければ、永続化が成功しています。

これは、ボリュームによってデータが安全に保存されているためです。

9. 初心者がつまずきやすいポイント

9. 初心者がつまずきやすいポイント
9. 初心者がつまずきやすいポイント

初心者の方がよく間違えるポイントを解説します。

  • DB_HOSTはlocalhostではなくサービス名を使う
  • ボリューム設定を忘れるとデータが消える
  • ポート番号の重複に注意する

これらを意識することで、トラブルを防ぐことができます。

カテゴリの一覧へ
新着記事
New1
PHP
PHPで日本語の曜日を表示する方法を解説!配列を使った曜日変換の定番コード
New2
Symfony
Symfonyでバリデーションエラーを表示する方法!初心者でもわかるテンプレート活用術
New3
Laravel
Laravelのマイグレーションエラーの原因と解決方法を完全ガイド
New4
Laravel
Laravelのrefreshとfreshの違いを初心者でもわかる解説
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのインストール方法まとめ!ComposerとLaravel Installerの使い方
No.2
Java&Spring記事人気No2
Laravel
Laravel通知機能の決定版!特定のユーザーにのみ通知を送る認可制御を初心者向けに徹底解説
No.3
Java&Spring記事人気No3
Laravel
Laravelのルーティングの基本構文と書き方をやさしく解説!初心者でも理解できるWebルートの仕組み
No.4
Java&Spring記事人気No4
Laravel
Laravelのプロジェクト構造を理解しよう!初心者向けディレクトリ解説
No.5
Java&Spring記事人気No5
Laravel
Laravelでログを出力する方法(Monolog・storage/logs)
No.6
Java&Spring記事人気No6
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.7
Java&Spring記事人気No7
Laravel
Laravelのエラー画面をカスタマイズする方法!errors/xxx.blade.phpの使い方を初心者向けに解説
No.8
Java&Spring記事人気No8
CodeIgniter
CodeIgniterコントローラでログを出力する方法完全ガイド!初心者でもわかるエラー記録とデバッグ