Docker-09-Volumes

简介: Docker-09-Volumes

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


什么是 volumes


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


voulmes 有什么特点


  • 容器间可共用
  • 修改 volumes 即可生效
  • 修改 volumes 不影响镜像
  • volumes 具有持久性


volumes 的用法


参数:-v 或者--mount

这两个参数的区别:


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

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

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


直接挂载 testapline 容器中的/test


网络异常,图片无法展示
|


查看当前的 volumes 列表:


网络异常,图片无法展示
|


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


网络异常,图片无法展示
|


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


root@phyger-xubuntu:/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"
    }
]
root@phyger-xubuntu:/home/phyger#
复制代码


volumes 的清理


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


网络异常,图片无法展示
|


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


举个例子:


root@phyger-xubuntu:/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
/ # ^Proot@phyger-xubuntu:/home/phyger# docker volume ls
DRIVER              VOLUME NAME
local               a4588769d7f4a23745c632124fd308f233aac0c8be880cfedc61f5db8da7d241
local               nexus-data
local               nexus-etc
local               nexus-opt
local               test
root@phyger-xubuntu:/home/phyger#
复制代码


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


root@phyger-xubuntu:/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
root@phyger-xubuntu:/home/phyger# docker rm -f -v 19aea8644fe2
19aea8644fe2
root@phyger-xubuntu:/home/phyger# docker volume ls
DRIVER              VOLUME NAME
local               nexus-data
local               nexus-etc
local               nexus-opt
local               test
root@phyger-xubuntu:/home/phyger#
复制代码


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


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


root@phyger-xubuntu:/home/phyger# docker volume rm test
test
root@phyger-xubuntu:/home/phyger# docker volume ls
DRIVER              VOLUME NAME
local               nexus-data
local               nexus-etc
local               nexus-opt
root@phyger-xubuntu:/home/phyger#
相关文章
|
6月前
|
关系型数据库 MySQL 应用服务中间件
|
关系型数据库 MySQL Docker
|
7月前
|
运维 监控 开发者
什么是docker
Docker
58 0
|
7月前
|
运维 Java Android开发
认识Docker
认识Docker
|
关系型数据库 MySQL 虚拟化
docker介绍
docker介绍
98 0
|
运维 持续交付 开发者
Docker 的前世今生
Docker 的前世今生
65 0
|
Linux 应用服务中间件 虚拟化
初识Docker
初识Docker
|
JSON API 数据格式
docker详解
docker详解
95 0
|
Linux 测试技术 API
【Docker】什么是Docker,它用来干什么
【Docker】什么是Docker,它用来干什么
352 0

热门文章

最新文章