DockerではじめるLaravel開発環境構築ガイド

はじめに
-
今回自分自身の学習のためにDockerを使用したlaravelの環境構築を行ったので、備忘録を残しておきます。他の方の記事を読んでいた際に「コマンドは記載されているがどこに入力すればいいんだ？」などの悩みが多くあったので、その辺りも細かく記載していこうと思います。
※初心者の記事になりますので、間違い等ありましたらコメントにて教えていただけますと幸いです。

前提条件
-
- Docker Desktopがインストールされていること
Docker Desktopのインストール方法は下記の記事を参考にしてください。
 　
- Dockerの基礎知識がある程度あること
私は下記の記事を見て勉強を行いました。動画に時間は長いですが非常に分かりやすくDockerについて理解することができます。

ディレクトリ構造の概要
-
:::note info
ディレクトリは下記作業で作成していくのでこの段階で作成しておく必要はありません。
:::

```
php-app-test/
│
├── docker-config/
│   ├── nginx/
│   │   ├── default.conf
|   |   └── Dockerfile
│   └── php/
│       ├── Dockerfile
│       └── php.ini
├── .env                    
├── docker-compose.yml      
├── README.md               
└── my-app/                 
    │
    ...(laravelの要素が入る)  
```

環境構築の手順
-
#### １.プロジェクトディレクトリの作成
本記事ではルートディレクトリ配下にworkspaceというディレクトリを作成し構築を行っていきます。
 
1.ターミナルで以下を実行し任意のディレクトリへ移動する。
```bash:~
mkdir workspace
```
2.新しいプロジェクト用のディレクトリを作成する。
```bash:~/workspace
mkdir php-app-test
cd php-app-test
```
3.docker-configディレクトリを作成する。
```bash:~/workspace/php-app-test
mkdir docker-config
cd docker-config
```
nginxコンテナの作成
-

1.nginxディレクトリを作成する。
```bash:~/workspace/php-app-test/docker-config
mkdir nginx
cd nginx
```
2.Dockerfileをnginxディレクトリ配下に作成する。
```bash:docker-config/nginx
touch Dockerfile
```
3.VScodeでphp-app-testファイルを開きます。

4.作成したDockerfileに以下の通りに記述する。
```bash:nginx/Dockerfile
FROM alpine:3.6
RUN apk update && \
    apk add --no-cache nginx
RUN mkdir -p /run/nginx
CMD nginx -g "daemon off;"
```
5.nginx配下にdefault.confを作成する。
```bash:nginx
touch default.conf
```
6.作成したdefault.confに以下の通りに記述する。
```bash:nginx/default.conf
 server {
     listen 80;
     server_name localhost;
     root /var/www/public;
     index index.php index.html;
     allow all;
     client_max_body_size 10000M;
 
     access_log /var/log/nginx/ssl-access.log;
     error_log  /var/log/nginx/ssl-error.log;
 
     location / { 
         root /var/www/public;
         try_files $uri $uri/ /index.php$is_args$args;
     }
 
     location ~ \.php$ {
         try_files $uri =404;
         
         fastcgi_split_path_info ^(.+\.php)(/.+)$;
         fastcgi_pass web:9000;
         fastcgi_index index.php;
 
         include fastcgi_params;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         fastcgi_param PATH_INFO $fastcgi_path_info;

         add_header Access-Control-Allow-Origin *;
         add_header Access-Control-Allow-Methods "POST, GET, OPTIONS";
         add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";
         add_header Access-Control-Allow-Credentials true;
     }   
 }
 ```
 phpコンテナの作成
 -
 1.phpディレクトリをdocker-config配下に作成する。
 ```bash:docker-config
 mkdir php
 cd php
 ```
2.phpディレクトリにDockerfileを作成する。
```bash:docker-config/php
touch Dockerfile
```
3.作成したDockerfileに以下の通りに記述する。
```bash:php/Dockerfile
FROM php:8.1-fpm
WORKDIR /var/www
ADD . /var/www

RUN chown -R www-data:www-data /var/www

RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer

RUN apt-get update \
  && apt-get install -y \
  gcc \
  make \
  git \
  unzip \
  vim \
  libpng-dev \
  libjpeg-dev \
  libfreetype6-dev \
  libmcrypt-dev \
  libpq-dev \
  curl \
  gnupg \
  openssl \
  && docker-php-ext-install pdo_mysql mysqli \
  && docker-php-ext-configure gd --with-freetype --with-jpeg \
  && docker-php-ext-install -j$(nproc) gd \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*


COPY php.ini /usr/local/etc/php/


RUN curl -sL https://deb.nodesource.com/setup_18.x | bash - \
  && apt-get update \
  && apt-get install -y nodejs \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/* 

RUN npm install -g n \
  && n stable \
  && npm update -g npm
  ```
