Docker系列之六:Docker 卷的使用

Docker系列之六:Docker 卷的使用

文章来源:Docker 存储 · WorkMap技术博客

创建和管理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 

编辑于 2023-07-28 17:12・IP 属地北京