#環境 centos7.4 , docker version 17.12.0-cedocker volume建立、備份、nfs儲存
資料存容器內,刪容器即銷毀全部資料要保留的資料(資料持久化),需儲存在容器外
docker volume是檔案或目錄,mount到docker容器中使用
docker volume 官網文件位址
#bind muount例項
#docker掛載檔案或目錄到容器
#建立目錄及檔案
mkdir -p /data/test1
echo 'docker volume'>/data/test1/test.txt
#建立容器,-v 掛載目錄(預設讀寫許可權)
docker run -dit --name busybox1 -v /data/test1:/data/test1 busybox
#檢視docker exec busybox1 cat /data/test1/test.txt
#修改檔案後,在檢視本地是否更改
docker exec busybox1 echo my files>>/data/test1/test.txt
docker exec busybox1 cat /data/test1/test.txt
cat /data/test1/test.txt
為保證dockerfile可移植,構建映象不能使用bind muount#tmpfs mounts#volumes#使用--tmpfs
#不指定掛載目錄,預設目錄/var/lib/docker/volumes//_data/#使用volumes#docker volumes可管理,官方推薦
#docker volume命令管理#不指定掛載目錄,自動建立 volumes/#在容器建立目檔案
docker exec busybox2 touch /data/test/test2.txt
#在宿主機檢視檔案路徑
find /var/lib/docker/volumes -name test2.txt
docker inspect busybox2 |grep source
#建立volume
docker volume create volume-test1
#檢視引數
docker inspect volume-test1
#使用volume
docker run -dit --name busybox3 -v volume-test1:/volume busybox
#檢視docker inspect -f } busybox3
#檢視docker資料卷
docker volume ls
#刪除沒使用的資料卷(謹慎使用)
docker volume prune
bind mounts和volumes都通過-v或--volume掛載,tmpfs使用--tmpfs#資料卷容器 volume container三種都可以使用--mount掛載,格式更清晰,官方推薦使用
# --volumes-from 容器名,就會傳遞容器的掛載目錄(volume引數傳遞)#使用資料卷容器備份busybox4的volumes#建立容器busybox4(不需要啟動)
mkdir -p /data/test2
echo 'busybox4'>/data/test2/test.txt
docker create --name busybox4 -v /data/test2:/data/test2 busybox
#--volumes-from 使用其它容器的volume
docker run -dit --name busybox5 --volumes-from busybox4 busybox
#檢視docker exec busybox5 cat /data/test2/test.txt
#掛載多個 資料卷容器
docker run -dit --name busybox6 --volumes-from busybox4 --volumes-from busybox1 busybox
docker exec busybox6 ls /data/ #檢視
docker run --rm --volumes-from busybox4 -v $(pwd):/backup busybox \
tar cvf /backup/backup.tar /data/test2/
以上docker volume例項,全部在單台docker主機docker集群環境,需要使用共享儲存、分布式儲存
#nfs服務端,配置nfs共享
yum install nfs-utils rpcbind -y
mkdir -p /data/nfs/docker
echo "/data/nfs *(rw,no_root_squash,sync)">>/etc/exports
exportfs -r
systemctl start rpcbind nfs-server
systemctl enable rpcbind nfs-server
showmount -e localhost
#nfs客戶端
yum install -y nfs-utils rpcbind
#建立volume 連線 172.16.50.43:/data/nfs
docker volume create --driver local \
--opt type=nfs \
--opt o=addr=172.16.50.43,rw \
--opt device=:/data/nfs \
volume-nfs
#檢視docker volume ls
docker volume inspect volume-nfs
#容器使用volume-nfs
docker run -dit --name busybox7 -v volume-nfs:/nfs busybox
#檢視docker inspect -f } busybox7
df -h |grep /data/nfs
#volume目錄/var/lib/docker/volumes/volume-nfs/_data自動掛載到了nfs服務上
#容器創檔案測試
docker exec busybox7 touch /nfs/testfiles.txt
#使用volume driver 可實現更多的backend#刪除測試容器,volumedocker rm -f -v tmpfs-test busybox
#-f 強制刪除,-v 刪除volume
docker volume prune
docker volume資料掛載
背景 未解決多個應用資料共享,docker有自己非常好的解決方案。即通過volume掛載,將硬碟上的資料或者檔案對映到映象容器中,達到乙份資料多處使用,即時修改,即時生效。下面介紹兩種docker資料掛載的方法 1.在執行執行時掛載 將本地目錄掛載到映象虛擬目錄 不足之處在於每次都要寫本地目錄,不容...
深入理解 Docker Volume
本文主要介紹了docker volume的原理以及使用方式,是docker入門教程的延伸。作者通過從資料的共享 資料容器 備份 許可權以及刪除volume五方面深入介紹了volume的工作原理,從實戰中幫助讀者了解volume。從docker irc頻道以及 stackoverflow 的問題來看,...
深入理解Docker Volume
從docker irc頻道以及stackoverflow的問題來看,很多人還不是很明白docker volume的工作原理。在這篇文章中,我會盡最大的努力來解釋volume是如何工作的,並展示一些最佳實踐。這篇文章主要是針對那些對volume不了解的docker使用者,當然有經驗的使用者也可以通過本...