docker存儲volume
環境 centos7.4 , Docker version 17.12.0-ce
docker volume創建、備份、nfs存儲
#docker volume
數據存容器內,刪容器即銷毀全部數據
要保留的數據(數據持久化),需存儲在容器外
docker volume是文件或目錄,mount到docker容器中使用
- docker volume
- bind muount #掛載任意目錄或文件
- Volumes #固定路徑的目錄,docker管理
- tmpfs mounts #存放宿主機內存中
docker volume 官網文檔地址 https://docs.docker.com/storage/volumes/
#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
# 使用--tmpfs
docker run -dit --name tmpfs-test --tmpfs /app busybox
#Volumes
不指定掛載目錄,默認目錄/var/lib/docker/volumes/
/_data/
docker volumes可管理,官方推薦
.#使用Volumes
#不指定掛載目錄,自動創建 volumes/<ID號>/_data/
docker run -dit --name busybox2 -v /data/test busybox
#在容器創建目文件
docker exec busybox2 touch /data/test/test2.txt
#在宿主機查看文件路徑
find /var/lib/docker/volumes -name test2.txt
docker inspect busybox2 |grep Source
.#docker volume命令管理
#創建volume
docker volume create volume-test1
#查看參數
docker inspect volume-test1
#使用volume
docker run -dit --name busybox3 -v volume-test1:/volume busybox
#查看
docker inspect -f {{.Mounts}} busybox3
#查看docker數據卷
docker volume ls
#刪除沒使用的數據卷(謹慎使用)
docker volume prune
Bind mounts和volumes都通過-v或--volume掛載,tmpfs使用--tmpfs
三種都可以使用--mount掛載,格式更清晰,官方推薦使用
#docker volume 數據共享
- 掛載相同目錄
- 使用volume container
.#數據卷容器 volume container
--volumes-from 容器名,就會傳遞容器的掛載目錄(volume參數傳遞)
#創建容器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 volume 備份
- 備份volume掛載目錄
- 使用容器--volumes-from備份
.#使用數據卷容器備份busybox4的volumes
docker run --rm --volumes-from busybox4 -v $(pwd):/backup busybox \
tar cvf /backup/backup.tar /data/test2/
.
以上docker volume實例,全部在單台docker主機
docker集群環境,需要使用共享存儲、分布式存儲
#docker volume使用NFS存儲
#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 {{.Mounts}} 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
##################################
.#刪除測試容器,volume
docker rm -f -v tmpfs-test busybox{1,2,3,4,5,6,7}
#-f 強制刪除,-v 刪除volume
docker volume prune