5.1 綁定目錄 (bind mounts) 的概念
通過使用綁定目錄 (bind mounts) 將主機的目錄掛載到容器中是 Docker 的一個強大功能,可以讓容器直接使用位於主機系統上的文件和目錄。這在開發、測試和配置時特別有用,當需要使用本地文件而無需將它們複製到容器時,這個功能尤為便捷。在這次講座中,我們將探討如何使用綁定目錄,並給出示例和最佳實踐。
綁定目錄允許將主機系統中的特定目錄或文件掛載到容器中。這與由 Docker 管理並存儲在特殊目錄中的 volumes 不同。
使用綁定目錄的優點
- 直接訪問主機文件:容器可以直接使用和修改位於主機上的文件。
- 開發便利性:開發者可以在主機上修改文件,並即時看到這些更改體現在容器中。
- 彈性靈活:主機上的任何目錄都可以掛載到容器中。
用於掛載綁定目錄的命令
綁定目錄可使用參數 -v
或 --mount
在啟動容器時進行掛載。
5.2 使用參數 -v
的範例
1. 將主機的目錄掛載到容器中
以下是一個簡單的例子,說明如何將主機的目錄掛載到容器中:
docker run -d --name my_container -v /path/on/host:/path/in/container nginx
在這個範例中,主機上的目錄 /path/on/host
被掛載到 nginx 容器內的目錄 /path/in/container
中。
2. 將主機的文件掛載到容器中
你也可以掛載單個文件:
docker run -d --name my_container -v /path/on/host/config.conf:/etc/nginx/nginx.conf nginx
在這個範例中,主機上的配置文件 config.conf
被作為配置文件 nginx.conf
掛載到容器內。
5.3 使用參數 --mount
的範例
參數 --mount
提供了更詳細的方式來掛載綁定的目錄,並可以指定不同的參數。
1. 使用 --mount
掛載目錄
docker run -d --name my_container --mount type=bind,source=/path/on/host,target=/path/in/container nginx
這個範例與前面使用 -v
的範例類似,但它使用了更詳細的語法。
2. 掛載為唯讀模式
docker run -d --name my_container --mount
type=bind,source=/path/on/host,target=/path/in/container,readonly nginx
在這個範例中,目錄以唯讀模式掛載,這樣可以防止在容器中對檔案進行更改。
5.4 實際範例
為了開發 web 應用程式,你可以將主機上的原始碼目錄掛載到 container 中。
在主機上創建原始碼目錄:
mkdir -p ~/my_web_app
echo "Hello, World!" > ~/my_web_app/index.html
使用掛載目錄啟動 container:
docker run -d --name web_dev -v ~/my_web_app:/usr/share/nginx/html nginx
現在對主機上 ~/my_web_app 目錄的任何更動都會立即反映在 container 中。
範例 2: 使用配置文件
你可以將主機上目錄中的配置文件掛載到 container 中。
在主機上創建配置文件:
echo "user www-data;" > ~/nginx.conf
echo "worker_processes auto;" >> ~/nginx.conf
使用掛載配置文件啟動 container:
docker run -d --name nginx_custom -v ~/nginx.conf:/etc/nginx/nginx.conf nginx
在這個範例中,主機上的 Nginx 配置文件被用於 container 內。
5.5 檢查已掛載的目錄和文件
你可以使用 docker exec 指令來在容器內執行命令,以檢查掛載目錄和文件的內容。
範例
檢查目錄內容:
docker exec -it my_container ls /path/in/container
檢查文件內容:
docker exec -it my_container cat /path/in/container/config.conf
刪除綁定目錄
綁定目錄不直接由 Docker 管理,因此刪除操作是在主機文件系統層面進行的。
範例
刪除主機上的綁定目錄:
rm -r /path/on/host
GO TO FULL VERSION