磁碟區類型快速比較以下是使用 --mount
的具名磁碟區和繫結掛載的範例
- 具名磁碟區:
type=volume,src=my-volume,target=/usr/local/data
- 繫結掛載:
type=bind,src=/path/to/data,target=/usr/local/data
下表概述了磁碟區掛載和繫結掛載之間的主要差異。
| 具名磁碟區 | 繫結掛載 |
---|
主機位置 | Docker 選擇 | 您決定 |
使用容器內容填充新的磁碟區 | 是 | 否 |
支援磁碟區驅動程式 | 是 | 否 |
在查看如何使用繫結掛載來開發應用程式之前,您可以執行一個快速實驗,以實際了解繫結掛載的工作方式。
確認您的 getting-started-app
目錄位於 Docker Desktop 檔案共用設定中定義的目錄中。此設定定義了您可以與容器共用檔案系統的哪些部分。有關存取此設定的詳細資訊,請參閱檔案共用。
開啟終端機並將目錄更改為 getting-started-app
目錄。
執行以下命令,以在具有繫結掛載的 ubuntu
容器中啟動 bash
。
--mount type=bind
選項告訴 Docker 建立一個繫結掛載,其中 src
是主機上的目前工作目錄 (getting-started-app
),而 target
是該目錄在容器內應該出現的位置 (/src
)。
執行命令後,Docker 會在容器檔案系統的根目錄中啟動一個互動式 bash
工作階段。
將目錄更改為 src
目錄。
這是您在啟動容器時掛載的目錄。列出此目錄的內容會顯示與主機上 getting-started-app
目錄中相同的檔案。
建立一個名為 myfile.txt
的新檔案。
開啟主機上的 getting-started-app
目錄,觀察 myfile.txt
檔案是否在目錄中。
從主機刪除 myfile.txt
檔案。
在容器中,再次列出 app
目錄的內容。觀察該檔案現在是否已消失。
使用 Ctrl
+ D
停止互動式容器工作階段。
繫結掛載的簡短介紹到此為止。此程序示範了如何在主機和容器之間共用檔案,以及如何在兩端立即反映變更。現在您可以使用繫結掛載來開發軟體。
使用繫結掛載在本機開發設定中很常見。優點是開發機器不需要安裝所有建置工具和環境。使用單個 docker run 命令,Docker 即可提取依賴項和工具。
以下步驟描述如何使用執行以下操作的繫結掛載來執行開發容器
- 將您的程式碼掛載到容器中
- 安裝所有依賴項
- 啟動
nodemon
以監控檔案系統變更
您可以使用 CLI 或 Docker Desktop 來執行具有繫結掛載的容器。
確保您目前沒有任何正在執行的 getting-started
容器。
從 getting-started-app
目錄執行以下命令。
以下是命令的分解
-dp 127.0.0.1:3000:3000
- 與之前相同。在分離 (背景) 模式下執行並建立埠映射-w /app
- 設定「工作目錄」或命令將從中執行的目前目錄--mount type=bind,src="$(pwd)",target=/app
- 將主機的目前目錄繫結掛載到容器中的 /app
目錄node:18-alpine
- 要使用的映像檔。請注意,這是 Dockerfile 中應用程式的基礎映像檔sh -c "yarn install && yarn run dev"
- 命令。您正在使用 sh
啟動 shell (alpine 沒有 bash
) 並執行 yarn install
以安裝套件,然後執行 yarn run dev
以啟動開發伺服器。如果您查看 package.json
,您會看到 dev
指令碼啟動了 nodemon
。
您可以使用 docker logs <container-id>
觀看日誌。當您看到以下內容時,您就知道可以開始了
當您完成觀看日誌後,請按 Ctrl
+C
退出。
確保您目前沒有任何正在執行的 getting-started
容器。
從 getting-started-app
目錄執行以下命令。
以下是命令的分解
-dp 127.0.0.1:3000:3000
- 與之前相同。在分離 (背景) 模式下執行並建立埠映射-w /app
- 設定「工作目錄」或命令將從中執行的目前目錄--mount "type=bind,src=$pwd,target=/app"
- 將主機的目前目錄繫結掛載到容器中的 /app
目錄node:18-alpine
- 要使用的映像檔。請注意,這是 Dockerfile 中應用程式的基礎映像檔sh -c "yarn install && yarn run dev"
- 命令。您正在使用 sh
啟動 shell (alpine 沒有 bash
) 並執行 yarn install
以安裝套件,然後執行 yarn run dev
以啟動開發伺服器。如果您查看 package.json
,您會看到 dev
指令碼啟動了 nodemon
。
您可以使用 docker logs <container-id>
觀看日誌。當您看到以下內容時,您就知道可以開始了
當您完成觀看日誌後,請按 Ctrl
+C
退出。
確保您目前沒有任何正在執行的 getting-started
容器。
從 getting-started-app
目錄執行以下命令。
以下是命令的分解
-dp 127.0.0.1:3000:3000
- 與之前相同。在分離 (背景) 模式下執行並建立埠映射-w /app
- 設定「工作目錄」或命令將從中執行的目前目錄--mount "type=bind,src=%cd%,target=/app"
- 將主機的目前目錄繫結掛載到容器中的 /app
目錄node:18-alpine
- 要使用的映像檔。請注意,這是 Dockerfile 中應用程式的基礎映像檔sh -c "yarn install && yarn run dev"
- 命令。您正在使用 sh
啟動 shell (alpine 沒有 bash
) 並執行 yarn install
以安裝套件,然後執行 yarn run dev
以啟動開發伺服器。如果您查看 package.json
,您會看到 dev
指令碼啟動了 nodemon
。
您可以使用 docker logs <container-id>
觀看日誌。當您看到以下內容時,您就知道可以開始了
當您完成觀看日誌後,請按 Ctrl
+C
退出。
確保您目前沒有任何正在執行的 getting-started
容器。
從 getting-started-app
目錄執行以下命令。
以下是命令的分解
-dp 127.0.0.1:3000:3000
- 與之前相同。在分離 (背景) 模式下執行並建立埠映射-w //app
- 設定「工作目錄」或命令將從中執行的目前目錄--mount type=bind,src="/$(pwd)",target=/app
- 將主機的目前目錄繫結掛載到容器中的 /app
目錄node:18-alpine
- 要使用的映像檔。請注意,這是 Dockerfile 中應用程式的基礎映像檔sh -c "yarn install && yarn run dev"
- 命令。您正在使用 sh
啟動 shell (alpine 沒有 bash
) 並執行 yarn install
以安裝套件,然後執行 yarn run dev
以啟動開發伺服器。如果您查看 package.json
,您會看到 dev
指令碼啟動了 nodemon
。
您可以使用 docker logs <container-id>
觀看日誌。當您看到以下內容時,您就知道可以開始了
當您完成觀看日誌後,請按 Ctrl
+C
退出。
確保您目前沒有任何正在執行的 getting-started
容器。
使用繫結掛載執行映像檔。
選擇 Docker Desktop 頂部的搜尋方塊。
在搜尋視窗中,選擇**映像檔**索引標籤。
在搜尋方塊中,指定容器名稱 getting-started
。
**提示**
使用搜尋篩選器篩選映像檔,僅顯示**本機映像檔**。
選擇您的映像檔,然後選擇**執行**。
選擇**選用設定**。
在**主機路徑**中,指定主機上 getting-started-app
目錄的路徑。
在**容器路徑**中,指定 /app
。
選擇**執行**。
您可以使用 Docker Desktop 觀看容器日誌。
- 在 Docker Desktop 中選擇**容器**。
- 選擇您的容器名稱。
當您看到以下內容時,您就知道可以開始了
在您的主機上更新您的應用程式,並查看容器中反映的變更。
在 src/static/js/app.js
檔案中,第 109 行,將「新增項目」按鈕改為「新增」。
儲存檔案。
在您的網路瀏覽器中重新整理頁面,由於繫結掛載,您應該幾乎立即看到變更。Nodemon 會偵測到變更並重新啟動伺服器。Node 伺服器重新啟動可能需要幾秒鐘的時間。如果您收到錯誤訊息,請在幾秒鐘後嘗試重新整理。
您可以隨意進行任何其他您想進行的變更。每次您進行變更並儲存檔案時,由於繫結掛載,變更都會反映在容器中。當 Nodemon 偵測到變更時,它會自動重新啟動容器內的應用程式。完成後,停止容器並使用以下指令建置新的映像檔:
此時,您可以保存您的資料庫並在開發過程中看到應用程式中的變更,而無需重建映像檔。
除了磁碟區掛載和繫結掛載之外,Docker 還支援其他掛載類型和儲存驅動程式,以處理更複雜和專門的應用場景。
相關資訊
為了讓您的應用程式準備好投入生產,您需要將資料庫從 SQLite 遷移到可以更好地擴展的資料庫。為了簡化起見,您將繼續使用關聯式資料庫,並將您的應用程式切換到使用 MySQL。但是,您應該如何運行 MySQL?您如何允許容器之間相互通訊?您將在下一節中了解到這一點。