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
(省略) 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
# 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のところに書いているパスも変更です。
(省略) 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の公式ドキュメントに書いていますのでそちらのほうがわかりやすいでしょう。私はこうやりました。
# もともとのディレクトリを削除して rm -rf src composer create-project laravel/laravel src/
Laravelの初期画面を表示させるのに必要なこと
必要なライブラリをcomposerでインストールします
Laravelフレームワークもいろいろなライブラリを利用していますので、このままでは動きません。動かすにはcomposerで外部ライブラリをインストールします。インストールが終わるとルートディレクトリに vendorというディレクトリができると思いますが、外部ライブラリはここに格納されることになります。
# container内にログインして hogehoge@localhost:$ docker exec -it myfirstapp-app /bin/bash # composerでインストール docker@docker-container:$ composer install
環境変数ファイル .env の用意
githubからcloneしてcomposer installを実行すれば .env(ドットエンブと読みます)が自動的に配置されていると思います。されていない場合は、.env.example という例をおいてくれていますのでそれをコピーして修正します。
docker@docker-container:$ ls -al .env # なければ docker@docker-container:$ cp .env.example .env
.envの中身を調整する
実はそのままではLaravelの初期画面が表示できなくてですね、データベースの設定を少し変更しなければなりません。vscodeでもテキストエディタでも何でも良いですが、.envを開いて以下の部分を修正してください。


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に書き込まれます。
# container内でコマンド実行 docker@docker-container:$ php artisan key:generate
ブラウザで見てみる
以下の画面が表示されればOKです。

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

