Docker存储(二)卷的使用
创建和管理volumes
- 创建卷
docker volume create my-vol
- 列出卷
docker volume ls
- 查看卷详情
docker volume inspect my-vol
- 删除卷
docker volume rm my-vol
启动容器时使用卷
启动容器时,使用的卷没有创建,docker会自动创建卷
- 启动容器时,–mount或-v
docker run -d \ --name devtest \ --mount source=myvol2,target=/app \ nginx:latest
- 使用-v的方式(需要先删除刚才的devtest容器和myvol2卷)
docker run -d \ --name devtest \ -v myvol2:/app \ nginx:latest
- 只读的方式挂载卷
docker run -d \ --name=nginxtest \ --mount source=nginx-vol,destination=/usr/share/nginx/html,readonly \ nginx:latest
- 使用-v,只读的方式挂载卷(需要先删除刚才的nginxtest容器和nginx-vol卷)
docker run -d \ --name=nginxtest \ -v nginx-vol:/usr/share/nginx/html:ro \ nginx:latest
- 清除刚才创建的卷和容器
docker container stop devtest docker container rm devtest docker volume rm myvol2
启动Service的时候使用卷
-
创建service
docker service create -d \ --replicas=4 \ --name devtest-service \ --mount source=myvol2,target=/app \ nginx:latest
该命令创建4个container,使用默认的local driver时,都会使用本地的myvol2,无法共享卷数据。
-
删除刚才的service
docker service rm devtest-service
在不同机器间共享卷(通过其它的卷驱动器)
- 安装驱动插件
docker plugin install --grant-all-permissions vieux/sshfs
- 创建卷
docker volume create --driver vieux/sshfs \ -o sshcmd=test@node2:/home/test \ -o password=testpassword \ sshvolume
- 启动容器时挂载(没有的话,会自动创建)卷
docker run -d \ --name sshfs-container \ --volume-driver vieux/sshfs \ --mount src=sshvolume,target=/app,volume-opt=sshcmd=test@node2:/home/test,volume-opt=password=testpassword \ nginx:latest
备份卷
- 创建容器dbstore,创建匿名卷,挂载到/dbdata
docker run -v /dbdata --name dbstore ubuntu /bin/bash
- 用一个临时容器,备份dbstore容器的目录/dbdata的内容到本地目录$(pwd):/backup下
docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
恢复备份的卷
- 创建容器dbstore2
docker run -v /dbdata --name dbstore2 ubuntu /bin/bash
- 将备份目录下的文件($(pwd):/backup),恢复到dbstore2容器中
docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"
清除卷
- 容器终止时自动删除匿名卷(容器终止时,会删除/foo 但不会删除awesome:/bar)
docker run --rm -v /foo -v awesome:/bar busybox top
- 删除所有没有被使用的卷
docker volume prune