在docker容器的實際使用中,經常會遇到容器的資料持久化,容器之間的資料共享等問題,通常我們有兩種解決方案:
1)資料卷(data volumes):就是將容器內資料直接對映到本地主機環境的指定檔案目錄之中,可以理解為容器掛載乙個虛擬資料卷然後
對映到乙個主機目錄中
2)資料卷容器(data volume containers):用專門的容器來掛載資料卷,其他容器通過掛載這個父容器來實現資料共享,這個專門掛載
資料卷的容器就是資料卷容器,簡單的總結就是有乙個容器來專門管理資料的持久化和容器之間資料共享
前者常用於單一容器資料持久化,後者常用於多容器之間的資料共享和資料持久化
我們可以在映象程式執行時通過"-v /主機目錄檔名:/容器目錄名" 命令,將容器卷指定乙個主機目錄,這樣我們的程式執行的資料就可以持久
儲存到這個對映的主機目錄檔案當中。
我們舉乙個實際的例子,此處用乙個簡單.asp core程式為例子:
我們寫乙個asp core web程式,然後請求這個程式的get()介面,這個介面會將記錄日誌檔案儲存到伺服器指定的檔案中,從而通過這個程式實現
docker容器資料的持久化(記錄日誌到本地)
日誌記錄類**public class filelogger}}
catch (exception)
}public static void logerror(exception ex)
private static string filepath(string pathstr)
return pathstr + "/" + getfilename();
}private static string getfilename()
}
介面呼叫**:[httpget]
public dynamic get()
然後我們將這個程式打包,然後通過dockerfile構建成成映象然後部署到docker容器中
如果不會linux打包部署asp core程式的建議先看這篇文章:傳送門
dockerfile檔案如下
然後在包含dockerfile的專案目錄下面執行命令構建映象(不要掉了最後面那個小數點):
$ docker build -t mylog .
映象構建完成後我們執行映象到容器中,此時我們就可以-v 命令指定資料卷
此處/root/webapi/logs代表主機目錄,/data/filelogs代表容器目錄
$ docker run --name=mylog -p 8083:8083 -d -v /root/webapi/logs:/data/filelogs mylog
容器執行成功後我們我們檢視容器詳情
$ docker inspect 容器id
我們可以看到"mounts"節點下會有如圖顯示
最後我們測試一下,請求程式的get介面,然後在/root/webapi/logs可以看到我們記錄的日誌檔案
如我我們經常需要多個容器之間進行資料共享我們需要用到命令「--volumes-from」
具體例項:
1)我們從倉庫拉乙個centos的容器映象
$ docker pull centos
2)然後執行這個映象並建立乙個資料卷掛載到/mydata
$ docker run -it -v /mydata --name mycentos centos
3)再執行兩個容器,在這兩個容器中使用--volumes-from來掛載mycentos容器中的資料卷.
$ docker run -it --volumes-from mycentos --name soncentos1 centos
$ docker run -it --volumes-from mycentos --name soncentos2 centos
此時,容器soncentos1和soncentos2都掛載同乙個資料捲到相同的/mydata 目錄。三個容器任何一方在該目錄下的寫入資料,其他容器都可以看到。
可以多次使用--volumes-from引數來從多個容器掛載多個資料卷。還可以從其他已經掛載了容器卷的容器來掛載資料卷。
使用--volumes-from引數所掛載資料卷的容器自身並不需要保持在執行狀態。
如果刪除了掛載的容器(包括dbdata、db1和db2),資料卷並不會被自動刪除。如果要刪除乙個資料卷,必須在刪除最後乙個還掛載著它
的容器時顯式使用docker rm -v命令來指定同時刪除關聯的容器。
Docker資料管理 Volumes資料卷管理
4 刪除資料卷 2.啟動容器並載入資料卷 1 檢視本機容器和資料卷 docker ps a 檢視本地docker機器上的容器 docker volume ls 檢視本地docker機器上的資料卷 從上圖中可以看出,目前本地docker主機上沒有任何容器和資料卷。為了避免後續示例演示的干擾,如果機器上...
Docker容器資料管理1
容器的持久化資料如何儲存 這篇講得非常清楚 還可以參考這兩篇 然後就是官網 docker的檔案系統 映象是read only layers 容器啟動後在映象層之上新增read write layer 對於映象層檔案的修改動作是將其拷貝至read write layer進行,並hide原檔案 當容器被...
docker容器的資料管理
1 新增成功後會在宿主機上建立 software資料夾,同時也會在容器內建立檔案件 software 2 對宿主機更改檔案同時也會體現在容器上 3 對容器進行修改也會體現在宿主機上面 就像上面啟動的容器volu1,它包含資料卷,可以被其他容器掛在,這樣的容器就是資料卷容器 volumes from指...