【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 /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を使った開発は必須となりつつありますので、是非、チャレンジしてみてください。