#環境 centos7.4 , Docker version 17.12.0-ce
docker volume建立、備份、nfs存儲docker
數據存容器內,刪容器即銷燬所有數據
要保留的數據(數據持久化),需存儲在容器外
docker volume是文件或目錄,mount到docker容器中使用shell
docker volume 官網文檔地址 https://docs.docker.com/storage/volumes/centos
#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 muountapp
# 使用--tmpfs docker run -dit --name tmpfs-test --tmpfs /app busybox
#不指定掛載目錄,默認目錄/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命令管理centos7
#建立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掛載,格式更清晰,官方推薦使用code
#數據卷容器 volume containerserver
# --volumes-from 容器名,就會傳遞容器的掛載目錄(volume參數傳遞)blog
#建立容器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/ #查看
#使用數據卷容器備份busybox4的volumes
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 {{.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