Laravel 是現今最受歡迎的 PHP 框架之一,而 Docker 則是容器化技術的領導者。將兩者結合,我們可以輕鬆地在任何環境中部署一致的 Laravel 應用。本文將詳細介紹如何使用 Docker 建立一個全新的 Laravel 12 專案,且不需要在本機安裝 PHP、Composer 或其他依賴。
環境要求
在開始之前,請確保您的系統已安裝:
- Docker
- Docker Compose
這是唯一的要求!我們會在容器內處理所有其他依賴項。
專案結構
我們將建立以下檔案和目錄結構:
laravel12-project/
├── docker/
│ └── nginx/
│ └── conf.d/
│ └── app.conf
├── docker-compose.yml
└── Dockerfile
第一步:建立專案目錄
首先,創建一個新的專案目錄:
mkdir laravel12-project
cd laravel12-project
第二步:建立 Docker 配置檔案
docker-compose.yml
這個檔案定義了我們需要的PHP 應用服務。
version: '3'
services:
app:
build:
context: .
dockerfile: Dockerfile
container_name: laravel12_installer
volumes:
- .:/app
working_dir: /app
ports:
- "8000:8000"
entrypoint: ["tail", "-f", "/dev/null"]
Dockerfile
此檔案定義了 PHP 應用容器的建構過程:
# 使用 PHP 8.4 的測試版本(假設可用)
FROM php:8.4-cli
# 安裝必要工具、curl、git、unzip
RUN apt-get update && apt-get install -y \
unzip \
git \
curl \
gnupg \
ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# 安裝 Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN composer --version
# 安裝 Node.js(含 npm) - 例如安裝 Node.js 18
RUN curl -fsSL https://deb.nodesource.com/setup_18.x | bash - \
&& apt-get update && apt-get install -y nodejs \
&& node -v && npm -v
# 可選:全域安裝一些常用工具(如 yarn)
# RUN npm install -g yarn
# 加入 Laravel Installer(可選)
RUN composer global require laravel/installer
ENV PATH="/root/.config/composer/vendor/bin:$PATH"
第三步:啟動 Docker 容器
在專案根目錄執行以下命令來啟動所有服務:
docker-compose up -d
這將會下載所需的 Docker 映像檔並啟動容器。首次執行可能需要一些時間。
第四步:安裝 Laravel 12
進入 PHP 應用容器並安裝 Laravel:
# 進入應用程式容器
docker-compose exec -it laravel12_installer bash
# 在容器內使用Composer安裝 Laravel installer
composer global require laravel/installer
# 新增Laravel 12應用程式
~/.composer/vendor/bin/laravel new example-app
第五步:配置 Laravel 環境
還是在容器內,設定 Laravel 的環境變數:
# 複製 .env 範例檔案
cp .env.example .env
# 產生應用程式金鑰
php artisan key:generate
# 設定資料庫連接資訊
sed -i 's/DB_HOST=127.0.0.1/DB_HOST=db/g' .env
sed -i 's/DB_DATABASE=laravel/DB_DATABASE=laravel/g' .env
sed -i 's/DB_USERNAME=root/DB_USERNAME=laravel/g' .env
sed -i 's/DB_PASSWORD=/DB_PASSWORD=your_mysql_password/g' .env
記得將上述命令中的 your_mysql_password 替換為您在 docker-compose.yml 檔案中設定的密碼。
第六步:執行資料庫遷移
如果您的應用需要資料庫,可以執行遷移:
php artisan migrate
第七步:訪問您的應用
恭喜!您的 Laravel 12 應用已成功部署。您可以通過瀏覽器訪問:
http://localhost:8000
您應該能看到 Laravel 的歡迎頁面。
常用 Docker 指令
在日常開發過程中,以下指令可能會很有用:
查看容器狀態
docker-compose ps
停止所有容器
docker-compose down
查看容器日誌
# 查看所有容器的日誌
docker-compose logs
# 查看特定容器的日誌
docker-compose logs app
docker-compose logs nginx
在容器內執行命令
# 執行 Artisan 命令
docker-compose exec app php artisan list
# 進入 MySQL 容器
docker-compose exec db mysql -u laravel -p
重建容器(程式碼更新後)
docker-compose build app
docker-compose up -d
自定義設置
修改連接埠
如果您想使用不同的埠口訪問應用,請修改 docker-compose.yml 中的 ports 設定:
ports:
- "自定義埠口:80"
總結
通過使用 Docker Compose,我們成功地在不安裝任何本地依賴的情況下部署了 Laravel 12 應用。這種方法有以下優點:
- 環境一致性:避免了"我的機器上可以運行"的問題
- 簡化配置:不需要在本機安裝 PHP、Composer、MySQL 等
- 輕鬆遷移:可以在任何支持 Docker 的系統上運行
- 隔離性:不同專案的環境彼此隔離,不會互相影響