docker学习5--docker数据卷(volume)

Docker数据卷(Data Volume)学习 小编这些年深知大多数初中级Android工程师,想要提升自己,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。因此我收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人。 阅读详情
AI摘要

本文详细介绍了Docker数据卷的概念、使用场景以及多种挂载方式,包括从容器挂载volume、从宿主机挂载volume以及使用Dockerfile添加volume等,并探讨了数据卷容器的共享机制、volume的删除方法及数据的备份恢复。

1.什么是数据卷volume

     为了了解什么是Docker Volume,首先我们需要明确Docker内的文件系统是如何工作的。Docker镜像被存储在一系列的只读层。当我们开启一个容器,Docker读取只读镜像并添加一个读写层在顶部。如果正在运行的容器修改了现有的文件,该文件将被拷贝出底层的只读层到最顶层的读写层。在读写层中的旧版本文件隐藏于该文件之下,但并没有被不破坏 - 它仍然存在于镜像以下。当Docker的容器被删除,然后重新启动镜像时,将开启一个没有任何更改的新的容器 - 这些更改会丢失。此只读层及在顶部的读写层的组合被Docker称为Union File System(联合文件系统)。
为了能够保存(持久)数据以及共享容器间的数据,Docker提出了Volumes的概念。很简单,volumes是目录(或者文件),它们是外部默认的联合文件系统或者是存在于宿主文件系统正常的目录和文件。


2.为什么使用数据卷volume


 Docker的镜像是由一系列的只读层组合而来,当启动一个容器的时候,Docker加载镜像的所有只读层,并在最上层加入一个读写层。这个设计使得Docker可以提高镜像构建、存储和分发的效率,节省了时间和存储空间,然而也存在如下问题。

   (1)容器中的文件在宿主机上存在形式复杂,不能在宿主机上很方便的对容器中的文件进行访问

   (2)多个容器之间的数据无法共享

    (3)当删除容器时,容器产生的数据将丢失

    为了解决这些问题,Docker引入了数据卷(volume)机制。volume是存在一个或多个容器中的特定文件或文件夹,这个目录能够独立于联合文件系统的形式在宿主机中存在,并为数据的共享与持久提供一下便利。

    (1)volume在容器创建时就初始化,在容器运行时就可以使用其中的文件

    (2)volume能在不同的容器之间共享和重用

     (3)对volume中的数据的操作会马上生效

   (4)对volume中数据操作不会影响到镜像本身

   (5)volume的生存周期独立于容器的生存周期,即使删除容器,volume仍然会存在,没有任何容器使用的volume也不会被Docker删除

3.如何使用数据卷   

    3.1 从容器挂载volume(-v /path)

     在使用docker run创建新容器的时候,可以使用-v 标签为容器添加数据卷volume,以下用法是从容器中的某个文件夹创建volume,如果容器中指定的文件夹不存在,会自动生成


    在上面的概念中,有说道,宿主机应该会有一个文件夹绑定挂载到容器中的volume挂载点,那默认的宿主机上的文件夹在哪呢,使用docker inspect命令,查看下容器详情(CRT令起一个SSH终端)

