Contents
Laravel アプリ デプロイ Docker 手順:ローカルから本番環境までの一貫した手順
LaravelアプリのDockerデプロイは、開発者にとって効率的な環境構築と再現性を確保する重要な技術です。特にローカル環境から本番環境への移行において、バージョン対応やセキュリティ設定など、多くのポイントが存在します。この記事では、DockerとLaravelのバージョン対応確認からキャッシュクリア手順までを具体的に解説し、実務で即活用できる知識をお伝えします。
DockerとLaravelのバージョン対応確認
LaravelとDockerのバージョンは互換性が高くない場合もあります。環境構築の初期段階で適切な組み合わせを選び、トラブルを未然に防ぐ必要があります。
以下に代表的なバージョン対応表を示します。MySQLイメージ(mysql:8.0)とLaravelバージョンの互換性については、Laravel公式ドキュメントで確認することが推奨されます。
|
1 2 3 4 5 6 |
| Laravelバージョン | 推奨PHPバージョン | 対応Dockerイメージ | MySQLイメージとの互換性 | |------------------|------------------|----------------------------|------------------------| | **Laravel 10** | PHP 8.1+ | php:8.1-fpm | ✔️ mysql:8.0と動作可能 | | **Laravel 9** | PHP 8.0+ | php:8.0-fpm | ✔️ mysql:8.0と動作可能 | | **Laravel 8** | PHP 7.4+ | php:7.4-fpm | ✔️ mysql:8.0と動作可能 | |
要点:Dockerイメージのバージョン選定は、Laravel公式ドキュメントに基づくことが重要です。特にPHPバージョンの不一致やMySQL画像との互換性不足はエラーにつながるため、事前に確認してください。
Dockerfile・docker-compose.ymlの作成手順
アプリケーションとデータベースを同時に起動できるようにするには、Dockerfileとdocker-compose.ymlの適切な設定が不可欠です。ローカル環境での動作確認も含めて具体的な手順を解説します。
ベースイメージ選定のポイント
Dockerイメージは公式PHPイメージを使用するのが一般的ですが、Laravelアプリに必要な拡張機能(例:pdo_mysql)を事前にインストールしておく必要があります。以下が基本的なDockerfileのテンプレートです。
|
1 2 3 4 5 6 7 8 9 10 |
FROM php:8.1-fpm RUN apt-get update && apt-get install -y \ libpng-dev \ libjpeg-dev \ libpq-dev \ && docker-php-ext-install pdo_mysql exif pcntl COPY . /var/www/html |
サービス構成のベストプラクティス
docker-compose.ymlでは、アプリケーションとデータベースを同時に起動できるようにします。以下が基本的な構成例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
version: '3' services: app: build: . ports: - "8000:8000" volumes: - .:/var/www/html depends_on: - db db: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: password MYSQL_DATABASE: laravel volumes: - db_data:/var/lib/mysql volumes: db_data: |
要点:
depends_onを設定することで、データベースが起動した後にアプリケーションが起動されるように制御できます。
.envファイル設定とセキュリティ対策
環境変数の管理は特に本番環境において重要です。不正アクセスや情報漏洩を防ぐために、.envファイルの分離管理と暗号化技術を活用しましょう。
環境変数の分離管理方法
ローカル環境と本番環境で使用する.envファイルを分離します。例えば以下のように設定することで、切り替えが容易になります。
.env.local: ローカル開発用.env.prod: 本番環境用
|
1 2 3 4 |
APP_ENV=production DB_HOST=db DB_PASSWORD=secure_password |
秘密鍵の安全な保存手法
Dockerではdocker secretや外部に分離した設定ファイル(例:secrets.env)を活用することで、秘密情報をコンテナ内に直接記載せずに管理できます。
データベースマイグレーション処理
データベースのマイグレーションはDockerコンテナ内で実行します。既存データとの整合性も考慮しながら確実に手順を踏みましょう。
コンテナ内でのマイグレーション実行
MySQLコンテナが起動したら、アプリケーションコンテナ内でマイグレーションを実行します。
|
1 2 |
docker-compose exec app php artisan migrate --force |
ロールバック時の注意点
ロールバックが必要な場合はphp artisan migrate:rollbackコマンドを使用しますが、本番環境では事前にテストデータやバージョン管理を確立する必要があります。
キャッシュクリアとコンテナ再構築コマンド
デプロイ時にキャッシュを削除し、最新の設定やコードを反映させることが重要です。docker-composeで効率的に実行できる手順を解説します。
キャッシュ削除のベストタイミング
.envファイルの変更や設定更新後は、以下のコマンドでキャッシュをクリアします。
|
1 2 3 |
docker-compose exec app php artisan config:clear docker-compose exec app php artisan cache:clear |
イメージ更新時の手動手順
Dockerイメージを更新する際には、buildとupコマンドの使い分けが重要です。
docker-compose build: ビルドイメージを作成docker-compose up -d: コンテナを再起動(デタッチドモード)
本番環境への移行チェックリスト
ローカルと本番環境の差異を把握し、トラブルを未然に防ぐための具体的なチェックポイントを整理します。
ローカルと本番環境の差異点
以下のような差異が発生する可能性があるため、事前に確認することが重要です。
- ドメイン設定:ローカルでは
localhostだが、本番環境はドメイン名 - セキュリティ設定:CORSやHTTPSの導入が異なる場合あり
- 環境変数の値:本番環境で使用する値を分離管理(例:DBパスワード)
- 自動スケーリング:Kubernetesなどのクラスタ管理が必要なケース
監視設定の導入方法
Dockerログを収集するには、以下のような外部ツールと連携します。特定ベンダーの推奨事項は含まず、一般的に使用されるツールの一覧を示します。
- Prometheus:コンテナのメトリクスを監視
- Grafana:可視化ツールとして使用可能
- ELK Stack (Elasticsearch, Logstash, Kibana):ログ管理に活用
まとめ
本記事で解説したポイントを確認してみましょう。
- DockerとLaravelのバージョン対応を事前に確認し、不具合を防ぐ
Dockerfile・docker-compose.ymlを作成し、ローカル環境での動作確認を実施.envファイルは分離管理し、本番環境で安全な設定を行う- マイグレーション処理とキャッシュクリアはデプロイ手順に組み込む
- 本番環境への移行時は差異点をチェックリスト化し、監視体制を整える
記事内のサンプルコードを参考に、自身のプロジェクトでDockerデプロイを試してみましょう。