磁盘
-v 时本地目录不存在,Docker 会自动创建。
--mount 时本地目录不存在,Docker 会报错。
--mount 更规范、可读性高、生产推荐;-v 简单、适合临时测试或快速命令。
✨ Volume
匿名卷(Anonymous Volume)
sh
docker run -v /app/data myimage👉 Docker 会在 /var/lib/docker/volumes/ 下生成一个随机目录。
命名卷(Named Volume)
https://vuepress.mirror.docker-practice.com/data_management/volume/
Volume 是特殊目录,它绕过 UFS,可以提供很多有用的特性。
- Volume 可以共享重用
- Volume 的修改会立刻生效
- Volume 的更新不会影响镜像
- Volume 会一直存在,即使容器被删除
sh
docker run -v my-vol:/app/data myimage也可以主动创建
sh
docker volume create my-vol绑定挂载(Bind Mount)
sh
docker run -v /opt/data:/app/data myimage第一个是本地目录,第二个是容器目录。
常用命令
sh
# 创建一个卷
docker volume create mydata
# 查看卷列表
docker volume ls
# 查看卷详情
docker volume inspect mydata
# 删除卷
docker volume rm mydata
# 删除所有未使用的卷
docker volume prune✨ Volume 迁移
未实践
busybox 是一个精简的 Linux 系统,它包含了很多常用的命令,比如 tar、gzip、gunzip 等。
导出
sh
docker run --rm \
-v mydata:/data \
-v $(pwd):/backup \
busybox tar czvf /backup/mydata.tar.gz -C /data .导入
sh
docker volume create mydata
docker run --rm \
-v mydata:/data \
-v $(pwd):/backup \
busybox tar xzvf /backup/mydata.tar.gz -C /data✨ mount
https://vuepress.mirror.docker-practice.com/data_management/bind-mounts/
指定挂载一个本地主机的目录到容器中。
注意示例中的:source
target 路径必须是绝对路径
具名挂载
sh
docker run -d \
--name mydb \
--mount type=volume,source=mydata,target=/var/lib/mysql \
mysql:8绑定挂载
sh
docker run -d \
--name web \
--mount type=bind,source=/opt/app,target=/usr/share/nginx/html \
nginx:alpine临时挂载
存内存中
sh
docker run -d \
--name cache \
--mount type=tmpfs,target=/app/cache \
nginx:alpinereadonly
sh
--mount type=bind,source=/src/webapp,target=/usr/share/nginx/html,readonly注意最后那个 readonly,只读。