docker学习(六)卷Volume

这篇具有很好参考价值的文章主要介绍了docker学习(六)卷Volume。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

docker学习(一)docker 概述
docker学习(二)docker 安装部署
docker学习(三)常用命令
docker学习(四)使用 commit 制作镜像
docker学习(五)使用 Dockerfile 制作镜像
docker学习(六)卷 Volume
docker学习(七)docker daemon
docker学习(八)HTTP/HTTPS 代理
docker学习(九)docker 调试
docker学习(十)docker 持久化存储

docker本身提供了一种机制,可以将主机上的某个目录与容器的某个目录(称为挂载点、或者叫卷)关联起来,容器上的挂载点下的内容就是主机的这个目录下的内容,这类似linux系统下mount的机制。 这样的话,我们修改主机上该目录的内容时,不需要同步容器,对容器来说是立即生效的。 挂载点可以让多个容器共享。

通过docker run命令

命名卷操作

运行命令:

sudo docker run -it --rm --name centos7zlm-container -v /opt/zlm/conf/:/opt/zlm/build/conf/ centos7zlm:v1.0 /bin/bash

可选options:-v hostdir:containerdir 标记在容器中设置了一个目录hostdir为挂载点,并与主机上的containerdir目录关联。
这样不管是在容器中对 containerdir 目录的操作,还是在主机上对 hostdir 目录的操作,都是完全实时同步的,因为这两个目录实际都是指向主机目录。

匿名卷操作

运行命令:

sudo docker run -it --rm --name centos7zlm-container -v /opt/zlm/build/conf/ centos7zlm:v1.0 /bin/bash

-v标记只设置了容器的挂载点,并没有指定关联的主机目录。这时docker会自动绑定主机上的一个目录。通过docker inspect 命令可以查看到。

