使用 -v 參數來掛載外部路徑到 Docker 容器內是開發階段非常常見的做法。這樣做的好處是,你可以在本地編輯代碼,並立即在 Docker 容器內看到變更,無需每次都重新構建映像。以下是兩種情況的對比:
1. 使用 COPY 指令在構建映像時複製文件
這種方法適合於構建最終的生產環境映像。構建完成後,所有的應用程式文件都被複製到了 Docker 映像中。
Dockerfile 複製程式碼 示例:
FROM php:8.2-cli
WORKDIR /var/www
# 會將本地的檔案複製到 WORKDIR /var/www
COPY . .
RUN php -r "file_exists('.env') || copy('.env.example', '.env');" && \
php artisan key:generate && \
composer install
EXPOSE 8000
CMD ["php", "artisan", "serve", "--host", "0.0.0.0", "--port", "8000"]
2. 使用 -v 參數在運行容器時掛載本地路徑
這種方法適合於開發階段。你可以在本地編輯代碼,並立即在 Docker 容器內看到變更。
Dockerfile 示例(更簡單):
FROM php:8.2-cli
WORKDIR /var/www
RUN php -r "file_exists('.env') || copy('.env.example', '.env');" && \
composer install
EXPOSE 8000
CMD ["php", "artisan", "serve", "--host", "0.0.0.0", "--port", "8000"]
運行容器並掛載本地路徑:
docker run -v $(pwd):/var/www -w /var/www -p 8000:8000 php:8.2-cli sh -c "php artisan key:generate && php artisan serve --host=0.0.0.0 --port=8000"
這樣,你在本地編輯的代碼會立即反映在 Docker 容器中,方便開發和測試。以下是這些步驟的詳細說明:
確保你在專案根目錄下運行命令。
使用 -v 參數掛載本地專案目錄到容器內。
使用 -w 參數設定工作目錄。
運行 Laravel 開發伺服器。
運行以上命令後,你的應用程式應該會在 http://localhost:8000 正常運行,同時你可以在本地編輯代碼並立即在容器中看到變更。
兩種方法各有優缺點:
- 方法一(COPY 指令):適合於生產環境,確保所有依賴關係和應用程序文件都包含在映像中,運行容器時不需要本地文件。
- 方法二(-v 參數掛載):適合於開發環境,允許即時編輯代碼並立即查看變更,無需重新構建映像。