Docker數據卷

數據卷簡介

轉載鏈接

數據卷是一個可以供一個或多個容器使用的特殊目錄。

可以達到以下目的:

  1. 繞過“拷貝寫”系統,以達到本地磁盤 IO 的性能,(比如運行一個容器,在容器中對數據卷修改內容,會直接改變宿主機上的數據卷中的內容,所以是本地磁盤IO的性能,而不是先在容器中寫一份,最後還要將容器中的修改的內容拷貝出來進行同步。)

  2. 繞過“拷貝寫”系統,有些文件不需要在 docker commit 打包進鏡像文件。

  3. 在多個容器間共享目錄。

  4. 在宿主和容器間共享目錄。

  5. 在宿主和容器間共享一個文件

創建數據卷


方法一:dockerfile 中指定 VOLUME 後的目錄,如 VOLUME /var/lib/test

方法二:docker run 命令中加 -v 選項。如:

docker run -d -P -v /webapp training/webapp python app.py

注意: 這裏定義的 /webapp 數據卷,但是不知道宿主機上與之對應的在哪裏。我們需要仔細的觀察 docker inspect 的結果,是非常長的一段東西。在這裏我只摘出我們需要的部分:

"Mounts": [
	{
		"Type": "volume",
		"Name": "ae15b45565ac99bc8f770b226684f7ef707eb8a4d9b8111a0e6b8410ab7b7942",
		"Source": "/var/lib/docker/volumes/ae15b45565ac99bc8f770b226684f7ef707eb8a4d9b8111a0e6b8410ab7b7942/_data",
		"Destination": "/webapp",
		"Driver": "local",
		"Mode": "",
		"RW": true,
		"Propagation": ""
	}
]

"Volumes": {
	"/webapp": {}
}

注意: 這裏 “Name”: “ae15b45565ac99bc8f770b226684f7ef707eb8a4d9b8111a0e6b8410ab7b7942”,這個並不是容器 id 而是數據卷的 ID,我們可以在 /var/lib/docker/volumes/ 下找到名子爲這個數字的目錄。它就是我們數據卷在宿主機上對應的目錄。

直接掛載宿主機目錄

docker run -d -P -v /usr/local/docker/python/webapp:/webapp training/webapp python app.py

備份數據卷


這其實是利用 tar 命令來執行的。

備份的原理:使用 tar -zcvf 對數據卷打包壓縮

創建一個 MySQL 容器:

docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql

進入 /usr/local/docker/mysql 目錄,使用 tar -zxvf backup.tar.gz . 打包當前目錄,即可得到一個壓縮包,這個壓縮包就是我們需要的備份數據。

恢復數據卷


解壓縮備份數據壓縮包

tar -zxvf backup.tar.gz

重新啓動一個新的容器並將數據卷指向需要還原的數據卷目錄

docker run -p 3306:3306 --name mysql \
-v /usr/local/docker/mysql/conf:/etc/mysql \
-v /usr/local/docker/mysql/logs:/var/log/mysql \
-v /usr/local/docker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-d mysql



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章