[test@localhost zlm]$ sudo docker inspect centos7zlm-container
[
    {
        ......
        "Name": "/centos7zlm-container",
        ......
        "Mounts": [
            {
                "Type": "volume",
                "Name": "bfa6d697d1e25a28b48d7d7d7b76a1c607302b8e6495c9ccdb932df4d3abf3f2",
				# 主机目录
                "Source": "/var/lib/docker/volumes/bfa6d697d1e25a28b48d7d7d7b76a1c607302b8e6495c9ccdb932df4d3abf3f2/_data",
				# 容器目录
                "Destination": "/opt/zlm/build/conf",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            },
            {
                "Type": "volume",
                "Name": "b5241c67e201356c557474255308b801521558bfd523c5a748d518d501e7654f",
				# 主机目录
                "Source": "/var/lib/docker/volumes/b5241c67e201356c557474255308b801521558bfd523c5a748d518d501e7654f/_data",
				# 容器目录
                "Destination": "/opt/zlm/build/log",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        ......
    }
]
[test@localhost zlm]$

上面 Mounts下的每条信息记录了容器上一个挂载点的信息,“Destination” 值是容器的挂载点,"Source"值是对应的主机目录。
可以看出这种方式对应的主机目录是自动创建的,其目的不是让在主机上修改,而是让多个容器共享。
列出当前所有的卷:

[test@node-65 ]# sudo docker volume list
DRIVER	VOLUME NAME
local		bfa6d697d1e25a28b48d7d7d7b76a1c607302b8e6495c9ccdb932df4d3abf3f2
local		b5241c67e201356c557474255308b801521558bfd523c5a748d518d501e7654f

通过dockerfile创建

通过Dockerfile的 VOLUME 指令可以在镜像中创建挂载点,这样只要通过该镜像创建的容器都有了挂载点。
通过 VOLUME 指令创建的挂载点,是匿名的,无法指定主机上对应的目录,是自动生成的。

VOLUME ["/opt/zlm/build/conf/", "/opt/zlm/build/log/"]

容器共享卷

sudo docker run -it --name centos7zlm-container1 centos7zlm:v1.0 /bin/bash

上面命令中的 centos7zlm:v1.0 是用Dockerfile文件构建的镜像。 这样容器 centos7zlm-container1 就有了 /opt/zlm/build/conf 和 /opt/zlm/build/log 两个挂载点。
下面我们创建另一个容器可以和 centos7zlm-container1 共享 /opt/zlm/build/conf 和 /opt/zlm/build/log,操作如下:

# 可以是来源不同镜像
sudo docker run -it --name ubuntu1804-container2 --volumes-from centos7zlm-container1 ubuntu:18.04 /bin/bash

# 也可以是同一镜像
sudo docker run -it --name centos7zlm-container3 --volumes-from centos7zlm-container1 centos7zlm:v1.0 /bin/bash

以上三个容器 centos7zlm-container1,centos7zlm-container3,centos7zlm-container3 均有 /opt/zlm/build/conf 和 /opt/zlm/build/log 两个目录,且目录中内容是共享的,任何一个容器修改了内容,别的容器都能获取到。

删除卷

删除容器之时删除相关的卷,为:

sudo docker rm -v centos7zlm-container 

删除指定的卷

sudo docker volume rm

实践:数据容器

如果多个容器需要共享数据(如持久化数据库、配置文件或者数据文件等),可以考虑创建一个特定的数据容器,该容器有1个或多个卷。
其它容器通过 --volumes-from 来共享这个数据容器的卷。
因为容器的卷本质上对应主机上的目录,所以这个数据容器也不需要启动。
说明:卷使容器之间的数据共享比较方便,但也有很多问题需要解决,如权限控制、数据的备份、卷的删除等。文章来源地址https://www.toymoban.com/news/detail-523620.html

到了这里,关于docker学习(六)卷Volume的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Docker Volume - 目录挂载以及文件共享

    Docker中的数据可以存储在类似于虚拟机磁盘的介质中,在Docker中称为数据卷(Data Volume)。数据卷可以用来存储Docker应用的数据,也可以用来在Docker容器间进行数据共享。数据卷呈现给Docker容器的形式就是一个目录,支持多个容器间共享,修改也不会影响镜像。使用Docker的数

    2024年02月20日
    浏览(48)
  • docker——数据卷(volume)概念及使用案例

    Docker的镜像是有⼀系列的只读层组合⽽来,当启动⼀个容器时,Docker加载镜像的所有只读层,并在最上层加⼊⼀个读写层。这个设计使得Docker可以提⾼镜像构建、存储和分发的效率,节省了时间和存储空间,然⽽也存在⼀些问题: 容器中的⽂件在宿主机上存在形式复杂,不能

    2024年02月03日
    浏览(32)
  • 【DevOps系列】Docker数据卷(volume)详解

    Docker的镜像是由多个只读的文件系统叠加在一起形成。启动一个容器的时候,docker会加载只读层并在只读层的上面(栈顶)增加一个读写层。如果需要修改只读层的文件,那么这个文件层需要复制到读写层。该文件的只读版本还在,只是被上面写层的文件副本隐藏。当删除

    2024年02月07日
    浏览(38)
  • Docker Volume 看这一篇就够了

    默认情况下,在容器内创建的所有文件都存储在可写容器层上。这意味着: 当该容器不再存在时,数据不会持续存在,并且如果另一个进程需要数据,则可能很难将数据从容器中取出。 容器的可写层与运行容器的主机紧密耦合。您无法轻松地将数据移动到其他地方。 写入容

    2024年02月02日
    浏览(97)
  • 解析Docker与docker-compose中volume参数的使用

    目录 数据卷Volume的概念 数据挂载的实现方式 宿主机路径挂载在docker/docker-compose中的使用 卷标映射挂载在docker/docker-compose中的使用 A.匿名挂载 B.具名挂载 参考文献: 在docker内有个“数据卷持久化”的概念,也就是我们常说的“数据挂载”。它的作用是,将宿主机上的数据与

    2024年02月01日
    浏览(41)
  • docker 数据挂载方式bind和volume的区别

    在 Docker 中, bind 和 volume 都是用来将主机文件系统中的目录或文件映射到容器内部的对应目录或文件上的方式,但它们之间有几个重要区别。 生命周期: bind 挂载的卷只存在于容器运行时,一旦容器停止并删除,该挂载就会被删除。而 volume 的生命周期可以独立于容器,即使

    2024年02月06日
    浏览(59)
  • 【博客609】docker volume挂载本机文件出现不同步的问题解决

    docker volume挂载本机文件,在宿主机修改文件之后,容器内部不会同步生效,没有发生对应的修改,需要重启容器才可以正常同步。 启动一个busybox容器,挂载一个测试文件: 在容器里查看文件内容: 修改宿主机上的文件: 在 docker 里面查看是否发生同步修改: 发现我们在外

    2023年04月12日
    浏览(82)
  • windows下docker compose方式挂载数据卷volume遇到的问题

    例子一,windows 下docker desk top部署TDengine td-compose.yml 运行docker-compose 问题1: 配置文件映射卷,但没有自己生成配置文件反而报错。 解决方案:bind mount直接挂载目录的方式必须将配置文件先复制下来宿主机,因为它是按宿主机文件同步。 问题2: 部署后出现UDF一直提示重启

    2024年02月10日
    浏览(42)
  • Unity | HDRP高清渲染管线学习笔记:Volume

    目录 一、Volume框架 二、Volume Profile 三、Volume重载 1.Visual Environment(环境设置) 1.1 Sky type 1.2 Ambient Mode 2.Sky 2.1 HDRI Sky(HDRI天空) 2.2 Gradient Sky(渐变天空) 2.3 Physically Based Sky(基于物理的天空) 3.Exposure(屏幕曝光) 3.1 Mode 3.2 Metering Mode(测光模式) 3.3 Limit Min和Limit Max 3.

    2024年02月11日
    浏览(42)
  • Docker数据管理之三种方式- 数据卷(Volumes)- 挂载主机目录(Bind mounts)- 数据卷容器(Data Volume Containers)

    文章主人公:帅哥BUG😎 文章路人: 路人  🤨   路人  😛 😎: docker在容器中管理数据主要有三种方式哦~ 🤨:  啊!,我记得docker在容器中管理数据主要方式是这两种吧  - 数据卷(Volumes) - 挂载主机目录(Bind mounts)      😛:  额,主要的方式是这两种?我怎么记得是这

    2024年02月05日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包