LaravelにDockerで入門してみる
はじめに
こんにちは、おそらく犬です。
勉強のためバックエンドに使われているフレームワーク等を触っていこうと思います。
今回は有名なPHPのフレームワークのLaravelを触っていきたいと思います。
ちなみに筆者はPHP未経験、Docker1年くらいの温度感です。
まずは環境構築からしていきます。
ちなみにこの記事の公開時のLaravelは10系です。
想定読者
- Dockerについて基本的な知識がある
- LaravelやPHPについては知識がない
環境構築
まず初めに公式ドキュメントを読みます。
そこで目に入ってくるLaravel & Docker...👀
PHP等のインストールは面倒なのでDockerで済ませることにします。Dockerの導入方法は割愛します。
筆者はWSLで開発しているので以下のコマンドをたたきました。必要なシェルスクリプトを実行してくれます。
curl -s https://laravel.build/hello-laravel | bash
セットアップ中に暇なのでシェルスクリプトの中身を見てみます。
docker info > /dev/null 2>&1
# Ensure that Docker is running...
if [ $? -ne 0 ]; then
echo "Docker is not running."
exit 1
fi
docker run --rm \
--pull=always \
-v "$(pwd)":/opt \
-w /opt \
laravelsail/php82-composer:latest \
bash -c "laravel new hello-laravel && cd hello-laravel && php ./artisan sail:install --with=mysql,redis,meilisearch,mailpit,selenium "
cd hello-laravel
# Allow build with no additional services..
if [ "mysql redis meilisearch mailpit selenium" == "none" ]; then
./vendor/bin/sail build
else
./vendor/bin/sail pull mysql redis meilisearch mailpit selenium
./vendor/bin/sail build
fi
CYAN='\033[0;36m'
LIGHT_CYAN='\033[1;36m'
BOLD='\033[1m'
NC='\033[0m'
echo ""
if sudo -n true 2>/dev/null; then
sudo chown -R $USER: .
echo -e "${BOLD}Get started with:${NC} cd hello-laravel && ./vendor/bin/sail up"
else
echo -e "${BOLD}Please provide your password so we can make some final adjustments to your application's permissions.${NC}"
echo ""
sudo chown -R $USER: .
echo ""
echo -e "${BOLD}Thank you! We hope you build something incredible. Dive in with:${NC} cd hello-laravel && ./vendor/bin/sail up"
fi
laravelsail/php82-composer:latest
のイメージを使ってLaravel環境を構築しているっぽいです。
同時にmysql, redis, meilisearch, mailpit, seleniumのイメージも利用しており、一通り開発に必要なモノはそろっているようです。
コマンド実行後のディレクトリ構成は以下のようになっています。
.env
や.gitignore
, docker-compose.yml
等がすでに整っており、すでに開発に必要なもろもろは用意されているといった具合です。
めっちゃ楽~。
いざ起動
環境構築は整ったので公式の指示通り./vendor/bin/sail up
で起動します。
普通はdocker compose up
ですが、Laravelではこの起動方法でも可能なようです。
sailはLaravel Sailというもののコマンドのようで、Laravel SailはDockerをあまり知らなくても使えるようにしてくれる軽量なCLIだそうです。
Laravel Sail is a light-weight command-line interface for interacting with Laravel's default Docker development environment. Sail provides a great starting point for building a Laravel application using PHP, MySQL, and Redis without requiring prior Docker experience.
エコシステム整ってんなぁ~。
豆知識はこれくらいにして起動します。
$ ./vendor/bin/sail up
~~~略~~~
Error response from daemon: Ports are not available: exposing port TCP 0.0.0.0:80 -> 0.0.0.0:0: listen tcp 0.0.0.0:80: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
なんか80番ポートを取ろうとすると怒られが発生したので他のポートを当たります。
docker-compose.yml
を見ると${APP_PORT}
を指定してない場合にはホストの80番を取ろうとするっぽいので.env
ファイルにAPP_PORT=8080
を追加します。
services:
laravel.test:
~~~略~~~
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:38bVt2x2DicVaZMmZxWoR+a7s+yzm+Ad2vQP00aqivA=
APP_DEBUG=true
APP_URL=http://localhost
APP_PORT=8080 # <- 追記
変更後再度./vendor/bin/sail up
します。
hello-laravel-laravel.test-1 | 2023-09-23 06:22:19,610 INFO spawned: 'php' with pid 16
hello-laravel-laravel.test-1 | 2023-09-23 06:22:20,612 INFO success: php entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
hello-laravel-laravel.test-1 |
hello-laravel-laravel.test-1 | INFO Server running on [http://0.0.0.0:80].
hello-laravel-laravel.test-1 |
hello-laravel-laravel.test-1 | Press Ctrl+C to stop the server
hello-laravel-laravel.test-1 |
ヨシ!
http://localhost:8080 に接続してみます。
無事表示されました。これで開発環境が整いました。
おわりに
Laravelは非常にエコシステムが整っているフレームワークだというのを強い同僚から聞いたので、どんなもんかと試してみようと思い環境構築してみました。
デプロイ等も含めて今後いろいろやってみます。
Discussion