LaravelにDockerで入門してみる

2023/09/23に公開

はじめに

こんにちは、おそらく犬です。

勉強のためバックエンドに使われているフレームワーク等を触っていこうと思います。
今回は有名な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

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

無事表示されました。これで開発環境が整いました。

おわりに

Laravelは非常にエコシステムが整っているフレームワークだというのを強い同僚から聞いたので、どんなもんかと試してみようと思い環境構築してみました。
デプロイ等も含めて今後いろいろやってみます。

Discussion