docker数据卷
原创大约 2 分钟
默认情况下,在容器里创建的文件,都被保存在一个可写的容器层。
如果容器被删除了,那么数据也没有了。
这个可写的容器层是和特定的容器绑定的,也就是这些数据无法方便的和其它容器共享。
所以,Docker提供了几种持久化的方式。
data volume
:由Docker管理,例如保存在/var/lib/docker/volumes/
里。bind mount
:由用户指定存储的数据具体mount
在系统什么位置。tmpfs mount
:存放到内存中。

环境准备
Dockerfile
文件。
FROM python:3.9.5-slim
COPY test.txt /src/
WORKDIR /src
VOLUME ["/src"]
test.txt
文件。
hello docker
执行构建镜像的命令。
> docker build -t test .
此时Docker会自动创建一个随机名字的volume
,去存储定义在Dockerfile
中的数据。
启动Docker。
> docker run -d test
列出所有数据卷(一定要启动容器才能创建VOLUME
,光有镜像没用)。
> docker volume ls
DRIVER VOLUME NAME
local 7004134490dd35b82f5546158ceb104b28bfe1e6e7e866c24607ecb3c46c0c49
查看数据卷详情。
> docker volume inspect 7004134490dd35b82f5546158ceb104b28bfe1e6e7e866c24607ecb3c46c0c49
[
{
"CreatedAt": "2024-01-21T20:14:40+08:00",
"Driver": "local",
"Labels": {
"com.docker.volume.anonymous": ""
},
"Mountpoint": "/var/lib/docker/volumes/7004134490dd35b82f5546158ceb104b28bfe1e6e7e866c24607ecb3c46c0c49/_data",
"Name": "7004134490dd35b82f5546158ceb104b28bfe1e6e7e866c24607ecb3c46c0c49",
"Options": null,
"Scope": "local"
}
]
清除所有数据卷(只有停止或删除了容器之后才能清除数据卷)。
> docker volume prune -f
重新构建镜像。
> docker build -t test .
重新创建容器,加-v
参数给数据卷命名:-v [指定的卷名]:[Dockerfile中VOLUME指定的路径]
。
> docker run -d -v my-data:/src test
43c6d0357b0893861092a752c61ab01bdfa62ea766d01d2fcb8b3ecb6c88b3de
> docker volume ls
DRIVER VOLUME NAME
local my-data
查看数据卷cron-data
的详情。
> docker volume inspect my-data
[
{
"CreatedAt": "2024-01-21T20:21:11+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/my-data/_data",
"Name": "my-data",
"Options": null,
"Scope": "local"
}
]
查看Docker保存数据卷的内容。
> ls /var/lib/docker/volumes/my-data/_data
给VOLUME
命名以后,即使容器删除后再启动新的容器,数据也可以在原来VOLUME
中的接着保存。
Dockerfile
文件中的VOLUME
关键字将指定目录的内容全部持久化保存。
VOLUME ["src"]
将容器中/app
目录下的内容全部保存下来。
感谢支持
更多内容,请移步《超级个体》。