[Linux] Docker中 COPY 和 -v 的使用場景


Posted by mike-hsieh on 2024-06-18

使用 -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 參數掛載):適合於開發環境,允許即時編輯代碼並立即查看變更,無需重新構建映像。

#docker #copy #volume #use-case







Related Posts

MTR04_0809

MTR04_0809

跟你朋友介紹 Git

跟你朋友介紹 Git

CSS - Flexbox實現footer置底

CSS - Flexbox實現footer置底


Comments