前言
知識讓生活更具能量。希望我們在以後學習的路上攜手同行。您的點贊、評論和打賞都是對我最大的鼓勵。
主要內容
這篇文章我們主要說明一下容器的數據持久化。Docker數據持久化的解決方案主要有兩大類。第一類:基於本地文件系統的Volume。可以在執行Docker create 或Docker run時,通過-v參數將主機的目錄作爲容器的數據卷。這部分功能便是基於本地文件系統的volume管理。
第二類:基於plugin的Volume,支持第三方的存儲方案,比如NAS,AWS。
我們主要使用的是第一種方案。
Data Volume 詳解
下面會以數據庫的容器爲示例,先創建一個容器,並在容器中添加數據,在刪除容器之後,重啓運行一個新容器同時恢復上個容器的數據。
首先在官網的Docker Hub中查看mysql的Dockerfile 可以看到其中的Volume是怎麼定義的。
接下來我們通過官網的鏡像來創建mysql容器。執行下面的命令。
sudo docker run -d --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
接下來我們查看docker服務的volume sudo docker volume ls
查看某個volume具體的細節
sudo docker volume inspect {valuename}
這個時候我們會發現,這個volume name 是一個隨機字符串,我們使用起來不是很友好。我們可以在運行容器的時候 自己起一個Volume Name 這樣我們使用起來就方便很多了。 可以看下面的命令。
sudo docker run -d -v mysql:/var/lib/mysql --name mysql1 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
在次查看Volume sudo docker volume ls
接下來我們在這個docker 容器中給mysql添加數據
# 進入容器
sudo docker exec -it mysql1 /bin/bash
# 連接Mysql
mysql -u root
# 創建數據庫
create database mydocker;
# 退出數據庫
exit
# 退出容器
exit
下面我們就可以停止mysql1這個容器,並且刪除。然後在啓動一個mysql容器,在啓動的時候還指定使用這個Volume name。 看看我們我們上面創建的數據庫是否存在。
# 刪除容器
sodu docker rm -f mysql1
# 創建容器
sudo docker run -d -v mysql:/var/lib/mysql --name mysql2 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql
在次進入mysql容器中在查看數據庫,可以看到我們上個容器中的數據。
到此爲止我們就完成了數據的持久化,並找回已經刪除掉容器的數據,注意要自定義一個Volume Name,還要在Dockerfile中指定要持久化的路徑,這個路徑是Docker容器中的路徑!!! 這樣我們使用起來比較方便。
Bind Mouting
不需要在Dockerfile 中指定路徑。只需要在運行Docker 容器的時候使用命令進行綁定。類似於雙向綁定,就是在宿主機上的一個目錄和容器內部的一個目錄相互映射,只要在一處改了,另一處也會做相應的更改,永遠保持一致。
具體操作:
docker run -d -v $(pwd):/usr/share/nginx/html -p 80:80 --name web my-nginx
只需要使用 -v 命令就可以將宿主機的當前目錄和容器內的指定目錄綁定。
以上就是關於Docker數據持久化的相關介紹。感興趣可以掃描二維碼。