容器運行時應該盡量保持容器存儲層不發生寫操作,對於數據庫類需要保存動態數據的應用,其數據庫文件應該保存於卷(volume)中。為了防止運行時用戶忘記將動態文件所保存目錄掛載為卷,在Dockerfile 中,我們可以事先指定某些目錄掛載為匿名卷,這樣在運行時如果用戶不指定掛載,其應用也可以正常運行,不會向容器存儲層寫入大量數據。
那么Dockerfile中的VOLUME指令實際使用中是不是就是跟docker run中的-v參數一樣是將宿主機的一個目錄綁定到容器中的目錄以達到共享目錄的作用呢?
並不然,其實VOLUME指令只是起到了聲明了容器中的目錄作為匿名卷,但是並沒有將匿名卷綁定到宿主機指定目錄的功能。
但是當我們生成鏡像的Dockerfile中以Volume聲明了匿名卷,並且我們以這個鏡像run了一個容器的時候,docker會在安裝目錄下的指定目錄下面生成一個目錄來綁定容器的匿名卷(這個指定目錄不同版本的docker會有所不同)。
Dockerfile 聲明了 Volumn

但是 docker run 沒有 -v 時

就是說當Dockerfile中聲明了匿名卷,但是run的時候沒有使用-v綁定匿名卷的話,那么docker就會在/var/lib/docker/volumes這個目錄下創建一個目錄來綁定匿名卷。
docker run -v 時

