(圖片來源:Photo by Jason Dent on Unsplash)
這陣子陸續、持續找了些許時間,將手上的學習做了些整理,部分結果將開源釋出,期望能帶出一些思路、考量、各種討論與交流。其中包含了我一直不棄不離的 PHP,這次整理的容器,原始設計目的是想讓 php-fpm 與 nginx 結合,形成一個簡化的環境,能方便地使 Laravel 運作在雲原生環境、AWS Fargate、Amazon ECS 等環境下,以達 application-first 之效。我是拿來作為基底,用於手邊幾個團隊的教學與實作、各種比較測試、包含未來用於測試 x86/ARM 運算架構比較等等。
- 釋出的 Docker image 放置於 Docker Hub: dwchiang/nginx-php-fpm
- 原始 Dockerfiles 放置於 GitHub: dwchiang/nginx-php-fpm
- 若您覺得這個版本整理得還可以,期待您能應用於手邊的專案上、分享給朋友、或幫這個專案按一個星星 ⭐ :)
- 若您也對這個主題【在 Amazon ECS 運行 Laravel】感興趣的話,可延伸參考
- 這個自助學習、有完整架構圖的線上工作坊: dwchiang/laravel-on-aws-ecs-workshops、
- 或是我的這場演講,有投影片、錄影: 在 AWS 上運行 Laravel/PHP 容器應用程式 (AWS Builders Day Taiwan 2022)
這篇文章也許在未來會陸續更新。
內容大綱
關於比較
整理這類比較的數據,從設計環境、實作、量測、資料採集、整理、製圖、總結歸納等步驟做下來,滿燒腦也滿有趣的,若內容中有任何可以調整或改進之處、或建議其他量測方式,歡迎留言或開個 issue 給我,非常感謝。
另外想徵求請教,有沒有工具或方法可以讓大家多方測試、採集數據,然後一起統整起來做比較?我覺得我單機測試量太少。
Laravel 8.49.1 with PHP 7.4.21 on Different Docker Base Images
測試目的
- 測試 Laravel 8.49.1 搭載不同的 Docker base images 的運作結果
測試變數
- 測試一: Dockerfile 使用 dwchiang/nginx-php-fpm 作為 Docker base image
- 測試二: Dockerfile (https://github.com/dwchiang/nginx-php-fpm/blob/master/Dockerfile-8.5.20-laravel-bitnami) 使用 bitnami/laravel 作為 Docker base image
測試環境:
- MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
- CPU 2 GHz Quad-Core Intel Core i5 (x86)
- Docker-compose 容器條件:
- 1 CPU
- 512m memory
測試頁面
- Default Homepage: Laravel 原生預設的首頁
測試準備
- 每次測試都使用一個乾淨的容器環境,盡可能於測試時減少干擾。
- Concurrent 1
- Duration 60 seconds (1 minute)
測試日期
- 2021-0706
測試結果
- Container Image Size
- Test Page: Default Homepage
分析
- 比較
dwchiang/nginx-php-fpm
和bitnami/laravel
之間的異同
dwchiang/nginx-php-fpm bitnami/laravel OS_ARCH linux/arm64
andlinux/amd64
only linux/amd64
OS buster
bitnami/minideb
Packages flexibility HTTP Server nginx PHP’s built-in development server PHP Version 7.4.21 7.4.21 Laravel Version 8.49.1 8.49.1 - 比較
結論
- Docker image bitnami/laravel (或說 使用 PHP 內建 HTTP Server 的容器)適合快速在本機建構開發環境,但不一定適合運用在生產環境 (production environment)。
Laravel 8.19.0 with PHP 8.0/7.4/7.3 on Buster/Alpine 3.12
- 測試目的
- 測試 Laravel 8.19.0 搭載當下 PHP 8.0/7.4/7.3 並使用不同作業系統容器底層 Buster/Alpine 3.12 的運作結果
- 測試環境:
- MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports)
- CPU 2 GHz Quad-Core Intel Core i5 (x86)
- Docker-compose 容器條件:
- 1 CPU
- 512m memory
- Nginx: 1.18.0
- 測試頁面
- Default Homepage: Laravel 原生預設的首頁
- Names: 先 seed 50 位(假的)使用者進資料庫(使用 Docker-compose 帶起),然後將所有使用者從資料庫讀出後,顯示這 50 位使用者名稱在頁面上。(備忘:Laravel 7/8 的 route/seed 語法有變更。)
- 測試準備
- 每次測試都使用一個乾淨的容器環境,盡可能於測試時減少干擾。
- Concurrent 1
- Duration 60 seconds (1 minute)
- 測試日期
- 2021-0417
- 測試結果
- Container Image Size
- Test Page: Default Homepage
- Test Page: Names