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...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html字居右垂直设置,css文字水平垂
- 下一篇: 方钢管弹性模量计算方式_箱形系梁贝雷支架