Laravel 開発環境をDockerで
久々にPHP 使うお仕事になったついで。
PHP で非常に人気のある Laravel の開発環境を用意したいと思った。(※注意:リリース環境ではありません)
XAMPP とかクソくらえ!
ちょっと暴論ではあるのだけど、自分は XMPP が気に入らない。
理由は非常に明白で
- 常駐アプリ入れすぎ
- 何でもかんでも入りすぎ
- しかも重い
という事で、既存の環境を汚さずに開発環境を手に入れるのが自分の中でジャスティス。
そこで、Docker でその対応を行ってみようという企画です。
Laravel のインストール方法を見てみる
ちょっと調べてみると、Homestead や LaravelValet とかいうものがあるらしい。
で、LaravelValet は Windows ではつけあないとかなんとか…
Docker で構築する以上どうでもいい気がする…。
で、更に調べると、Composer で構築するっぽいことがわかった
ここまで判ればまずは手を動かしてみるか
ごめん、公式見た方がかなりマシ
composer だとコマンド一発だわ。
長時間無駄した…
PHP と Composer インストール済み環境を作る
といっても、Docker 系ファイル作成するだけ
基本的な Docker イメージは Docker Hub ここから取ってくる。
ちょうど、PHP と Composer があるので、これで環境作っちゃえ
docker-compose.yml
version: '2' services: host: restart: always build: ./data/main environment: TZ: 'Asia/Tokyo' volumes: - './sources:/root/codes'
volumes
設定で、ローカルディスク(./sources
)を仮想 OS 上のディレクトリ、 /root/codes
に紐づける
で、./data/main/Dockerfile
はこんな感じ
FROM php:7-fpm-buster RUN apt-get update && \ apt-get upgrade -y && \ apt-get install -y unzip curl wget git gcc COPY --from=composer /usr/bin/composer /usr/bin/composer WORKDIR /root
php
の7-fpm-buster
というタグ(設定のバージョン)をベースにする。(これ自体は debian ベース)- とりあえず
apt-get
で必要そうなソフトを入れておく composer
の Docker イメージから、/usr/bin/composer
だけつまみ食い的に取ってくる- ログイン時の作業ディレクトリを
/root
指定
てな感じ。
では早速ビルド
PS C:\Workspace\PHP\lalabel> docker-compose build Building host Step 1/4 : FROM php:7-fpm-buster ---> f5460fa2369d Step 2/4 : RUN apt-get update && apt-get upgrade -y ---> Running in a714759d79bb Get:1 http://deb.debian.org/debian buster InRelease [121 kB] Get:2 http://deb.debian.org/debian buster-updates InRelease [51.9 kB] Get:3 http://security.debian.org/debian-security buster/updates InRelease [65.4 kB] Get:4 http://deb.debian.org/debian buster/main amd64 Packages [7907 kB] Get:5 http://security.debian.org/debian-security buster/updates/main amd64 Packages [260 kB] Get:6 http://deb.debian.org/debian buster-updates/main amd64 Packages [7860 B] Fetched 8414 kB in 1s (6516 kB/s) Reading package lists... Reading package lists... Building dependency tree... Reading state information... Calculating upgrade... The following package was automatically installed and is no longer required: lsb-base Use 'apt autoremove' to remove it. 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. Removing intermediate container a714759d79bb ---> bc4b7370dc31 Step 3/4 : COPY --from=composer /usr/bin/composer /usr/bin/composer latest: Pulling from library/composer 801bfaa63ef2: Already exists 30e209609427: Pull complete 320f26ee9b1c: Pull complete 4612e05a72cf: Pull complete 9b2beae78beb: Pull complete 79c03e12047a: Pull complete 51393fef6543: Pull complete 5571c1cd7f43: Pull complete 65564f077fec: Pull complete d65380960587: Pull complete 925a16b14f98: Pull complete b5b77b9b221e: Pull complete 5f53c0c9d3ed: Pull complete 555ce7422600: Pull complete 312d42e4a2ef: Pull complete Digest: sha256:dd50f470e49d0b3ab9efe556dec5a8485703629ba7128e0f56c196d166f734f0 Status: Downloaded newer image for composer:latest ---> 8a9435afb5dd Step 4/4 : WORKDIR /var/www/html ---> Running in 466504abae53 Removing intermediate container 466504abae53 ---> 764db2ea70ec Successfully built 764db2ea70ec Successfully tagged lalabel_host:latest
では起動
PS C:\Workspace\PHP\lalabel> docker-compose up -d Creating lalabel_host_1 ... donedoc PS C:\Workspace\PHP\laravel> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bda1c00994e0 laravel_host "docker-php-entrypoi…" 14 seconds ago Up 13 seconds 9000/tcp laravel_host_1 PS C:\Workspace\PHP\laravel>
ではログインしてプロジェクト立ち上げますか
root@2743ff93f2f3:~/codes# composer create-project laravel/laravel example-app Creating a "laravel/laravel" project at "./example-app" Installing laravel/laravel (v8.5.7) - Downloading laravel/laravel (v8.5.7) - Installing laravel/laravel (v8.5.7): Extracting archive Created project in /root/codes/example-app > @php -r "file_exists('.env') || copy('.env.example', '.env');" Loading composer repositories with package information Updating dependencies Lock file operations: 105 installs, 0 updates, 0 removals - Locking asm89/stack-cors (v2.0.2) - Locking brick/math (0.9.1) - Locking dnoegel/php-xdg-base-dir (v0.1.1) - Locking doctrine/inflector (2.0.3) - Locking doctrine/instantiator (1.4.0) - Locking doctrine/lexer (1.2.1) ...中略... - Installing phar-io/version (3.0.4): Extracting archive - Installing phar-io/manifest (2.0.1): Extracting archive - Installing myclabs/deep-copy (1.10.2): Extracting archive - Installing phpunit/phpunit (9.5.0): Extracting archive 77 package suggestions were added by new dependencies, use `composer suggest` to see details. Generating optimized autoload files > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: facade/ignition Discovered Package: fideloper/proxy Discovered Package: fruitcake/laravel-cors Discovered Package: laravel/sail Discovered Package: laravel/tinker Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully. 73 packages you are using are looking for funding. Use the `composer fund` command to find out more! > @php artisan key:generate --ansi Application key set successfully.
するとローカルディレクトリは
よっしこれで開発が始められる…