docker存储

数据卷(volume)

数据卷是一种特殊的目录,可以被多个容器使用

创建数据卷

docker volume create 卷名
例如:

MacBook-Pro:~$ docker volume create vol-test
vol-test

查看卷列表
MacBook-Pro:~$ docker volume ls
DRIVER              VOLUME NAME
local               79c713d89302dbf967318be3eb3a91c27962b5c3f45f7440763d2e08da1f3b75
local               92aadfaf31f7895a46669e2553f4884ae866e33d317a6ef0501df8ede92e221e
local               9e4bb84c385cee9551a5568a7a739aa68e6cbd87e1baaee742d3220d75616185
local               vol-test

查看卷

上述例子中已经使用过就是docker volume ls

MacBook-Pro:~$ docker volume ls
DRIVER              VOLUME NAME
local               79c713d89302dbf967318be3eb3a91c27962b5c3f45f7440763d2e08da1f3b75
local               92aadfaf31f7895a46669e2553f4884ae866e33d317a6ef0501df8ede92e221e
local               9e4bb84c385cee9551a5568a7a739aa68e6cbd87e1baaee742d3220d75616185
local               vol-test

检查卷信息

docker volume inspect 卷名

MacBook-Pro:~$ docker volume inspect vol-test
[
    {
        "CreatedAt": "2018-06-24T04:46:03Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/vol-test/_data",
        "Name": "vol-test",
        "Options": {},
        "Scope": "local"
    }
]

挂载数据卷

docker run --name 容器名 -it --mount source=卷名,target=容器内绝对路径(挂载点) 镜像名 bash或者
docker run --name 容器名 -it -v 卷名:容器内绝对路径(挂载点) 镜像名 bash
挂载就是用–mount参数 source是数据卷,target是容器内文件系统挂载点,
还可以使用-v参数 -v 卷名:容器内绝对路径
例如:
启动两个容器,挂载同一个数据卷共享数据
新建容器m1,并创建文件,内容为aaa

MacBook-Pro:~$ docker run --name m1 -it --mount source=vol-test,target=/root ubuntu bash
root@db69531209b9:/# cd root/
root@db69531209b9:~# echo "aaa" > aaa.txt
root@db69531209b9:~# ls
aaa.txt

启动容器m2,查看文件和内容

fengbindeMacBook-Pro:~$ docker run --name m2 -it --mount source=vol-test,target=/root ubuntu bash
fengbindeMacBook-Pro:~ fengbinshi$ docker run --name m2 -it --mount source=vol-test,target=/root ubuntu bash
root@b549a48ad31d:/# cd root/
root@b549a48ad31d:~# ls
aaa.txt
root@b549a48ad31d:~# cat aaa.txt 
aaa

可以看到,数据在m1中创建,m2中也可以读取

数据卷删除

docker volume rm 卷名来删除指定数据卷
docker volume prune来删除无主的数据卷

MacBook-Pro:~$ docker volume rm vol-test
vol-test
MacBook-Pro:~$ docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Deleted Volumes:
9e4bb84c385cee9551a5568a7a739aa68e6cbd87e1baaee742d3220d75616185
79c713d89302dbf967318be3eb3a91c27962b5c3f45f7440763d2e08da1f3b75
92aadfaf31f7895a46669e2553f4884ae866e33d317a6ef0501df8ede92e221e

Total reclaimed space: 0B

目录挂载

docker run -it -v 宿主机目录:容器目录 镜像名 命令或者
docker run -it --mount type=bind,source=宿主目录,target=容器目录[,readonly] 镜像 命令
在创建容器后我在本地目录下创建文件,并在容器内查看

MacBook-Pro:Desktop$ docker run -it -v /Users/home/Desktop/dockerTest/:/root ubuntu bash
root@d3e4a2ca07ab:/# cd root
root@d3e4a2ca07ab:~# ls
bbb.txt
root@d3e4a2ca07ab:~# cat bbb.txt 
bbb

挂载主机文件

命令同目录挂载,只不过把路径换为文件

MacBook-Pro:Desktop fengbinshi$ docker run -it -v $HOME/Desktop/dockerTest/bbb.txt:/root/a.txt ubuntu bash
root@14484f34d384:/# cd root/
root@14484f34d384:~# ls
a.txt
root@14484f34d384:~# cat a.txt 
bbb
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