您好,登錄后才能下訂單哦!
這篇文章主要介紹“什么是Docker容器數據卷”,在日常操作中,相信很多人在什么是Docker容器數據卷問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”什么是Docker容器數據卷”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
先來看看Docker的理念:
將運用與運行的環境打包形成容器運行 ,運行可以伴隨著容器,但是我們對數據的要求希望是持久化的
容器之間希望有可能共享數據
Docker容器產生的數據,如果不通過docker commit生成新的鏡像,使得數據做為鏡像的一部分保存下來,那么當容器刪除后,數據自然也就沒有了。為了能保存數據在docker中我們使用卷。
一句話:有點類似我們Redis里面的rdb和aof文件
卷就是目錄或文件,存在于一個或多個容器中,由docker掛載到容器,但不屬于聯合文件系統,因此能夠繞過Union File System提供一些用于持續存儲或共享數據的特性:
卷的設計目的就是數據的持久化,完全獨立于容器的生存周期,因此Docker不會在容器刪除時刪除其掛載的數據卷
特點:
1:數據卷可在容器之間共享或重用數據
2:卷中的更改可以直接生效
3:數據卷中的更改不會包含在鏡像的更新中
4:數據卷的生命周期一直持續到沒有容器使用它為止
容器的持久化
容器間繼承+共享數據
docker run -it -v /宿主機目錄:/容器內目錄 centos /bin/bash docker run -it -v /宿主機絕對路徑目錄:/容器內目錄 鏡像名 docker run -it -v /opt/docker/myDataValume:/data/VolumeContainer centos
命令將在宿主機和容器中分別創建目錄
#docker inspect 容器ID CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3f1e57169493 centos "/bin/bash">
在宿主機內創建文件,啟動容器后查看
docker run -it -v /宿主機絕對路徑目錄:/容器內目錄:ro 鏡像名 docker run -it -v /opt/docker/myDataValume:/dataVolumeContainer:ro centos
宿主機端可以對共享文件進行編輯,容器內只讀
查看dockerfile
docker inspect 621e34eea2a3
FROM centos VOLUME ["/dataVolumnContainer1","/dataVolumnContainer2"] CMD echo "finish,----success" CMD /bin/bash
root@zhanghl:/opt/docker# docker build -f /opt/docker/Dockerfile -t zhl/centos . Sending build context to Docker daemon 3.584kB Step 1/4 : FROM centos ---> 300e315adb2f Step 2/4 : VOLUME ["/dataVolumnContainer1","/dataVolumnContainer2"] ---> Running in 6c05cec1141f Removing intermediate container 6c05cec1141f ---> b017ed96a615 Step 3/4 : CMD echo "finish,----success" ---> Running in 8e2158b75c7d Removing intermediate container 8e2158b75c7d ---> ea3a76a3d696 Step 4/4 : CMD /bin/bash ---> Running in 7f2a18bbf3f0 Removing intermediate container 7f2a18bbf3f0 ---> e4998e64dece Successfully built e4998e64dece Successfully tagged zhl/centos:latest root@zhanghl:/opt/docker# docker images REPOSITORY TAG IMAGE ID CREATED SIZE zhl/centos latest e4998e64dece 41 seconds ago 209MB zhl/mytomcat 1.1 a636ea3caaed 2 days ago 672MB mongo latest 995ccc33e58f 6 days ago 449MB tomcat latest c0e850d7b9bb 7 days ago 667MB hello-world latest d1165f221234 7 weeks ago 13.3kB centos latest 300e315adb2f 4 months ago 209MB
root@zhanghl:/opt/docker# docker run -it zhl/centos [root@9a463e73a1d9 /]# pwd / [root@9a463e73a1d9 /]# ls -l total 56 lrwxrwxrwx 1 root root 7 Nov 3 15:22 bin -> usr/bin drwxr-xr-x 2 root root 4096 Apr 30 13:14 dataVolumnContainer1 drwxr-xr-x 2 root root 4096 Apr 30 13:14 dataVolumnContainer2 drwxr-xr-x 5 root root 360 Apr 30 13:14 dev drwxr-xr-x 1 root root 4096 Apr 30 13:14 etc drwxr-xr-x 2 root root 4096 Nov 3 15:22 home lrwxrwxrwx 1 root root 7 Nov 3 15:22 lib -> usr/lib lrwxrwxrwx 1 root root 9 Nov 3 15:22 lib64 -> usr/lib64 drwx------ 2 root root 4096 Dec 4 17:37 lost+found drwxr-xr-x 2 root root 4096 Nov 3 15:22 media drwxr-xr-x 2 root root 4096 Nov 3 15:22 mnt drwxr-xr-x 2 root root 4096 Nov 3 15:22 opt dr-xr-xr-x 260 root root 0 Apr 30 13:14 proc dr-xr-x--- 2 root root 4096 Dec 4 17:37 root drwxr-xr-x 11 root root 4096 Dec 4 17:37 run lrwxrwxrwx 1 root root 8 Nov 3 15:22 sbin -> usr/sbin drwxr-xr-x 2 root root 4096 Nov 3 15:22 srv dr-xr-xr-x 13 root root 0 Apr 30 13:14 sys drwxrwxrwt 7 root root 4096 Dec 4 17:37 tmp drwxr-xr-x 12 root root 4096 Dec 4 17:37 usr drwxr-xr-x 20 root root 4096 Dec 4 17:37 var [root@9a463e73a1d9 /]#
因為沒有指定宿主機的目錄,docker會生成默認的目錄
root@zhanghl:/home/zhanghl# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9a463e73a1d9 zhl/centos "/bin/sh -c /bin/bash" 2 minutes ago Up 2 minutes epic_panini root@zhanghl:/home/zhanghl# docker inspect 9a463e73a1d9
在宿主機中查看
zhanghl@zhanghl:/var/lib/docker/volumes/1119e11a0e8e98075d0d8f2fc6a01cb27b5a57b47a7b98668b8aa9b534408ab3/_data$ ls container01.txt
備注: Docker掛載主機目錄Docker訪問出現cannot open directory .: Permission denied
解決辦法:在掛載目錄后多加一個--privileged=true參數即可
到此,關于“什么是Docker容器數據卷”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。