[root@localhost ~]# docker inspect volume-test01 
[
    {
        "Id": "81a74152e6f45a3f780ac7cdc37c9a089814f9a70aad1d27747093ca3c3dae3e",
        "Created": "2016-08-25T07:48:55.942949334Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 10199,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2016-08-25T07:48:56.777918888Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:4fd21defa24c8c07b3689b267a63d563ca0e26ef931b329fc3f3d46efb5bba2d",
        "ResolvConfPath": "/var/lib/docker/containers/81a74152e6f45a3f780ac7cdc37c9a089814f9a70aad1d27747093ca3c3dae3e/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/81a74152e6f45a3f780ac7cdc37c9a089814f9a70aad1d27747093ca3c3dae3e/hostname",
        "HostsPath": "/var/lib/docker/containers/81a74152e6f45a3f780ac7cdc37c9a089814f9a70aad1d27747093ca3c3dae3e/hosts",
        "LogPath": "",
        "Name": "/volume-test01",
        "RestartCount": 0,
        "Driver": "devicemapper",
        "MountLabel": "system_u:object_r:svirt_sandbox_file_t:s0:c47,c332",
        "ProcessLabel": "system_u:system_r:svirt_lxc_net_t:s0:c47,c332",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "journald",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "ShmSize": 67108864,
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": null,
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "KernelMemory": 0,
            "Memory": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": -1,
            "OomKillDisable": false,
            "PidsLimit": 0,
            "Ulimits": null
        },
        "GraphDriver": {
            "Name": "devicemapper",
            "Data": {
                "DeviceId": "29",
                "DeviceName": "docker-253:0-101330881-9cb32851050b1707022b475489686582a272d883a56a8ff52f3344f56b65639f",
                "DeviceSize": "10737418240"
            }
        },
        "Mounts": [
            {
                "Name": "5ddd734c53a38a78a9f739157c63074b4aff736d4045925616d7753402304137",
                "Source": "/var/lib/docker/volumes/5ddd734c53a38a78a9f739157c63074b4aff736d4045925616d7753402304137/_data",
                "Destination": "/opt/vol-data",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
        "Config": {
            "Hostname": "81a74152e6f4",
            "Domainname": "",
            "User": "",
            "AttachStdin": true,
            "AttachStdout": true,
            "AttachStderr": true,
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": true,
            "Env": null,
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "test/mycentos:v1.0",
            "Volumes": {
                "/opt/vol-data": {}
            },
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {}
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "c73841812aab480cf8e6a02071e36951dceb002d7b36f7dc0b38ccd9db833ba5",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/c73841812aab",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "3e492b611d9bd2c202c8a6c8fe4b4a755393545348b1aeb4e60995609dabb07c",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "54001aaff29a231c9b2fe83459805d99dce0c21d6e2719f9b11bc90d8fe2f9c9",
                    "EndpointID": "3e492b611d9bd2c202c8a6c8fe4b4a755393545348b1aeb4e60995609dabb07c",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02"
                }
            }
        }
    }
]
   注意看Mounts节点(Docker的版本用的是1.10.3),数据卷的使用,类似于 Linux 下对目录或文件进行 mount。

