系統學習Docker 踐行DevOps理念 6.容器數據持久化

前言

知識讓生活更具能量。希望我們在以後學習的路上攜手同行。您的點贊、評論和打賞都是對我最大的鼓勵。

主要內容

這篇文章我們主要說明一下容器的數據持久化。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數據持久化的相關介紹。感興趣可以掃描二維碼。

在這裏插入圖片描述

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