日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

docker的文件流处理_Docker数据卷Volume实现文件共享、数据迁移备份(三)--技术流ken...

發布時間:2025/3/12 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 docker的文件流处理_Docker数据卷Volume实现文件共享、数据迁移备份(三)--技术流ken... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

前面已經寫了兩篇關于docker的博文了,在工作中有關docker的基本操作已經基本講解完了。相信現在大家已經能夠熟練配置docker以及使用docker來創建鏡像以及容器了。本篇博客將會講解如何讓容器中的一個目錄與宿主機的一個目錄進行綁定。這樣就可以實現容器與宿主機之間的文件共享。

例如:我們只要把網站數據放到宿主機的共享文件中,無需再頻繁登錄容器,就可以實現網站的部署,這樣是不是很酷?

接下來本篇博客將會使用幾個簡單的命令帶你完整演示上面的例子怎么玩。

另外,在《Docker端口映射及創建鏡像演示(二)--技術流ken》我的這篇博文中雖然可以創建鏡像, 但是還是嚴重依賴于一個別人做好的一個鏡像,無法定制自己的鏡像,其實更適合于備份或者容錯使用。

下一篇博客將會再講解一個創建鏡像更高級的操作,讓你可以真正定制屬于自己的鏡像。

但鑒于篇幅大小,本篇博客先詳細講解數據卷volume,具體如何創建更高級的鏡像,將會在下一篇博客中具體演示,敬請期待。

數據卷volume功能特性

數據卷 是一個可供一個或多個容器使用的特殊目錄,實現讓容器中的一個目錄和宿主機中的一個文件或者目錄進行綁定。數據卷 是被設計用來持久化數據的

對于數據卷你可以理解為NFS中的哪個分享出來的掛載點,指宿主機共享的目錄。

主要有如下的功能和特性

容器中數據的持久存儲

容器間的資源共享

容器的遷移(分布式)

對數據卷的修改會立馬生效

對數據卷的更新,不會影響鏡像

數據卷默認會一直存在,即使容器被刪除 (注意docker自主管理的會被刪除,容器刪除前一定要對數據卷進行備份)

數據卷volume共享方式

實現數據卷有如下三種方法

Bind mount volume:用戶需要明確指定容器中的目錄和宿主機中的哪個目錄進行綁定

Docker Management Volume:docker daemon自行管理將容器中的目錄和宿主機中的哪個目錄進行綁定

基于一個現有容器實現多個容器之間文件共享

數據卷volume文件共享之Bind Mount Volume

1.?Bind mount volume

第一步:在宿主機創建目錄并準備測試文件

[root@ken ~]# mkdir /ken

[root@ken~]# echo "test for volumes by ken">/ken/index.html

第二步:啟動容器

-it:互動模式登錄容器,并分配一個終端

--name:指定容器名稱

-p:小p指定容器的80端口映射為宿主機的7879端口。忘記的童鞋可以溫習我上一篇博客《Docker端口映射及創建鏡像演示(二)--技術流ken》

--rm:表示退出容器時,容器一起刪除

-v:指定volumes,格式為:? ?宿主機共享目錄:容器目錄? ,這樣宿主機的/ken目錄就被掛載到了容器的/data/目錄下了

[root@ken ~]# docker container run -it --name ken1 -p 7879:80 --rm -v /ken:/data/busybox/ #

第三步:查看掛載點

可以發現容器內有了/data目錄而且還有了我們創建測試文件

注意:如果容器內沒有我們指定的掛載點,會自動創建

[root@ken ~]# docker container run -it --name ken -v /ken:/data/busybox/ # ls /data

index.html/ # cat /data/index.html

testfor volumes by ken

第四步:啟動容器的apache

/ # httpd -h /data

第五步:查看端口

可以發現現在宿主機已經有了7879端口了

[root@ken ~]# ss -tnl

State Recv-Q Send-Q Local Address:Port Peer Address:Port

LISTEN0 128 *:111 *:*LISTEN0 1024 127.0.0.1:8080 *:*LISTEN0 511 *:80 *:*LISTEN0 128 *:22 *:*LISTEN0 1024 :::7879 :::*LISTEN0 70 :::3306 :::*LISTEN0 128 :::111 :::*LISTEN0 128 :::22 :::*

第六步:瀏覽器進行訪問

現在我們就可以使用宿主機的IP地址加上我們映射的端口就可以訪問容器中的網站數據內容了

第七步:修改網站數據進行測試

現在我們修改宿主機分享出去的目錄下的內容,檢查看容器內的內容是否會發生改變

[root@ken ~]# echo "this is the append line for ken">> /ken/index.html

第八步:瀏覽器刷新

可以發現我們追加的內容已經可以看到了,說明容器中網站數據內容已經被成功修改了