"Mounts": [
            {
                "Name": "5ddd734c53a38a78a9f739157c63074b4aff736d4045925616d7753402304137",
                "Source": "/var/lib/docker/volumes/5ddd734c53a38a78a9f739157c63074b4aff736d4045925616d7753402304137/_data",
                "Destination": "/opt/vol-data",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ]

     当我们在容器的volume上操作时,宿主机上对应的文件是否也会跟着变动呢?测试一下,在容器的volume上创建一个文件test.txt,然后查看宿主机是不是也会同步存在



   经测试,当容器上的volume有变动时,宿主机也会跟着变动,那反过来呢?经测试也是一样的。不管是容器挂载点发生变动还是宿主机对挂载目录进行操作,令一方都会跟着变动。

    利用docker commit生成新镜像,然后docker run -it 运行新镜像,发现容器挂载目录下没有任何文件了。说明生成新镜像时,是不保存挂载文件的。

3.2从宿主机挂载volume(-v /host-path:/container-path)

     将主机的文件或文件夹作为volume挂载时,可以用多个 -v标签为容器添加多个volume,还可以使用:ro指定该volume为只读。注意:如果容器中指定的挂载目录存在相同的文件时,会被宿主机覆盖掉


    在宿主机上建立了/opt/vol-01和/opt/vol-02挂载点,分别和容器中的/opt/vol-test-1和/opt/vol-test-2对应,前者权限默认读写,后者只能读,用docker inspect


   当在容器的vol-test-2上新建操作时,会提示只读.在宿主机上,2个挂载点新增,修改,删除操作都OK,但是在容器中居然2个都不行,按理说应用是第二个vol-test-2不行才对,不知是哪里出问题了。

    利用docker commit生成新镜像,然后docker run -it 运行新镜像,发现容器挂载目录下没有任何文件了。说明生成新镜像时,是不保存挂载文件的。

3.3使用Dockerfile添加volume

    使用VOLUME指令向容器添加volume

    VOLUME /data

   多个时VOLUME ["/data1","/data2"]

   这种情况和第一个中情况docker run -v /data是一样的。注意,dockerfile中使用volume是不能和第二种方法那样挂载宿主机中指定的文件夹。这时为了保证Dockerfile的可移植性,因为不能保证所有的宿主机都有对应的文件夹。

    需要注意的是,在Dockerfile中使用VOLUME指令后,如果尝试对这个volume进行修改,这些修改指令都不会生效,比如下面例子,尝试添加一个文件,并修改文件并改变文件所有权限

FROM test/mycent:v1.0
RUN useradd foo 
VOLUME /data 
RUN touch /data/x 
RUN chown -R foo:foo /data

    通过该Dockerfile创建镜像并启动容器后,该容器中存在用户foo,并且能看到在/data挂载的volume,但是/data文件夹的所有者并没有被改变为foo,而且/data下也没有/data/x文件。但是如果顺序反过来,先建文件,先授权,再挂载volume,那就得到期待的结果。

4.共享volume/数据卷容器(--volumes-from)

      如果你有一些持续更新的数据需要在容器之间共享,最好创建数据卷容器。数据卷容器,其实就是一个正常的容器,专门用来提供数据卷供其它容器挂载的。

     先创建一个名为dbdata的数据卷容器,专门共其他容器挂载。


     在/opt/dbdata下创建了一个文件db.properties。

     再启动2个容器,a,b都a--volumes-from dbdata,b --volumes-from a.



    可以看到vol_a,vol_b容器的/opt/dbdata下都有db.properties文件。在vol_b的/opt/dbdata下创建文件vol_b.txt时,容器dbdata,vol_a也都同时同步了。

    对dbdata,vol_a,vol_b使用命令docker inspect时,发现他们的Mounts下的Source都是一样的,说明它们都绑定到宿主机的同一个目录,所以当某个容器的挂载修改时,其他容器也看到了同样的效果



   如果挂载源有多个时,可以使用多个--volumes-from,如

docker run -it --name vol_use --volumes-from vol_a --volumes-from vol_b test/mycentos:v1.0 /bin/bash.

   如果一个容器挂在了volume,即使容器停止了运行,该volume仍然存在,其他容器仍然可以继续--volumes-from它。


5.删除volume

    如果创建容器时挂载了volume,在/var/lib/docker/volumes/04b003b21b873157433deffbaf08bb0c89d234d3ec3c6576fdd7b61f5d41163e/_data下会生成相应的文件(路径,不同版本,不同操作系统会有所不同,具体可以用docker inspect查看容器具体信息),当删除容器时,宿主机上的挂载目录时不会删除的,并且目录名称是随机字符,不知意义,所以在删除容器时,需要妥善处理容器的volume。删除容器时一并删除volume有2中方法

(1)docker rm -v 删除容器。就是删除容器时,加上-v

(2)docker run --rm .就是启动容器的时候加上--rm,那么当容器运行停止时会自动删除容器以及容器所挂载的volume

     上面创建了容器dbdata,vol_a,vol_b,vol_c,现在使用docker rm -v看看有什么效果。


  vol_c是--volumes-from dbdata的,删除vol_c时,宿主机的挂载目录仍存在,没删掉,猜测那是因为还有其他容器在连着或者说是dbdata -v的时候创建的。那现在删除dbdata容器试试看(vol_a是--volumes-from dbdata的,vol_a还没删除,验证下能否删除dbdata)。


   发现dbdata删除时,宿主机那目录仍然存在,同时也说明哪怕vol_a是--volumes-from dbdata的,vol_a还没删除,那也没影响。同时也说明只要还有一个容器在挂载这宿主机的目录,那宿主机的目录就不会删除。那接下来,把所有容器都删除,再看结果。


  可以看到,当最后一个容器删除后,宿主机那volume目录终于删除了.

6.备份、恢复或迁移volume

   上面有测试过,当使用docker commit等手段生成新镜像,然后再启动镜像生成新容器时,原先volume目录下的文件不见了,可以生成新镜像时,并没有把volume下的文件一起打包生成镜像。

   volume作为数据的载体,在很多情况下需要对其中的数据进行备份、迁移,或是从已有数据恢复。一个很容易想到的方法就是用docker inspect命令查找到volume对应宿主机上对应的那个目录位置,然后复制其中内容或使用tar打包。当这些笨拙的做法并不值得推荐,因为查找主机上文件夹后再操作容易出错,也不适合脚本的自动化执行。

   备份volume可以使用以下方法

   docker run --rm --volumes-from dbdata -v $(pwd):/backup test/mycentos:v1.0 tar cvf /back/data.tar /data

  这行指令启动了一个临时的容器,这个容器挂载了两个volume,第一个volume与要备份的volume共享,第二个volume将宿主机的当前目录(也可以绝对路径)挂载到容器的/backup下。容器运行后将要备份的容器(/data)备份到/backup/data.tar,然后删除容器,备份后的data.tar就留在了当前目录。操作验证一下


 居然报错了,说没有权限。进入容器-it时,是docker随机生成一个用户的,至于怎样给该用户授权,以后再研究吧。


















一文说清楚Dockerfile 中VOLUME到底有什么用? 写在开头 相信大部分人对docker run -v这个参数都比较熟悉,无非就是把宿主机目录和容器目录做映射,以便于容器中的某些文件可以直接保存在宿主机上,实现容器被删除之后数据还在,比如我们把mysql装在容器中,肯定不能说容器被删mysql所有的数据也都不在了。第二个作用是也可以用来实现多容器共享同一份文件。 但如果玩过dockerfile的话就知道dockerfile还有个VOLUME指令,如 FROM centos:latest RUN groupadd -r redis && use 阅读详情

相关推荐

Docker为运行容器动态添加卷Volume

前言 最近因为考虑数据支持化问题,需要将docker容器中的数据绕过Union File System然后持久化到本地,想到一种方式就是共享物理机的硬盘,故需要为容器绑定卷组。正常情况下,绑定卷组在容器创建之前完成,常规做法有如下: Dockerfile添加 命令创建容器时指定 这个由于容器已创建好并且处于运行中,需要在不重建容器的前提下进行动态添加卷组。 步骤 1. 安装nsenter ns...

行走的IT 5942

Docker Volume 看这一篇就够了

您可以在容器上创建新文件,例如下图中的temp.txt。您还可以修改容器上属于图像层的文件,例如下图中的app.py。执行此操作时,会在容器层上创建该文件的本地副本,并且更改仅存在于容器上——这称为Copy-on-Write机制。当容器被销毁时,其上的文件/修改也会被销毁。为了持久化数据,我们可以使用我们在上一节中看到的卷映射技术。如果您想将数据放在docker主机上的特定位置或磁盘上已有数据,您也可以将此位置挂载到容器上。命令时,docker会构建容器层,它们是读写层。标志指定要使用的卷。........

爱死亡机器人 2万+

Linux(31)Rockchip RK3568 Ubuntu22.04上部署 Docker: 问题与解决方案

本博客在总结这些问题及其解决方案,为遇到类似问题的兄弟提供参考,如果我后续有碰到其他Docker 问题也会在此更新补充。

我其实什么都不会 1646

【Docker】Docker Volume(存储卷)

什么是存储卷。

Elena's Blog 5336

STM32多模式智能小车状态机设计与中断优先级实践

在嵌入式实时系统中,状态机是实现多任务协同与功能切换的核心范式。其本质是通过有限状态集合、明确转移条件和确定性动作,构建可预测、易维护的控制逻辑。基于STM32等资源受限MCU时,需兼顾状态调度效率、中断并发安全与硬件资源约束。关键技术价值体现在:提升系统模块解耦度、支持物理按键与蓝牙双源触发、保障实时响应不丢帧。典型应用场景包括智能小车多模运行(循迹、避障、遥控、定距跟随等)、工业设备工作模式切换及IoT终端低功耗状态管理。本文以STM32F103C8T6平台为例,深入解析全局模式变量设计、双通道状态切换

weixin_42509888的博客 94

电赛经验分享——赛前准备

⏩ 大家好哇!我是小光,想要成为系统架构师的嵌入式爱好者。⏩在之前的电赛中取得了省一的成绩,本文对电赛比赛前需要准备什么做一个经验分享。加入小光嵌入式交流群(qq群号:737327353)免费获取博主所有资料哦!

qq_52608074的博客 7780

Docker - Docker Volume及Volume命令详解

Docker学习(四)- Docker Volume及Volume命令详解 什么是数据卷(Volume) Docker镜像被存储在一系列的只读层中。当我们创建一个容器时,Docker会读取镜像(只读),并在其顶部添加一层读写层。如果正在运行中的容器修改了现有文件,该文件将会被拷贝出底层的只读层,放到最顶层的读写层中。读写层中原来的旧版本文件(未被更改过的文件)仍然存在于镜像中。 所以当Docker容器被删除后,再基于原来的镜像创建容器时,将创建一个没有任何数据更改的容器,在之前那个容器中的数据更改会被丢失掉

kaven 2万+

2025年MathorCup数学应用挑战赛【B题完整论文】附参考代码(免费分享)

摘。

RS_handy的博客 2694

docker 容器数据卷volume

docker 容器数据卷volume 如果数据都在容器中,那么我们删除容器的时候数据就会丢失,所以我们希望数据可以持久化。 例如MySQL容器,我们希望数据可以存储在本地,当MySQL容器删除的时候,数据不会丢失。 容器之间可以有一个数据共享的技术,Docker容器中产生的数据,同步到本地,这就是卷技术。也就是数据挂载技术,将我们容器内的目录,挂载到Linux上面。 挂载之后,我们在容器内做的操作回同步到Linux宿主机上。 使用数据卷 方式一:直接使用命令挂载 -v docker run -it -v

Sumarua的博客 9574

医学图像配准实战:用Python实现MIND特征提取(附完整代码)

本文详细介绍了MIND(模态无关邻域描述符)在医学图像配准中的应用。通过Python和PyTorch实战,从原理到代码逐步解析了如何提取MIND特征,并利用其对结构而非灰度的感知能力,有效解决CT、MRI等多模态图像的对齐难题,为病灶追踪、手术导航等高级应用提供鲁棒性基础。

263

LIS3DHTR三轴加速度计Arduino驱动与嵌入式集成指南

加速度计是嵌入式系统中实现运动感知、姿态解算和振动分析的核心传感器。其工作原理基于MEMS微机械结构在惯性力作用下的电容变化,经片内ADC转换为数字信号;I²C接口因其硬件资源占用少、布线简洁,成为低功耗物联网节点的主流通信方式。技术价值体现在高分辨率(12位)、多量程(±2g~±16g)与低功耗(待机电流仅2µA)的平衡,支撑电池供电设备长期运行。典型应用场景包括可穿戴设备的姿态识别、工业预测性维护中的振动监测,以及智能硬件的敲击/跌落检测。本文围绕LIS3DHTR芯片及其Grove模块,详解Arduin

weixin_42584758的博客 596

docker数据卷volume备份、恢复或迁移

1、启动一个命名为vol_simple的容器并创建数据卷(volume) [root@docker1 ~]# docker run -itd --name vol_simple -v /data ubuntu /bin/bash 90f3912df24c194cc59fe4a635a8c44fe7086098b2934507596ea9ed76284f00 2、进入挂载目录写入若干数据,此时在容...

刘大可1017的博客 9071

Unity URP热扭曲效果实战:如何让半透明物体也‘动’起来(附完整Shader代码)

本文深入解析Unity URP管线中热扭曲效果无法影响半透明物体的核心原因,并提供一套完整的实战解决方案。通过编写自定义Shader,并巧妙利用URP的Render Objects渲染器功能,成功让指定半透明物体(如粒子特效)也能被扭曲效果影响,从而制作出火焰、热浪等更具视觉冲击力的特效。文末附有完整的Shader代码与进阶优化技巧。

pz890123的博客 501

docker的数据卷

Docker数据卷(Volumes)是一种在容器之间持久化和共享数据的方法。数据卷(Data Volumes)是一个可供容器使用的特殊目录,它将宿主机操作系统目录映射到容器,是宿主机目录与容器目录之间映射的桥梁。容器内的数据和文件系统的改动,都是发生在镜像栈最上面的容器层。容器内产生的这些文件系统和数据都是临时的,当把容器被删除时,这些数据也会跟着被删除。但是数据卷是不属于联合文件系统的,当容器被删除后数据卷中的数据任然会被保留下来。数据卷可以被多个容器挂载,实现数据的共享;

YaoXTao的专栏 1866

环境配置与基础教程:当前大厂主流套路:使用 MLflow 全链路管理 YOLO 实验参数、指标与模型版本

YOLO26与MLflow结合实现高效实验管理 YOLO26通过移除DFL模块和实现无NMS端到端推理,在CPU推理速度上提升43%,同时简化了模型导出流程。MLflow 3.10/3.11版本新增多工作区支持、成本追踪和安全序列化等功能,为机器学习实验提供全生命周期管理。两者结合可解决传统"截图+Excel"式实验管理的痛点,实现参数追踪、指标对比和模型版本控制的自动化。 关键优势: YOLO26架构优化带来显著性能提升 MLflow提供实验到生产的全链路管理 原生集成简化了计算机视觉

ZXSXJ的博客 191

手把手教你学Simulink--使用Simulink进行双冗余电机驱动系统的故障切换验证

提高系统可靠性:当一个电机或其驱动器出现故障时,另一个可以立即接管,避免系统停机。增强安全性:对于一些关键任务的应用场景(如飞行控制),确保即使在硬件故障情况下也能维持基本操作能力。简化维护:允许在不影响系统正常工作的情况下进行维护和更换故障部件。确定可能发生的故障类型(如过流、欠压、温度过高),以及每种故障对应的条件。通过上述步骤,我们简要介绍了如何基于Simulink实现双冗余电机驱动系统的故障切换验证。

MHD0815的博客 443

Docker 挂载Volume数据卷

Docker容器提供volume数据卷的方式,可以直接挂载宿主机文件或目录到容器里,可以理解为目录映射,这样就可以让所有的容器共享宿主机数据,从而只需要改变宿主机的数据源就能够影响到所有的容器数据,或者当容器意外删除的时候,宿主机的数据仍然有一份,便于容灾。

专注基础架构领域 2537

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Docker基础】Docker数据卷管理:docker volume create及其参数详解

默认情况下,容器内的所有文件都存储在可写的容器层中,这意味着当容器被删除时,其中的数据也会随之丢失。Docker数据卷是专门设计的目录,它绕过联合文件系统(UFS),直接由宿主机文件系统或第三方存储系统管理。Docker数据卷是容器持久化存储的核心机制,docker volume create命令提供了丰富的参数来满足不同场景的需求。通过合理使用Docker数据卷,可以构建既灵活又可靠的应用存储架构,充分发挥容器化技术的优势。Docker管理目录(/var/lib/docker/volumes/)

IT成长日记的博客 1578

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Docker容器数据卷-Volume小结

2)创建数据卷,只要在docker run命令后面跟上-v参数即可创建一个数据卷,当然也可以跟多个-v参数来创建多个数据卷,当创建好带有数据卷的容器后,就可以在其他容器中通过--volumes-froms参数来挂载该数据卷了,而不管该容器是否运行。---------------------------------------------看看下面的一个实例----------------------------------------------> 数据卷是持续性的,直到没有容器使用它们。

