[コピペでおk] DockerでLaravelの環境構築

DockerでLaravelの環境構築は以前やりましたが、より簡単にサクッと構築できるものをGithubレポジトリをCloneしていただいて理解していただこうという回です。Laravelの初期画面が表示できるところまでを目指すので、Dockerの環境も必要最低限のみインストールに留めています。実際の開発となるとこれでは少し心もとないので次回以降でさらに解説します。今回の目的はあくまでLaravelの初期画面をブラウザで表示させて、「おお!!」ってなるところです。

手っ取り早くまずはGithubをcloneしてきてください

GitHub – gachi-engineer/lesson3-docker…

GitHub – gachi-engineer/lesson3-docker…

docker入門(Laravelをdockerで動かす). Contribute to gachi-engineer/lesson3-docker-laravel development by creating an account on …

docker入門(Laravelをdockerで動かす). Contribute to gachi-engineer/lesson3-docker-laravel development by creating an account on …

いつものごとく、docker compose up -d とコマンド実行してもらったらdocker環境が立ち上がるはずなのですぐLaravelの初期画面が表示できると思います。がもしかしすると、.envの値の調整が必要かもしれません。あとで見直しをしたいと思います。

各ファイル・ディレクトリの説明

docker/docker-compose.yml

https://github.com/gachi-engineer/lesson3-docker-laravel/blob/master/docker/docker-compose.yml

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
(省略)
11 myfirstapp-app:
# ビルドディレクトリの指定行が出てきました
12 build: ./php
(省略)
# MySQLのコンテナを立ち上げるための設定です
# MySQLのオフィシャルイメージがenvironment設定をすればそれを設定してくれるように作ってくれています
17 myfirstapp-db:
18 image: mysql:latest
19 container_name: myfirstapp-db
20 environment:
21 MYSQL_DATABASE: "myfirstapp"
22 MYSQL_ROOT_PASSWORD: "root"
(省略) 11 myfirstapp-app: # ビルドディレクトリの指定行が出てきました 12 build: ./php (省略) # MySQLのコンテナを立ち上げるための設定です # MySQLのオフィシャルイメージがenvironment設定をすればそれを設定してくれるように作ってくれています 17 myfirstapp-db: 18 image: mysql:latest 19 container_name: myfirstapp-db 20 environment: 21 MYSQL_DATABASE: "myfirstapp" 22 MYSQL_ROOT_PASSWORD: "root"
(省略)

 11   myfirstapp-app:
        # ビルドディレクトリの指定行が出てきました
 12     build: ./php

(省略)

      # MySQLのコンテナを立ち上げるための設定です
      # MySQLのオフィシャルイメージがenvironment設定をすればそれを設定してくれるように作ってくれています
 17   myfirstapp-db:
 18     image: mysql:latest
 19     container_name: myfirstapp-db
 20     environment:
 21       MYSQL_DATABASE: "myfirstapp"
 22       MYSQL_ROOT_PASSWORD: "root"

build: というのがはじめて出てきました。今までオフィシャルイメージで特に問題なくきていましたが、Laravelを動かすにはオフィシャルイメージでは少しインストールしなければいけないものがあります。その場合にオフィシャルイメージであってもカスタマイズしてイメージをビルドし直すということができます。それがこの設定。

ここではディレクトリを指定しているのですがそのディレクトリには必ずDockerfileというファイルが必要です。このDockerfileにビルド時に何をするのかを記述します。

ではDockerfileを見てみましょう

docker/php/Dockerfile

https://github.com/gachi-engineer/lesson3-docker-laravel/blob/master/docker/php/Dockerfile

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# FROMでどのイメージからかを指定します
FROM php:8.3-fpm
# PHPでMySQLが扱えるようにPDOモジュールとPDO MySQLモジュールが必要
RUN docker-php-ext-install -j$(nproc) pdo pdo_mysql
# git/unzipはcomposer install時に必要、wgetはcomposerをダウンロードしてくるのに必要
RUN apt-get update && \
apt-get install --no-install-recommends -y git wget unzip && \
wget -q https://getcomposer.org/download/2.8.3/composer.phar -O /usr/local/bin/composer && \
chmod a+x /usr/local/bin/composer
# FROMでどのイメージからかを指定します FROM php:8.3-fpm # PHPでMySQLが扱えるようにPDOモジュールとPDO MySQLモジュールが必要 RUN docker-php-ext-install -j$(nproc) pdo pdo_mysql # git/unzipはcomposer install時に必要、wgetはcomposerをダウンロードしてくるのに必要 RUN apt-get update && \ apt-get install --no-install-recommends -y git wget unzip && \ wget -q https://getcomposer.org/download/2.8.3/composer.phar -O /usr/local/bin/composer && \ chmod a+x /usr/local/bin/composer
# FROMでどのイメージからかを指定します
FROM php:8.3-fpm

