【Laravel】DockerでLaravel+Nginx+MySQLの環境構築をする

作成日: 更新日:

開発環境

  • Visual Studio Code:version 1.73.0
  • OS:Windows10
  • Docker Engine:v23.0.5

DockerでLaravel+Nginx+MySQLの環境構築をする手順

DockerでLaravel+Nginx+MySQLの環境構築をする手順について解説していきます。

ディレクトリ構成

今回のディレクトリ構成は下記を目指していきます。

1# Directory structure
2project-root/
3├── docker/
4│   ├── web/             # PHPコンテナ(Dockerfile)
5│   ├── database/        # MySQLコンテナ(Dockerfile)
6│   └── nginx/           # Nginxコンテナ(Dockerfile + 設定ファイル)
7├── web/                  # Laravelプロジェクトを配置するディレクトリ
8└── docker-compose.yml    # Docker Composeファイル

docker-compose.ymlを作成

まずはdocker-compose.ymlを作成していきます。 ルートディレクトリの直下にdocker-compose.ymlを作成し、以下のようにしてください。

1# docker-compose.yml
2version: '3.8'
3
4services:
5  web:
6    build:
7      context: .
8      dockerfile: docker/web/Dockerfile
9    container_name: laravel_web
10    ports:
11      - "9000:9000"
12    volumes:
13      - ./web:/var/www/html
14    depends_on:
15      - db
16
17  db:
18    build:
19      context: .
20      dockerfile: docker/database/Dockerfile
21    container_name: laravel_db
22    environment:
23      MYSQL_ROOT_PASSWORD: root
24      MYSQL_DATABASE: laravel_db
25      MYSQL_USER: laravel_user
26      MYSQL_PASSWORD: laravel_password
27    ports:
28      - "3306:3306"
29    volumes:
30      - db_data:/var/lib/mysql
31
32  nginx:
33    build:
34      context: .
35      dockerfile: docker/nginx/Dockerfile
36    container_name: laravel_nginx
37    ports:
38      - "8000:80"
39    volumes:
40      - ./web:/var/www/html
41      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
42    depends_on:
43      - web
44
45volumes:
46  db_data:

PHPコンテナを作成

次にPHPコンテナを作成していきます。 docker/web/ディレクトリの直下にDockerfileを作成し、以下のようにしてください。

1# docker/web/Dockerfile
2FROM php:8.2-fpm
3
4WORKDIR /var/www/html
5
6RUN apt-get update
7RUN apt-get install -y \
8    zip unzip curl \
9    && docker-php-ext-install pdo pdo_mysql
10
11COPY --from=composer:latest /usr/bin/composer /usr/bin/composer

MySQLコンテナを作成

次にMySQLコンテナを作成していきます。 docker/database/ディレクトリの直下にDockerfileを作成し、以下のようにしてください。

1# docker/database/Dockerfile
2FROM mysql:8.0

Nginxコンテナを作成

次にNginxコンテナを作成していきます。 docker/nginx/ディレクトリの直下にDockerfileを作成し、以下のようにしてください。

1# docker/nginx/Dockerfile
2FROM nginx:alpine
3COPY ./docker/nginx/default.conf /etc/nginx/conf.d/default.conf

docker/nginx/ディレクトリの直下にdefault.confを作成し、以下のようにしてください。

1# docker/nginx/default.conf
2server {
3    listen 80;
4    server_name localhost;
5    root /var/www/html/public;
6
7    index index.php index.html;
8
9    location / {
10        try_files $uri $uri/ /index.php?$query_string;
11    }
12
13    location ~ \.php$ {
14        fastcgi_pass web:9000;
15        fastcgi_index index.php;
16        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
17        include fastcgi_params;
18    }
19}

Laravelをインストール

次にLaravelをインストールしていきます。 まずは以下のコマンドでプロジェクトディレクトリに移動します。

1# command
2cd project-root

以下のコマンドでコンテナを起動します。

1# command
2docker-compose up -d

以下のコマンドでWebコンテナに入ります。

1# command
2docker-compose exec web bash

以下のコマンドでLaravelをインストールします。

1# command
2composer create-project laravel/laravel .

Laravel環境設定

次にLaravelの環境設定をしていきます。 まずは.env設定を修正していきます。

1# .env
2DB_CONNECTION=mysql
3DB_HOST=db
4DB_PORT=3306
5DB_DATABASE=laravel_db
6DB_USERNAME=laravel_user
7DB_PASSWORD=laravel_password

次にディレクトリの権限設定をしていきます。 まずはwebコンテナに入ります。

1# command
2docker-compose exec web bash

次にコンテナ内で以下のコマンドを実行し、権限を変更していきます。

1# command
2chown -R www-data:www-data storage bootstrap/cache
3chmod -R 775 storage bootstrap/cache

次にLaravelのマイグレーションを実行していきます。

1# command
2php artisan migrate

ブラウザでhttp://localhost:8000にアクセスし、Laravelアプリケーションの初期画面が表示されていれば成功です。

まとめ

今回はDockerでLaravelの環境構築をする手順について解説していきましたが、いかがだったでしょうか。 個人開発のみであればDockerは不要かもしれませんが、Dockerコンテナで開発環境を構築することにより、複数人でプロジェクトを進める場合でも同じ環境で開発を進めることができます。 Dockerを使った開発は必須となりつつありますので、是非、チャレンジしてみてください。

【Laravel】DockerでLaravel+Nginx+MySQLの環境構築をする | いっしー@Webエンジニア