docker<容器數據卷-v>對容器內數據持久化詳解(備份)

前言

在docker創建容器,掛載目錄的時候,可能會出現目錄無法訪問無法打開的問題(cannot open directory .: Permission denied)

隻需要加一個 –privileged=true 參數即可,加上這個參數代表是以root用戶權限進入容器的,不加就是以普通用戶權限進入容器的

例如,test鏡像創建一個容器t1

docker run -d -p 5555:5555 -v /etc/config:/tmp/config --privileged=true --name t1 test

正文

容器數據卷,也就是把容器內部目錄掛載到宿主機目錄(前言中說的掛載文件 -v ),獨立於容器的生命周期之外,可以防止容器銷毀而丟失文件

特點:

1、可以在多個容器之間共享或重用

2、數據卷中的更改可以實時生效

3、數據卷中的更改不會包含在鏡像的更新中

4、數據卷的生命周期一直持續到沒有容器使用

例如,掛載本機/tmp/data目錄到容器中的/tmp/docker_data目錄(如果本機沒有/tmp/data目錄,docker會自行創建)

docker run -it --privileged=true -v /tmp/data:/tmp/docker_data --name t1 test /bin/bash

-it進入容器,在/tmp/docker_data目錄下創建一個test.txt文件,退出容器到宿主機的掛載目錄下,可以看到已經有一個test.txt文件瞭,反之在宿主機目錄下更改或創建文件,容器內目錄也同步生效

實現瞭容器內數據持久化到宿主機,並且雙方修改實時生效

如果在容器停止運行的情況下,修改宿主機掛載目錄內容,容器啟動後,同樣會讀取最新數據

如果忘記容器掛載到宿主機哪個目錄瞭,可以使用docker inspect命令查看容器信息

docker inspect 容器id

數據卷讀寫規則

像上面那個案例,默認是可讀可寫的,也就相當於在後面加瞭一個rw,即:

docker run -it --privileged=true -v /tmp/data:/tmp/docker_data:rw --name t1 test /bin/bash

如果需要容器內隻讀,可以改成ro,即

docker run -it --privileged=true -v /tmp/data:/tmp/docker_data:ro --name t1 test /bin/bash

此時在宿主機修改的內容可以同步到容器內,但是容器內是隻讀的,如果繼續在容器內操作,會提示Read-only file system

數據卷的繼承和共享

如果想要新創建一個容器t2,也使用t1的數據卷,隻需要使用–volumes-from命令繼承t1即可

docker run -it --privileged=true --volumes-from t1 --name t2 test /bin/bash

此時t2也就跟t1一樣掛載主機目錄瞭,t2裡面也可以看到/tmp/docker_data目錄下的內容,並實時更新

如果t1停瞭,對t2是沒有影響的,因為t2是繼承的t1的掛載規則

總結

到此這篇關於docker<容器數據卷-v>對容器內數據持久化文章就介紹到這瞭,更多相關docker容器內數據持久化內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: