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 應用。這種方法有以下優點:

  1. 環境一致性:避免了"我的機器上可以運行"的問題
  2. 簡化配置:不需要在本機安裝 PHP、Composer、MySQL 等
  3. 輕鬆遷移:可以在任何支持 Docker 的系統上運行
  4. 隔離性:不同專案的環境彼此隔離,不會互相影響

參考資源