4.phpディレクトリ配下にphp.iniを作成する。
```bash:docker-config/php
touch php.ini
```
5.作成したphp.iniに以下の通りに記述する。
```bash:php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.language = "Japanese"
post_max_size = 500M
upload_max_filesize=500M
[xdebug]
```
.envファイルの作成
-
1.php-app-test配下に.envファイルを作成する。
```bash:workspace/php-app-test
touch .env
```
2.作成した.envファイルに下記の通りに記述する。
```bash:.env
MYSQL_DATABASE=development
MYSQL_ROOT_PASSWORD=root
MYSQL_USER=mysql
MYSQL_PASSWORD=mysql
TZ=Asia/Tokyo
```
docker-compose.ymlの作成
-
1.php-app-test配下にdocker-compose.ymlを作成する。
```bash:workspace/php-app-test
touch docker-compose.yml
```
2.作成したdocker-compose.ymlに下記の通り記述する。
```bash:docker-compose.yml
services:
  web: 
    container_name: myapp-php
    build: ./docker-config/php
    ports:
      - '5173:5173'
    volumes:
      - .:/var/www/
    depends_on:
      - mariadb

  nginx:
    container_name: myapp-nginx
    image: nginx
    build: ./docker-config/nginx
    ports:
      - "81:80"
    volumes:
      - .:/var/www/
      - ./docker-config/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - web

  mariadb:
    container_name: myapp-mariadb
    image: mariadb
    ports:
      - 3307:3306
    environment:
      MYSQL_DATABASE: ${MYSQL_DATABASE}
      MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
      MYSQL_USER: ${MYSQL_USER}
      MYSQL_PASSWORD: ${MYSQL_PASSWORD}
      TZ: ${TZ}
      
    volumes:
      - ./docker-config/mariadb/data:/var/lib/mysql
      - ./docker-config/mariadb/data/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./docker-config/mariadb/data/sql:/docker-entrypoint-initdb.d
```
laravelのインストール
-
1.以下を実行し、作成したコンテナを起動する。
```bash:workspace/php-app-test
docker compose up -d
```
2.以下を実行し、phpコンテナに入る。
```bash:workspace/php-app-test
docker exec -it myapp-app bash
```
:::note info
実行後/var/www# のように表示されれば問題ないです。
:::
3.以下を実行し、laravelをインストールする。
```bash:/var/www#
 composer create-project --prefer-dist laravel/laravel my-app
```
:::note warn
インストール完了後
VScodeを確認していただき、php-app-test配下にmy-appディレクトリが作成されていることを確認してください。
:::
4.my-appディレクトリの中に下記のようなディレクトリ構造が入っていればインストール完了です。
```bash:my-app
├── app/
    ├── bootstrap/
    ├── config/
    ├── database/
    ├── public/
    ├── resources/
    ├── routes/
    ├── storage/
    ├── tests/
    ├── vendor/
    ├── .env
    └── ...
```
5.以下を実行しコンテナから抜ける。
```bash:/var/www#
exit
```
6.docker-compose.yml内の、<font color="blue">myapp-php</font>と<font color="blue">myapp-nginx</font>のvolumesを以下の通り書き換える。
```bash:docker-compose.yml
- - .:/var/www/
+ - ./my-app:/var/www/
```
7.以下を実行し、イメージとコンテナを再度作成する。
```bash:workspace/php-app-test
docker compose up -d
```
ブラウザで確認する
-
1.ブラウザでhttp://localhost:81/ と検索し画像のように表示されることを確認する。

:::note warn
右上に「Log in Register」と表示されていなくても問題ありません。
:::

![スクリーンショット 2025-03-28 8.13.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4042315/860f517c-fa24-44ce-a208-f496aeeade19.png)

以上でLaravelの環境構築は完了です。
お疲れ様でした。

最後に
-
今後DBへの接続や認証機能の追加など記事を書いていこうと思っていますのでよろしくお願いいたします。

今回参考にさせていただいた記事
-

https://qiita.com/hitotch/items/2e816bc1423d00562dc2

https://zenn.dev/fire_arlo/articles/laravel-docker-setup-without-sail