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#
相关文章
cesium添加实体不被地形遮挡的参数设置
disableDepthTestDistance:指定从相机到禁用深度测试的距离,关于深度测试我们将在后面的文章中介绍到,由于深度测试的存在,我们的对象很多时候会被地形挡住,如下:
3130 0
cesium添加实体不被地形遮挡的参数设置
|
Java Linux Maven
解决jdk17启动seata报错的问题
解决jdk17启动seata报错的问题
4081 1
解决jdk17启动seata报错的问题
|
存储 Linux 开发者
虚拟机centos7.9一键部署docker
本文介绍了如何在 CentOS 7.9 虚拟机上安装 Docker 社区版 (Docker-ce-20.10.20)。通过使用阿里云镜像源,利用 `wget` 下载并配置 Docker-ce 的 YUM 仓库文件,然后通过 `yum` 命令完成安装。安装后,通过 `systemctl` 设置 Docker 开机自启并启动 Docker 服务。最后,使用 `docker version` 验证安装成功,并展示了客户端与服务器的版本信息。文中还提供了列出所有可用 Docker-ce 版本的命令。
2827 0
虚拟机centos7.9一键部署docker
|
存储 监控 负载均衡
MongoDB的水平扩展能力
MongoDB的水平扩展能力
286 3
|
存储 移动开发 Swift
使用Swift进行iOS应用开发:探索现代移动开发的魅力
【8月更文挑战第12天】使用Swift进行iOS应用开发,不仅能够享受到Swift语言带来的简洁、快速、安全的编程体验,还能够充分利用iOS平台提供的丰富资源和强大功能。然而,iOS应用开发并非易事,需要开发者具备扎实的编程基础、丰富的实践经验和不断学习的精神。希望本文能够为您的iOS应用开发之旅提供一些有益的参考和帮助。
|
传感器 人工智能 安全
华为防火墙技术
华为防火墙技术
|
编译器 C语言
C语言探索旅程之【柔性数组】
C语言探索旅程之【柔性数组】
204 0