LaravelアプリケーションをDocker Composeを使ってコンテナ化する方法について、詳細かつ包括的に解説します。DockerとDocker Composeを使用することで、開発環境を簡単に構築・管理することができ、異なる環境間での一貫性を保ちながら開発が進められます。この記事では、LaravelをDocker Composeでセットアップする手順をステップバイステップで説明します。
1. DockerとDocker Composeのインストール
まず、DockerとDocker Composeをインストールする必要があります。以下はその手順です。
Dockerのインストール
-
Dockerの公式サイト(https://www.docker.com/get-started)からインストーラーをダウンロードし、インストールします。
-
インストール後、ターミナルを開き、以下のコマンドを実行してDockerが正しくインストールされているか確認します。
bashdocker --version
正常にインストールされていれば、Dockerのバージョンが表示されます。
Docker Composeのインストール
Docker Composeは、複数のコンテナを定義して管理するツールです。Docker Composeもインストールする必要があります。
-
以下のコマンドを使ってインストールします。
bashsudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
インストール後、以下のコマンドでバージョンを確認します。
bashdocker-compose --version
2. Laravelプロジェクトの作成
Dockerを使用してLaravelアプリケーションをセットアップする前に、まずはLaravelのプロジェクトを作成します。
-
LaravelのインストールにはComposerが必要です。もしまだインストールしていない場合は、以下のコマンドを使ってインストールします。
bashcurl -sS https://getcomposer.org/installer | php
-
次に、Laravelプロジェクトを作成します。
bashcomposer create-project --prefer-dist laravel/laravel my-laravel-app
これで「my-laravel-app」という名前のLaravelプロジェクトが作成されます。
3. Dockerfileの作成
Laravelアプリケーションをコンテナ化するために、Dockerfile
を作成します。このファイルは、アプリケーションが動作するための環境を構築するための設定を定義します。
-
my-laravel-app
ディレクトリ内にDockerfile
を作成します。dockerfile# 使用するベースイメージ FROM php:8.1-fpm # 必要な拡張をインストール RUN apt-get update && apt-get install -y libpng-dev libjpeg-dev libfreetype6-dev zip git \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install gd pdo pdo_mysql # Composerをインストール COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer # 作業ディレクトリの設定 WORKDIR /var/www # Laravelアプリケーションをコピー COPY . . # 権限の設定 RUN chown -R www-data:www-data /var/www
このDockerfile
は、PHPと必要な拡張、そしてLaravelに必要なライブラリをインストールします。Composerもインストールして、アプリケーションの依存関係を管理できるようにしています。
4. docker-compose.ymlの作成
次に、Docker Composeを使用してLaravelのサービスを定義します。docker-compose.yml
ファイルを作成し、必要なコンテナ(アプリケーション、データベースなど)を設定します。
-
my-laravel-app
ディレクトリ内にdocker-compose.yml
を作成します。yamlversion: '3.8' services: app: build: context: . dockerfile: Dockerfile container_name: laravel-app working_dir: /var/www volumes: - .:/var/www networks: - laravel-network ports: - "8000:8000" db: image: mysql:5.7 container_name: mysql-db environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: laravel MYSQL_USER: user MYSQL_PASSWORD: password volumes: - db-data:/var/lib/mysql networks: - laravel-network volumes: db-data: networks: laravel-network: driver: bridge
この設定で、app
サービスがLaravelアプリケーションを実行するコンテナ、db
サービスがMySQLデータベースのコンテナになります。ports
オプションで、ホストのポート8000をコンテナのポート8000にマッピングし、ブラウザからhttp://localhost:8000
でLaravelアプリケーションにアクセスできるようにしています。
5. .envファイルの設定
Laravelの.env
ファイルはデータベース接続情報などを管理する重要なファイルです。Docker ComposeのMySQLコンテナと接続するために、以下のように設定します。
-
.env
ファイルを開き、以下の設定を変更します。envDB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=laravel DB_USERNAME=user DB_PASSWORD=password
ここで、DB_HOST
はdocker-compose.yml
で設定したサービス名(この場合はdb
)に一致させる必要があります。
6. コンテナのビルドと起動
ここまで準備が整ったら、Docker Composeを使ってコンテナをビルドし、アプリケーションを起動します。
-
以下のコマンドでコンテナをビルドします。
bashdocker-compose build
-
次に、コンテナを起動します。
bashdocker-compose up -d
-d
オプションをつけることで、バックグラウンドでコンテナが起動します。
7. アプリケーションのセットアップ
コンテナが起動したら、Laravelの依存関係をインストールし、マイグレーションを実行します。
-
Laravelのコンテナに接続します。
bashdocker-compose exec app bash
-
Composerを使って依存関係をインストールします。
bashcomposer install
-
マイグレーションを実行してデータベースを設定します。
bashphp artisan migrate
これで、Docker環境内でLaravelアプリケーションが動作する準備が整いました。
8. アクセス確認
ブラウザでhttp://localhost:8000
にアクセスし、Laravelのウェルカムページが表示されれば、セットアップが成功しています。
終わりに
このように、Docker Composeを使ってLaravelアプリケーションをコンテナ化することで、開発環境のセットアップが簡単になり、環境に依存しない一貫したアプリケーション開発が可能となります。Dockerを使うことで、開発者はアプリケーションの動作環境を素早く構築でき、チームでの開発やデプロイが効率的になります。