數據卷volume文件共享之Docker Management Volume

Docker Management Volume與Bind Mount Volume區別就是它會自己管理將會把容器中的目錄與宿主機哪個目錄進行綁定

第一步:啟動容器

這個時候的-v后面只需要跟上容器內的一個目錄即可

[root@ken ~]# docker container run -it --name ken1 --rm -v /data/ busybox

第二步:查看容器的目錄

可以發現目錄不存在也是自動創建

現在目錄下沒有任何文件

[root@ken ~]# docker container run -it --name ken1 --rm -v /data/busybox/ # ls /data/

/ #

第三步:查看掛載點

我們檢查看下容器內的這個目錄被掛載到了那個宿主機的那個位置

可以發現容器中的data目錄被掛載到了宿主機的如下目錄下

[root@ken ~]# docker container inspect ken1 |grep Source"Source": "/var/lib/docker/volumes/61535b617c3d6a41d2a8dd965622bb44e27029c1fffbb166bc940fcffd069560/_data",

第四步:宿主機創建文件進行測試

我們可以在宿主機的共享目錄中創建文件查看容器內是否有相同文件即可驗證

[root@ken ~]# cd /var/lib/docker/volumes/61535b617c3d6a41d2a8dd965622bb44e27029c1fffbb166bc940fcffd069560/_data

[root@ken _data]# touch ken{1..5}

[root@ken _data]# ls

ken1 ken2 ken3 ken4 ken5

第五步:容器內查看

第二次查看/data目錄下即可發現我們剛才在宿主機內創建的文件了

[root@ken ~]# docker container run -it --name ken1 --rm -v /data/busybox/ # ls /data/

/ # ls /data/ken1 ken2 ken3 ken4 ken5/ #

數據卷volume文件共享之基于一個現有容器

第一步:再次啟動一個容器

--volumes-from:后面指定容器名,上一個實驗我已經啟動了一個容器ken1

[root@ken ~]# docker run --name ken2 -it --volumes-from ken1 --rm busybox

第二步:查看新容器的文件

可以在新創建的容器有了我們之前創建容器的文件了

/ # ls /data/ken1 ken2 ken3 ken4 ken5

第三步:在新容器內創建新的文件

如下我創建了一個kenken的文件

/ # cd /data/data # touch kenken/data # ls ./ken1 ken2 ken3 ken4 ken5 kenken

第四步:查看ken1容器

在ken1容器內查看是否已經有了我們創建的文件

可以發現在ken1容器內也有了我們在新容器內創建的文件了

[root@ken ~]# docker container run -it --name ken1 --rm -v /data/busybox/ # ls /data/

/ # ls /data/ken1 ken2 ken3 ken4 ken5/ # ls /data

ken1 ken2 ken3 ken4 ken5 kenken

第五步:查看宿主機

其實這個時候宿主機也應該有我們剛才創建的文件

這樣就實現了多臺容器之間以及和多臺容器和宿主機之間的文件共享

[root@ken ~]# ls /var/lib/docker/volumes/61535b617c3d6a41d2a8dd965622bb44e27029c1fffbb166bc940fcffd069560/_data

ken1 ken2 ken3 ken4 ken5 kenken

數據卷volume之實現數據遷移備份

相信大家在讀懂上面的實驗之后對于如何實現數據的遷移備份已經有了大概的認識,其實我們只要備份宿主機共享目錄下的數據即可。

下面進行詳細演示,我還是以我上面的實驗為基礎,實現刪除容器ken1,ken2, 再次創建一個容器ken3,實現數據的遷移。

第一步:刪除容器

下面我將所有的容器都刪除掉了

[root@ken ~]# docker container rm $(docker ps -a -q)

a8b4931d0482

b0a31b4fabe5

636651b79907

1b47e65fbb56

e958c6ea706b

c8b820f356ec

[root@ken~]# docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

第二步:查看宿主機文件

數據卷有一個特性就是即使容器被刪除了,數據卷也會一直存在

但是需要注意docker自主管理的數據卷會被刪除,容器刪除前一定要做備份。

現在我們自己創建的數據卷還在

[root@ken ~]# cat /ken/index.html

testforvolumes by kenthis is the append line for ken

第三步:啟動一個容器

[root@ken ~]# docker run --name ken3 -it -p 6767:80 -v /ken:/data/ --rm busybox

第四步:啟動容器的apache

/ # httpd -h /data

第五步:瀏覽器訪問

訪問瀏覽器可以看到如下的界面

這樣就實現了數據的遷移。

總結

以上是生活随笔為你收集整理的docker的文件流处理_Docker数据卷Volume实现文件共享、数据迁移备份(三)--技术流ken...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。