質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

295閲覧

Dockerを用いたLaravel10の環境構築

O.suzu

総合スコア2

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2024/06/24 09:39

実現したいこと

「docker compose up -d --build」でコンテナを立ち上げてブラウザにアクセスすると、LaravelのWelcomeページが表示されてるようにしたい。

※Laravelは、立ち上げたコンテナ内に入りインストールするのではなく、Dockerfile内の設定で行うように記述してます。

発生している問題・分からないこと

ディレクトリに必要なフォルダとファイルの記述を追加したあとにコンテナを立ち上げても、Laravelのページが表示されない。

・ディレクトリ構成

user-laravel10/ ├── Dockerfiles/ │ ├── mysql/ │ │ └── Dockerfile │ ├── nginx/ │ │ ├── Dockerfile │ │ └── default.conf │ └── php/ │ └── Dockerfile └── docker-compose.yml

・それぞれのファイルの中身
【mysql/Dockerfile】

FROM mysql:8.0 ENV MYSQL_ROOT_PASSWORD=root ENV MYSQL_DATABASE=laravel ENV MYSQL_USER=laravel ENV MYSQL_PASSWORD=laravel

【nginx/Dockerfile】

FROM nginx:latest COPY Dockerfiles/nginx/default.conf /etc/nginx/conf.d/default.conf

【nginx/default.conf】

server { listen 80; server_name localhost; root /var/www/html/public; index index.php index.html index.htm; location / { root /var/www/html/public; try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include fastcgi_params; fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~ /\.ht { deny all; } }

【php/Dockerfile】

FROM php:8.2-fpm WORKDIR /var/www/html RUN apt-get update && apt-get install -y \ git \ unzip \ libpq-dev \ libonig-dev \ libzip-dev \ zip \ && docker-php-ext-install pdo pdo_mysql mbstring zip exif pcntl COPY --from=composer:latest /usr/bin/composer /usr/bin/composer RUN composer create-project --prefer-dist laravel/laravel=10 . RUN chown -R www-data:www-data /var/www/html RUN chmod -R 755 storage

【docker-compose.yml】

version: '3.8' services: php: build: context: . dockerfile: Dockerfiles/php/Dockerfile volumes: - .:/var/www/html depends_on: - mysql nginx: build: context: . dockerfile: Dockerfiles/nginx/Dockerfile ports: - "8080:80" volumes: - .:/var/www/html depends_on: - php mysql: build: context: . dockerfile: Dockerfiles/mysql/Dockerfile environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: laravel MYSQL_USER: laravel MYSQL_PASSWORD: laravel ports: - "3308:3306" volumes: - db_data:/var/lib/mysql volumes: db_data:

以上これらの設定を済ませ、docker compose up -d --buildを実行し無事コンテナは立ち上がるのですが、ブラウザにアクセスすると「File not found.」と表示されます。
調べてみると、どうやら【nginx/default.conf】ファイルの設定に誤りがあるとのことで、rootの部分をLaravelが表示されるよう正しく定義しないといけないらしい。
しかし、どこを定義してあげればいいのかがわからず、現在ここで立ち止まっている状態です。

ネットで調べながら記述した内容なので、ここの部分は必要ないとか、ここはこういう書き方だよという指摘などあれば、教えて頂けると助かります。

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

【nginx/default.conf】ファイルのroot定義の部分を/var/www/html/laravel/publicに変更したり、locationの部分にも新たにrootを記述したりなどしましたが、結果は変わらずでした。

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

このようなケースの場合、まず確認すべきはコンテナ内に想定しているファイルが存在するかどうか、かと思います。
コンテナ内の /var/www/html ディレクトリにはpublicディレクトリがない可能性があります。
これは volume マウントによってコンテナ内のディレクトリがホストのディレクトリで上書きされているためです。

php-fpmはサーバー初心者には構成が難しいので、apacheを利用してWebサーバーとPHPを同一サーバーで動かしたほうが良いかと思います。

また、開発用途なのであれば、別回答の通りsailを使うほうが、事例もおおいですし間違いは少なくなると思います。


その他気になる点としては下記でしょうか。

  • version: '3.8' という記述について、docker compose v2でversionは既に廃止されていますので、記述する必要はありません。
  • Dockerfileでcreate-projectを行うのは良いやり方ではありません。起動スクリプト内でディレクトリがなければ生成するようにするか、初回のみ実行するものですから手動で生成しましょう
  • mysql コンテナはこの内容だとビルドしている意味がないです。そのまま image: mysql:8.0 としても良いと思います

投稿2024/06/24 12:57

Eggpan

総合スコア3203

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

O.suzu

2024/06/25 05:27

ご回答ありがとうございます。 仰る通り、どうやら volumes: が原因だったみたいです。 そもそもコンテナ内に laravel がきちんとインストールされておらず、知人にも聞いてみたところ yml ファイルの volumes: が邪魔してるから、とりあえずテストで Laravel の環境だけを構築したいなら必要ないとのことだったので、一旦コメントアウトしました。 それからもう一度、コンテナを立ち上げて exec コマンドでコンテナ内に入ってみたところ、laravelのファイル一覧がインストールされていることが確認でき、ブラウザにアクセスしてみたらLaravelのページが映りました。 その他気になる点などの回答もありがとうございました。 volume マウントなどの意味についても、しっかり復習しておきたいと思います。
guest

0

開発環境なら全部捨ててSailを使う。

Dockerfile内でプロジェクト作成することはない。この時点で改善しようがないので自分で作るのはやめたほうがいい。

投稿2024/06/24 12:20

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

O.suzu

2024/06/25 05:30

ご回答ありがとうございます。 Sailというものもあるんですね。 最近こういう勉強を始めたばかりなのでわからないことだらけですが、これから触れていく部分にもなると思うので覚えておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問