欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Docker-09-Volumes

程序员文章站 2022-05-11 14:45:43
...

Docker-09-Volumes

Docker-08-企业级私有仓库我们已经了解到了Docker的volumes,当我们需要将Host上的目录共享给多个容器或者希望实现容器数据持久化(即使容器被删除,数据卷也不会被删除)的时候,我们就需要用到volumes。

什么是volumes

volumes是一个可供一个或多个容器使用的特殊目录,它绕过了UFS。

voulmes有什么特点

  • 容器间可共用

  • 修改volumes即可生效

  • 修改volumes不影响镜像

  • volumes具有持久性

volumes的用法

参数:-v或者--mount

这两个参数的区别:

使用-v进行卷挂载,如果Host上的卷不存在,则会自动创建。

使用--mount进行卷挂载,如果Host的卷不存在,则会报错并退出。

我们一般推荐使用--mount,因为它更加优雅。

直接挂载test到apline容器中的/test:

Docker-09-Volumes

查看当前的volumes列表:

Docker-09-Volumes

在test下创建一个test.test的文件,并且将test挂载到另一个容器apline2的/test2下:

Docker-09-Volumes

查看test这个volume的详细信息:

[email protected]:/home/phyger# docker volume inspect test
[
    {
        "CreatedAt": "2020-06-26T11:29:45+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/test/_data",
        "Name": "test",
        "Options": null,
        "Scope": "local"
    }
]
[email protected]:/home/phyger#

volumes的清理

一般情况下,volumes独立于容器的生命周期,即容器被删除时volumes不受影响,但如果用户想要删除容器的时候也删除volumes,可以在删除容器的时候加上-v参数进行同步删除。

Docker-09-Volumes

你可能发现了名为test的volume还存在,为什么没有被删除?这是因为我们在使用volume的时候使用了它的名称,使用volume的名称进行挂载的卷用docker rm -v是无法删除的,因为docker rm -v只删除链接数为0的匿名卷。

举个例子:

[email protected]:/home/phyger# docker run -it -v /test --name alpine_test alpine sh
/ # ls
bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    test   tmp    usr    var
/ # ^[email protected]:/home/phyger# docker volume ls
DRIVER              VOLUME NAME
local               a4588769d7f4a23745c632124fd308f233aac0c8be880cfedc61f5db8da7d241
local               nexus-data
local               nexus-etc
local               nexus-opt
local               test
[email protected]:/home/phyger#

上面VOLUME NAME为一串ID的就是匿名卷。(一般不建议使用匿名卷)

[email protected]:/home/phyger# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                              NAMES
19aea8644fe2        alpine              "sh"                     2 minutes ago       Up About a minute                                      alpine_test
df5b9dc452b3        sonatype/nexus3     "sh -c ${SONATYPE_DI…"   22 hours ago        Up 39 minutes       0.0.0.0:8081-8082->8081-8082/tcp   nexus3
[email protected]:/home/phyger# docker rm -f -v 19aea8644fe2
19aea8644fe2
[email protected]:/home/phyger# docker volume ls
DRIVER              VOLUME NAME
local               nexus-data
local               nexus-etc
local               nexus-opt
local               test
[email protected]:/home/phyger#

如上,匿名卷使用docker rm -v参数可以删除掉。

对于有命名的volume,我们使用docker volume rm 进行删除:

[email protected]:/home/phyger# docker volume rm test
test
[email protected]:/home/phyger# docker volume ls
DRIVER              VOLUME NAME
local               nexus-data
local               nexus-etc
local               nexus-opt
[email protected]:/home/phyger#

Docker-09-Volumes

长按二维码

获取更多信息

好文!必须在看

推荐阅读