# PHPでMySQLが扱えるようにPDOモジュールとPDO MySQLモジュールが必要
RUN docker-php-ext-install -j$(nproc) pdo pdo_mysql

# git/unzipはcomposer install時に必要、wgetはcomposerをダウンロードしてくるのに必要
RUN apt-get update && \
    apt-get install --no-install-recommends -y git wget unzip && \
    wget -q https://getcomposer.org/download/2.8.3/composer.phar -O /usr/local/bin/composer && \
    chmod a+x /usr/local/bin/composer

FROMはどのイメージからカスタマイズするかを指定します。今回はPHPのオフィシャルイメージをカスタマイズして使っていくのでphp:8.3-fpmと記述しています。

docker-php-ext-installというコマンドをRUNで実行しています。このコマンドはPHPのオフィシャルイメージが用意してくれているPHPモジュールを追加でインストールするためのコマンドです。Laravelの初期画面を表示するためだけでも、データベースは必須になっているためMySQLを立ち上げました。PHPからMySQLに接続するためにはPDOモジュールとPDO MYSQLモジュールが必要ですのでこのコマンドでインストールしています。

次にこのPHPのオフィシャルイメージは実はdebianベースで出来ているので、追加のソフトウェアはapt-getというコマンドでかんたんに追加できます。Laravelを動かすのに必要なライブラリはcomposerというソフトウェアでインストールするのですが、composerでインストールする過程でgitとunzipが必要になってきます。このapt-getでそれぞれのソフトウェアを取得・インストールします。

wgetはダウンロードツールです。composerコマンド自体をダウンロード・インストールするためにapt-getでインストールします。wgetでダウンロードしたcomposerの実行ファイルをパスが通っている /usr/local/bin直下において実行権限をつけます。

docker/nginx/default.conf

