この記事では、Dockerを使って自分のコンピュータにLaravel8の開発環境を構築する方法を説明します。
https://docs.docker.com/get-docker/
$ docker --version
Docker version 20.10.2, build 2291f61
$ docker-compose --version
docker-compose version 1.27.4, build 40524192
https://github.com/scobin/docker-php
docker-compose.ymlはコンテナを構築、管理する設定ファイルです。
今回は4つのコンテナを作成します。 それらは、nginx、php、db、phpmyadminです。
nginx と phpmyadmin は、提供されたイメージファイルを直接使用します。
php、dbはカスタマイズする必要があるので、Dockerfileを使ってカスタマイズします。
php用のDockerfileは/php
フォルダにあるので、中身を見てみましょう。今回はPHP8の環境を作り、composerもインストールしています。
dbのdockerfileは/mysql
フォルダの下にあり、今回はmysql8を使用しています。
コンテナ内のファイルを操作したい場合、一般的にはコンテナ内に入ってコマンドを実行するのができますが、一つの手間が増えて少し不便を感じることがあります。もし、コンテナ外のファイルと連携して、コンテナに入らなくても修正や閲覧ができたらいいですね。
そのために、docker-compose.yml
でvolumnsという記述を利用することでそのようなことができます。例えば、下記のようにvolumnsの記述を入れると、プロジェクトの/server
パスをphpコンテナ内の/var/www/
パスに連結することになります。
ですので、後でプロジェクトの/server
配下にLaravelアプリケーションを作成すると、コンテナ内の/var/www/
にもLaravelアプリケーションを作成されます。/server
の下のコンテンツを修正すると、コンテナ内の/var/www/
のコンテンツを修正するのと同じことになります。
php:
container_name: php-laravel
build: ./php
volumes:
- ./server:/var/www/:delegated
phpコンテナだけでなく、nginxコンテナにも関連する設定がありますので、そちらも参考にしてください。
nginx.conf
のルート設定で、example-appは、後でビルドするLaravelアプリケーションのプロジェクト名です。自分で修正することもできますが、後でLaravelアプリケーションをビルドする際には、必ず同じ名前を使用してください。
...
root /var/www/example-app/public;
index index.php index.html;
...
以下のコマンドを使用してコンテナを作成・起動すると、最初の実行には時間がかかります。
docker-compose up -d --build
コンテナを閉じたり削除したりするには、以下のコマンドを使います。
docker-compose down
コンテナを削除したくない場合は、以下のコマンドを使用します。
docker-compose stop
次に、php-laravelコンテナに入り、Laravelをインストールします。
下記のコマンドでコンテナに入ります。(php-laravelはコンテナ名です。)
docker exec -it php-laravel bash
コンテナの作成と起動に成功したら、php-laravelコンテナに入って、PHP、composerのバージョンが正しいかどうかを確認します。
なお、この時点ではまだLaravelアプリケーションは作成されていませんので、var/www
にアクセスしてLaravelアプリケーションを作成する必要があります。
ここでは、composerを使って、example-appという名前でLaravelのアプリケーションを構築する方法を紹介します。
もしexample-appではなく、ほかの名前を使うならnginx.confのディレクトリ設定も変更してください。
# change path according to your nginx.conf
cd ..
# create project
composer create-project laravel/laravel example-app
アプリケーションの作成にも時間がかかりますので、しばらくお待ちください。 この時間を利用して、ブラウザでlocalhost:8811
を開き、phpmyadminのページが正しく表示されているかどうかを確認することができます。
アプリケーションのビルドが完了したら、exit
コマンドでコンテナから退出し、以下のコマンドでコンテナを再起動します。
docker-compose restart
再びブラウザでlocalhost:8010
を開き、Laravelのデフォルトページが正しく表示されているか確認してください。
正常に表示されれば、設定が正しいことになります。
もし以下のようなメッセージが出てきましたら、権限の設定変更を行ってください。
UnexpectedValueExceptionThe stream or file “/var/www/example-app/storage/logs/laravel.log” could not be opened in append mode: Failed to open stream: Permission denied
フォルダの権限設定があっていないため、相応しい変更が必要です。
まずはphp-fpmのユーザー名を確認します。
php-fpmのconfigファイルに設定情報があるため、PHPコンテイナーに入って、 usr/local/etc/php-fpm.d/www.conf
にはこのような設定を確認できます。
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user’s group
; will be used.
user = www-data
group = www-data
ユーザーとグループはwww-dataになっていますので、storage
とbootstrap/cache
の所有者とグループをwwww-dataに変更しましょう。
# Enter php container.
docker-compose exec php bash
# Change owner/group and permission.
chown -R www-data:www-data /var/www/example-app/storage
chown -R www-data:www-data /var/www/example-app/bootstrap/cache
chmod -R 775 /var/www/example-app/storage
chmod -R 775 /var/www/example-app/bootstrap/cache
以上は今回の構築手順です。
おめでとうございます!PHP8、MySQL8、Laravel8のDocker環境の構築に成功しました。