はじめに
本番環境(エックスサーバー)には将来デプロイ予定のため、
開発環境に特化した内容です。
前提条件
▪️ M1/M2 Mac(Apple Silicon)
▪️ macOSに Docker Desktop インストール済み
⭐️ ディレクトリ構成
プロジェクト直下に以下の構成を用意:
Laravel_app/
├── docker/
│ ├── apache/
│ │ └── default.conf
│ ├── db/
│ │ └── my.cnf
│ └── php/
│ └── Dockerfile
├── docker-compose.yml
├── src/ ← Laravel本体
└── README.md
⭐️ 手順
✅ 1:Dockerfile(docker/php/Dockerfile)
FROM php:8.2-apache
# 必要なPHP拡張
RUN apt-get update && apt-get install -y \
libpng-dev libjpeg-dev libfreetype6-dev \
libonig-dev libzip-dev zip unzip \
&& docker-php-ext-install pdo_mysql mbstring bcmath gd zip
# Apacheのmod_rewriteを有効化
RUN a2enmod rewrite
# 作業ディレクトリ
WORKDIR /var/www/html
# 権限調整
RUN chown -R www-data:www-data /var/www/html
# composerインストール
COPY --from=composer:2 /usr/bin/composer /usr/bin/composer
✅ 2:Apache設定(docker/apache/default.conf)
docker/apache/default.conf
<VirtualHost *:80>
DocumentRoot /var/www/html/public
<Directory /var/www/html/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
✅ 3:DB設定(docker/db/my.cnf)
docker/db/my.cnf
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
✅ 4:docker-compose.yml
docker-compose.yml
version: '3.8'
services:
app:
build:
context: .
dockerfile: docker/php/Dockerfile
container_name: task-reminder-app # 「アプリ名+app」がおすすめ
volumes:
- ./src:/var/www/html
- ./docker/apache/default.conf:/etc/apache2/sites-available/000-default.conf
ports:
- "8080:80"
depends_on:
- db
db:
image: mariadb:10.5
container_name: task-reminder-db # 「アプリ名+db」がおすすめ
volumes:
- dbdata_task_reminder:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
environment:
MYSQL_ROOT_PASSWORD: root # 開発はrootでOK
MYSQL_DATABASE: task_reminder # 開発のDB名
MYSQL_USER: laravel_user # 開発のユーザー名
MYSQL_PASSWORD: password123 # 開発のパスワード
ports:
- "3307:3306" # portsは被らないように注意
phpmyadmin:
image: phpmyadmin/phpmyadmin
platform: linux/amd64 # M1MacBookなら必要
container_name: task-reminder-phpmyadmin # 「アプリ名+phpmyadmin」がおすすめ
ports:
- "8081:80"
environment:
PMA_HOST: db
PMA_USER: laravel_user # dbと合わせる
PMA_PASSWORD: password123 # dbと合わせる
depends_on:
- db
volumes:
dbdata_task_reminder: # 「dbdata+アプリ名」がおすすめ
✅ 5:.env(LaravelのDB設定)
「docker-compose.yml」に合わせる
/src/.env
DB_CONNECTION=mysql
DB_HOST=db # container_name ではなく "サービス名" を指定
DB_PORT=3306
DB_DATABASE=task_reminder
DB_USERNAME=laravel_user
DB_PASSWORD=password123
用途 |
.env のDB_PORT |
docker-composeの db.ports
|
---|---|---|
Laravelから接続 |
3306 にすべき ✅ |
ports: は 不要 or 3307:3306
|
外部(MacからDB)接続 |
.env に影響しない |
3307:3306 にすると便利 |
✅ 6:コンテナの初回起動
docker compose up -d --build
✅ 7:コンテナの2回目以降の起動 & コンテナに「入る」コマンド
コンテナの2回目以降の起動
# v2推奨(docker-compose.yml のあるディレクトリで)
docker compose up -d
# 変更がある時だけ再ビルド
# docker compose up -d --build
コンテナに「入る」コマンド
# 例:(サービス名=app、コンテナ名は task-reminder-app)
docker compose exec app bash
✅ 8:Laravelにアクセス
phpMyAdmin: http://localhost:8081