Laravelのドキュメントルートはフレームワークのディレクトリ配置ルールとして決まっています。nginxの設定も少しだけ修正します。具体的にはドキュメントルートの設定である root のパスを変更します。あとphp-fpmのところに書いているパスも変更です。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
(省略)
location / {
# Laravelのドキュメントルートはpublicというディレクトリになるので
root /var/www/html/public;
index index.php index.html index.htm;
}
(省略)
location ~ \.php$ {
fastcgi_pass myfirstapp-app:9000;
fastcgi_index index.php;
    # ここも修正です
fastcgi_param SCRIPT_FILENAME /var/www/html/public/$fastcgi_script_name;
include fastcgi_params;
}
(省略) location / { # Laravelのドキュメントルートはpublicというディレクトリになるので root /var/www/html/public; index index.php index.html index.htm; } (省略) location ~ \.php$ { fastcgi_pass myfirstapp-app:9000; fastcgi_index index.php;     # ここも修正です fastcgi_param SCRIPT_FILENAME /var/www/html/public/$fastcgi_script_name; include fastcgi_params; }
(省略)
 
   location / {
        # Laravelのドキュメントルートはpublicというディレクトリになるので
        root   /var/www/html/public;
        index  index.php index.html index.htm;
    }

(省略)
 
    location ~ \.php$ {
        fastcgi_pass   myfirstapp-app:9000;
        fastcgi_index  index.php;

    # ここも修正です
        fastcgi_param  SCRIPT_FILENAME /var/www/html/public/$fastcgi_script_name;
        include        fastcgi_params;
    }

src

これはLaravelをそのまま持ってきただけです。composerでcreate-projectするのが一番簡単かなと思いますが、zipで落としてくることもできますしそこの方法はLaravelの公式ドキュメントに書いていますのでそちらのほうがわかりやすいでしょう。私はこうやりました。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# もともとのディレクトリを削除して
rm -rf src
composer create-project laravel/laravel src/
# もともとのディレクトリを削除して rm -rf src composer create-project laravel/laravel src/
# もともとのディレクトリを削除して
rm -rf src
composer create-project laravel/laravel src/

Laravelの初期画面を表示させるのに必要なこと

必要なライブラリをcomposerでインストールします

Laravelフレームワークもいろいろなライブラリを利用していますので、このままでは動きません。動かすにはcomposerで外部ライブラリをインストールします。インストールが終わるとルートディレクトリに vendorというディレクトリができると思いますが、外部ライブラリはここに格納されることになります。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# container内にログインして
hogehoge@localhost:$ docker exec -it myfirstapp-app /bin/bash
# composerでインストール
docker@docker-container:$ composer install
# container内にログインして hogehoge@localhost:$ docker exec -it myfirstapp-app /bin/bash # composerでインストール docker@docker-container:$ composer install
# container内にログインして
hogehoge@localhost:$ docker exec -it myfirstapp-app /bin/bash

# composerでインストール
docker@docker-container:$ composer install

環境変数ファイル .env の用意

githubからcloneしてcomposer installを実行すれば .env(ドットエンブと読みます)が自動的に配置されていると思います。されていない場合は、.env.example という例をおいてくれていますのでそれをコピーして修正します。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
docker@docker-container:$ ls -al .env
# なければ
docker@docker-container:$ cp .env.example .env
docker@docker-container:$ ls -al .env # なければ docker@docker-container:$ cp .env.example .env
docker@docker-container:$  ls -al .env
# なければ
docker@docker-container:$  cp .env.example .env

.envの中身を調整する

実はそのままではLaravelの初期画面が表示できなくてですね、データベースの設定を少し変更しなければなりません。vscodeでもテキストエディタでも何でも良いですが、.envを開いて以下の部分を修正してください。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
DB_CONNECTION=mysql
DB_HOST=myfirstapp-db
DB_PORT=3306
DB_DATABASE=myfirstapp
DB_USERNAME=root
DB_PASSWORD=root
SESSION_DRIVER=file
DB_CONNECTION=mysql DB_HOST=myfirstapp-db DB_PORT=3306 DB_DATABASE=myfirstapp DB_USERNAME=root DB_PASSWORD=root SESSION_DRIVER=file
DB_CONNECTION=mysql
DB_HOST=myfirstapp-db
DB_PORT=3306
DB_DATABASE=myfirstapp
DB_USERNAME=root
DB_PASSWORD=root

SESSION_DRIVER=file

DB_CONNECTIONをmysqlに

DB_HOSTをMySQLのコンテナ名に

DB_DATABASEをmyfirstappに

DB_USERNAMEをroot

DB_PASSWORDをroot

もしかしたらcomposer installしたときはこれらの項目はコメントアウト (#が行頭に)されてるかもしれません。その場合はコメントアウトを外して上記の通りに変更してくださ。

keyを作成する

これはLaravelがいろいろな場面で使用する暗号化キーです。アプリケーションごとに作成しますが、本当に一番最初つくったらあとはつくることはほぼないので忘れがちで忘れて画面表示するとLaravelにKeyがないって怒られます。ですので以下コマンドを実行するとKeyが.envに書き込まれます。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# container内でコマンド実行
docker@docker-container:$ php artisan key:generate
# container内でコマンド実行 docker@docker-container:$ php artisan key:generate
# container内でコマンド実行
docker@docker-container:$ php artisan key:generate

ブラウザで見てみる

http://localhost:8080/

以下の画面が表示されればOKです。

なかなか独学で続けるのは難しいですよね

これを読んでやってみれば多少はうまくいかないこともあるとは思いますが、Docker環境でLaravelの初期画面の表示まではできると思います。でもひとりでずっとよくわからないことをやり続けるのは大変ですよね?ガチエンジニアプログラミングスクールではそういう方と共にみなさんの夢に近づけるよう一緒に伴走したいと考えています。扉を開くのはこれを読んでいるそこのあなたです。扉を開く勇気があればあとは夢は叶ったようなものです。いっしょにがんばりましょう。