dockerfile中volume的用法

当您使用 VOLUME 指令指定一个目录时,Docker 会为该目录创建一个数据卷。这个卷可以在容器停止或删除后仍然存在

Dockerfile

FROM ubuntu:latest

# 创建一个数据卷
VOLUME ["/data"]

CMD ["sleep", "3600"]

构建镜像,并运行容器

docker build -t ubuntu:test1 .
docker run -itd --name test1 ubuntu:test1  
docker exec -it test1 bash
在/data目录下执行echo "hello test1" > 1.txt

检查容器

docker inspect test1, 找到Mounts相关内容
...
"Mounts": [
            {
                "Type": "volume",
                "Name": "07cd438d4131b4c11e153f1bb3aff1f6c35976a723db6e7d200f1c28fbb7fb1e",
                "Source": "/var/lib/docker/volumes/07cd438d4131b4c11e153f1bb3aff1f6c35976a723db6e7d200f1c28fbb7fb1e/_data",
                "Destination": "/data",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
...

查看docker volume信息, 可以找到上面test1容器对应的volume挂载卷07cd438d4131b4c11e153f1bb3aff1f6c35976a723db6e7d200f1c28fbb7fb1e

docker volume ls
DRIVER    VOLUME NAME
local     1d0e6860cdccfd6b9955f6b979f301c45dc4215df0157fb2e5278fe082be9497
local     2f603d844fd91029242b16276aed6b1eeb6a49b8caca65c35ed7892f0e58a702
local     07cd438d4131b4c11e153f1bb3aff1f6c35976a723db6e7d200f1c28fbb7fb1e
local     9c38b79f02b7584cf2b36cc00745d2ca872bc840d669b6d9dce937d46ded0602
local     017b982e91da6fda2d80a36c958071ba2ed47fc9041d2639b651370625d394fc
local     106e137074264812e094703d0ab64141b01076b562d10f86a35c678cc91dbe76
local     02106d7f5fba6130ac6c148007d2b50be092867ab59e8497af214711d133b28e

新建容器,使用原先的挂载卷

docker stop test1
docker rm test1
docker run --rm -it -v 07cd438d4131b4c11e153f1bb3aff1f6c35976a723db6e7d200f1c28fbb7fb1e:/data ubuntu:test1 /bin/bash
验证下/data目录下是否存在之前创建的1.txt数据

注意:

如果运行容器使用下面命令添加参数-v时,使用docker inspect 容器名就找不到Type: volume挂载卷的信息了, 而是Type: bind的相关信息

docker run -itd --name test2 -v ./data:/data ubuntu:test2
docker inspect test2
...
"Mounts": [
            {
                "Type": "bind",
                "Source": "/root/test/data",
                "Destination": "/data",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],

说明

Type:bind - 表示这是一个绑定挂载,意味着将宿主机上的目录直接挂载到容器内。
Source:/root/test/data - 这是宿主机上的路径,数据存储在这里。
Destination:/data - 这是容器内的路径,挂载到这个路径。
RW:true - 表示该挂载是可读写的。
Propagation:rprivate - 指定了挂载的传播行为。
posted @ 2024-10-09 15:07  坚强的小蚂蚁  阅读(65)  评论(0编辑  收藏  举报