分享技术架构、运维、程序开发经验 904

深入理解 Docker 数据卷(Data Volume)

Docker 数据卷是 Docker 提供的一种数据持久化方式,使容器间可以共享数据并能够长期保存,即便容器被删除,卷中的数据仍然存在。数据的持久化存储多容器间的数据共享容器重启或迁移时数据的快速恢复数据卷是 Docker 中实现数据持久化和共享的关键机制之一,掌握其使用方式不仅有助于容器化应用的数据管理,也能在应用迁移、升级等过程中提供强有力的支持。

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 1万+

一文详解Docker数据卷(volume)

docker的理念将运行的环境打包形成容器运行,运行可以伴随容器,但是我们对数据的要求是希望持久化,容器之间可以共享数据,Docker容器产生的数据,如果不通过docker commit生成新的镜像,使得数据作为容器的一部分保存下来,那么当容器被删除之后,数据也就没了。而且,如果不进行数据卷挂载的话,对容器配置文件进行修改需要进入容器内部修改,十分麻烦,我们对容器为了能够保存数据并且方便修改,在docker容器中使用卷。

一个菜鸡的博客 3106

Docker 数据卷(Volume)详细介绍

由于容器的存储是临时的,容器删除后其中的数据会丢失,因此使用数据卷可以保证数据不会随着容器的销毁而丢失。:Bind Mount 依赖于宿主机的路径,可能会导致跨平台兼容性问题。这个命令会删除所有没有被任何容器使用的 Docker 数据卷。的关键工具,合理使用可以大大提高数据管理的灵活性和安全性。注意:如果某个容器正在使用该数据卷,删除会失败。删除所有未被任何容器使用的 Docker 数据卷。的数据卷,并由 Docker 管理。列出当前所有的 Docker 数据卷。目录下的内容,但不能修改。

weixin_45056021的博客 2905
上一篇: docker学习4--容器
下一篇: docker学习6--容器搭建JDK/tomcat环境
夢_殤
博客等级 码龄15年 348粉丝 140原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值