一.案例
首先我們通過一則案例來引出問題。
我們要修改nginx容器內的html目錄下的index.html文件,并且要將靜態資源部署到nginx的html目錄,就要首先知道該html目錄的所在位置。
我們首先查看nginx鏡像的幫助文檔,
這里就是將有關靜態資源目錄的,這里面有一個說明:static-html-directory——靜態的html目錄。后面這個目錄就是nginx容器內html目錄的所在路徑。?
我們通過docker進入到nginx容器內部,并cd到靜態資源路徑下,使用ls命令果然查看到有index.html文件。我們使用vi命令進行編輯,結果發現命令沒有找到。這是為什么呢?
原因是docker的容器中并沒有包含,只包含應用運行必備的系統函數。
那要在容器內修改資源非常困難,別說把文件拷貝進去了。
那該如何解決當前問題呢?這就要用到數據卷技術了。
二.數據卷
數據卷是一個虛擬目錄,是容器和宿主機目錄之間映射的橋梁。當我們創建數據卷時,數據卷會和容器中的文件進行關聯和掛載,并且也會在宿主機中創建一個特定的目錄去和數據卷進行關聯。這樣,宿主機文件系統和Nginx容器就通過數據卷間接關聯了。當我們操作宿主機內部的文件時,Nginx容器也會執行同樣的操作。反之亦然。雙方修改同修改,刪除同刪除。
那么問題來了,我們該怎么樣去創建數據卷呢?
知道了如何創建數據卷,那么我們要怎樣將容器掛載在數據卷上呢?
還是使用docker run命令,使用“-v 數據卷:容器內目錄”進行數據卷的掛載。數據卷名稱可以任意,只要不與其他數據卷名稱沖突即可。
注意:
1.當我們要進行數據卷掛載時,要在容器被創建的同時進行掛載,否則后續將無法掛載。如果創建時未掛載,以后將沒有辦法再掛載。
2.如果數據卷不存在將自動掛載,這也就意味著我們不用執行docker volume create命令來創建數據卷。
三.命令
# 1.首先創建容器并指定數據卷,注意通過 -v 參數來指定數據卷
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx# 2.然后查看數據卷
docker volume ls
# 結果
DRIVER VOLUME NAME
local 29524ff09715d3688eae3f99803a2796558dbd00ca584a25a4bbc193ca82459f
local html# 3.查看數據卷詳情
docker volume inspect html
# 結果
[{"CreatedAt": "2024-05-17T19:57:08+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/html/_data","Name": "html","Options": null,"Scope": "local"}
]# 4.查看/var/lib/docker/volumes/html/_data目錄
ll /var/lib/docker/volumes/html/_data
# 可以看到與nginx的html目錄內容一樣,結果如下:
總用量 8
-rw-r--r--. 1 root root 497 12月 28 2021 50x.html
-rw-r--r--. 1 root root 615 12月 28 2021 index.html# 5.進入該目錄,并隨意修改index.html內容
cd /var/lib/docker/volumes/html/_data
vi index.html# 6.打開頁面,查看效果# 7.進入容器內部,查看/usr/share/nginx/html目錄內的文件是否變化
docker exec -it nginx bash
當執行了創建鏡像并掛載的操作之后,我們查看數據卷。通過以下命令:
docker volume ls
可以看到下面確實有一個名為html的數據卷。
接著我們查看掛載點,即該數據卷掛載到宿主機的哪個位置上了。我們執行命令:
docker volume inspect html
可以看到該數據卷掛載到宿主機的"/var/lib/docker/volumes/html/_data"路徑上了。?
# 3.查看數據卷詳情
docker volume inspect html
# 結果
[{"CreatedAt": "2024-05-17T19:57:08+08:00","Driver": "local","Labels": null,"Mountpoint": "/var/lib/docker/volumes/html/_data","Name": "html","Options": null,"Scope": "local"}
]
這就展示了該數據卷的詳細信息,其中Mountpoint展示了其掛載在宿主機上的詳細位置。
我們可以進入到該目錄下:
cd /var/lib/docker/volumes/html/_data
ll就可以看到nginx的html里面的內容了。
我們便可以在這里使用vi進行修改,但是并不用這么麻煩,我們只要雙擊index.html就可以進行修改了。?
?