小知识:docker 四种数据存储方式

如何修改docker数据存储路径 本文介绍如何通过修改 Docker 配置文件的方式来修改 Docker 数据存储路径,以减少系统盘的占用空间。 阅读详情

四种方式区别

  • docker四种方式:默认、volumes数据卷、bind mounts挂载、tmpfs mount(仅在linux环境中提供),其中volumes、bind mounts两种实现持久化容器数据;
  • 默认:数据保存在运行的容器中,容器删除后,数据也随之删除;
  • volumes:数据卷,数据存放在主机文件系统/var/lib/docker/volumes/目录下,该目录由docker管理,其它进程不允许修改,推荐该种方式持久化数据;
  • Bind mounts:直接挂载主机文件系统的任何目录或文件,类似主机和容器的共享目录,主机上任何进程都可以访问修改,容器中也可以看到修改,这种方式最简单。
  • tmpfs:数据暂存在主机内存中,不会写入文件系统,重启后,数据删除。

默认方式

默认方式,容器本身管理自己的数据,容器文件系统实际是一系列只读的文件层和最上层的容器可写文件层组成,最上层的容器可写文件层保留容器运行过程中产生的所有数据修改,这些层的管理是利用容器的Storage drivers实现(默认是Overlay2,可以通过docker的dameon.json配置文件修改),对容器内部文件系统是透明的。

由于容器在文件系统之上又封装了一层storage drivers,性能比不上bind或volumes,不建议生产环境使用。

volumes

简单理解,volumes是由docker创建和管理,存放在主机文件系统的某个目录,linux下面就在/var/lib/docker/volumes/.

要点:

  • 适用于多个容器之间共享数据,特别是Bind mounts无法使用时;
  • docker volume create命令创建或者docker run启动容器时选项 --volume 或者–mount 时创建;
  • 同一个volume可以同时被多个容器挂载,当没有容器使用该volume,也不会自动删除;
  • 空volume挂载到容器已有文件的目录,容器目录的文件则会被拷贝到该volume;
  • bind mount或者非空volume被挂载到容器已有文件的目录,则容器已有的文件被隐藏,无法访问,直到unmount;
  • 支持volume drivers选项,可以存储数据在本机、远程主机、或云平台;
  • 方便备份:/var/lib/docker/volumes/ 备份即可

Bind mounts

直接将主机的目录挂载到容器内部,容器内部的操作会影响宿主机的文件,docker无法管理,依赖主机文件系统管理。

要点:

  • 适合主机和容器间共享配置文件,例如docker默认将主机的/etc/resolv.conf共享给每个容器,提供dns服务;
  • 主机开发环境和容器共享源代码或构件组件,例如将本机的Maven 的target/目录挂载进入容器,每次本机构建完毕,容器即可看到最新的版本;
  • 挂载的目录必须在主机上存在,容器中则会根据需要创建;

tmpfs mounts

直接将数据临时存放在主机内存中,在容器运行期间有效,容器停止运行或删除,数据丢失,适用于存放非持久化的状态或者敏感信息,因数据安全考虑或者提供更高的性能使用。tmpfs数据不支持在多个容器间共享。

常用命令一览表(备查)

volumes管理命令

    docker volume create    // 手工创建volume
    docker volume inspect   // 查看已创建volume详细信息
    docker volume ls        // 查看docker中已创建的volumes列表
    docker volume prune     // 删除所有未使用的本地volumes,远程的无法删除
    docker volume rm        // 删除指定的volume
    # docker volume create my-vol    // 创建my-vol
    # docker volume ls | grep my-vol // 查看是否创建成功
    # docker inspect my-vol          // 查看my-vol元数据信息,可以看到Mountpoint指出在本机的文件目录
    # cd /var/lib/docker/volumes/    // docker管理的volumes本机目录
    # ls | grep my-vol          // docker在本机创建my-vol目录和_data子目录
    # docker volume rm my-vol //删除

挂载选项-v,–volume,–mount区别

  • docker 17.06版本之前,-v等同于–volume:被用于单个容器,–mount用于docker swarm services;
  • 新版本之后,–mount可以用于单个容器,–mount语法更加明确易读;
  • 在service中使用volumes,只有–mount语法支持;
  • 推荐使用–mount选项

    -v <vol_name>:<container_path>:<options>  // 其中options是选项,只读ro
    --mount 'type=volume|bind|tmpfs,src=<vol_name>,dst=<container_path>'  // src或source,dst或target或destination
  
    // docker service 不支持-v或--volume语法
    // 使用volume启动一个服务
    # docker service create \
        --mount 'type=volume,src=<VOLUME-NAME>,dst=<CONTAINER-PATH>,volume-driver=local,volume  -opt=type=nfs,volume-opt=device=<nfs-server>:<nfs-path>,"volume-opt=o=addr=<nfs-address>,vers=4,soft,timeo=180,bg,tcp,rw"'
        --name myservice \
        <IMAGE>
    
    // docker run支持-v或--mount
    // 使用volume启动一个容器
    # docker run -d --name devtest --mount source=myvol2,target=/app nginx:latest
    # docker run -d --name devtest -v myvol2:/app nginx:latest
    
    // 使用容器的目录内容自动填充空volume
    # docker run -d --name=nginxtest --mount source=nginx-vol,destination=/usr/share/nginx/html nginx:latest
    # docker run -d --name=nginxtest -v nginx-vol:/usr/share/nginx/html nginx:latest
  
    // 只读方式挂载
    # docker run -d --name=nginxtest --mount source=nginx-vol,destination=/usr/share/nginx/html,readonly nginx:latest
    # docker run -d --name=nginxtest -v nginx-vol:/usr/share/nginx/html:ro nginx:latest

共享存储volume drivers

    // 共享存储,以上都是挂载本机的卷
    // 使用不同的volume driver提供共享存储,例如nfs,s3
    // 安装sshfs volume driver
    # docker plugin install --grant-all-permissions vieux/sshfs
    // 创建sshfs volume,提供ssh密码
    # docker volume create --driver vieux/sshfs -o sshcmd=test@node2:/home/test -o password=testpassword sshvolume
    
    // 创建服务使用NFS volume
    // NFSV3
    #  docker service create -d --name nfs-service \
       --mount 'type=volume,source=nfsvolume,target=/app,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/var/docker-nfs,volume-opt=o=addr=10.0.0.10' \
       nginx:latest
    
    // NFSV4   
    # docker service create -d \
    --name nfs-service \
    --mount 'type=volume,source=nfsvolume,target=/app,volume-driver=local,volume-opt=type=nfs,volume-opt=device=:/,"volume-opt=o=10.0.0.10,rw,nfsvers=4,async"' \
    nginx:latest

备份、恢复、删除容器数据

    // 备份一个容器的数据
    // 启动新容器,备份其它容器的数据目录/dbdata
    # docker run --rm --volumes-from dbstore_container -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
    
    // 恢复数据
    # docker run -v /dbdata --name dbstore2 ubuntu /bin/bash
    # docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"
    
    // 匿名volume删除,--rm会在容器删除时,自动删除匿名volume /foo
    # docker run --rm -v /foo -v awesome:/bar busybox top
    
    # docker volume prune  // 删除未使用的所有volume

Bind Mount

同样支持-v和–mount两种方式。

    // 启动容器,挂载本机目录$(pwd)/target
    // --mount方式
    # docker run -d \
        -it \
        --name devtest \
        --mount type=bind,source="$(pwd)"/target,target=/app \
        nginx:latest
    
    // -v方式挂载
    # docker run -d \
        -it \
        --name devtest \
        -v "$(pwd)"/target:/app \
        nginx:latest
        
    // 只读选项
    # docker run -d \
        -it \
        --name devtest \
        --mount type=bind,source="$(pwd)"/target,target=/app,readonly \
        nginx:latest
    
    # docker run -d \
        -it \
        --name devtest \
        -v "$(pwd)"/target:/app:ro \
        nginx:latest

–tmpfs,–mount区别

–tmpfs不支持任何配置选项,不支持docker swarm services, --mount支持所有;


    // 以下两条命令等价
    # docker run -d \
        -it \
        --name tmptest \
        --mount type=tmpfs,destination=/app \
        nginx:latest
    # docker run -d \
        -it \
        --name tmptest \
        --tmpfs /app \
        nginx:latest
        
    // --mount支持选项
    // tmpfs-size:大小,默认无限
    // tmpfs-mode:文件权限模式,默认是1777
    # docker run -d \
        -it \
        --name tmptest \
        --mount type=tmpfs,destination=/app,tmpfs-mode=1770 \
        nginx:latest
CSP历年真题201503-1-图像旋转(C/C++) 一、问题描述 旋转是图像处理的基本操作,在这个问题中,你需要将一个图像逆时针旋转90度。 计算机中的图像表示可以用一个矩阵来表示,为了旋转一个图像,只需要将对应的矩阵旋转即可。 输入格式 二、输入格式 输入的第一行包含两个整数n, m,分别表示图像矩阵的行数和列数。 接下来n行每行包含m个整数,表示输入的图像。 三、输出格式 输出m行,每行包含n个整数,表示原始矩阵逆时针旋转90度后的矩阵。 四、... 阅读详情

相关推荐

MATLAB实战:从零推导合成孔径雷达(SAR)后向投影(BP)算法核心公式与代码实现

本文详细介绍了如何使用MATLAB从零推导合成孔径雷达(SAR)后向投影(BP)算法的核心公式与代码实现。通过基础概念讲解、数学原理推导、距离维脉冲压缩实现及完整MATLAB代码展示,帮助读者掌握SAR成像的关键技术。特别针对BP算法的优化技巧和常见问题提供了实用解决方案,适合雷达信号处理领域的开发者和研究者参考。

weixin_28683689的博客 251

Docker 数据存储及持久化应用

Docker 数据存储及持久化应用。

RAB 731

WAVE格式

一.wave格式概述 Wave文件格式是用于多媒体文件存储的Microsoft RIFF(Resource Interchange FileFormat)的一个子集。每一个RIFF文件以一个文件头开始,后面是一系列数据块。Wave文件通常是包含“WAVE”块的RIFF文件。而该“WAVE”块由两个子块组成,称为“fmt”块。“fmt”块用于确定数据格式,并且“data”块包含实际的样本数据,

yejia1280的博客 4389

Docker如何备份数据

3.1 需要确保容器处于关闭状态,备份和恢复容器的数据时,容器不能处于运行状态,否则可能会导致数据丢失。命令备份容器,这种方法可以将容器的当前状态和数据都保存为镜像,但是镜像文件体积较大,不利于传输和存储。命令备份容器,这种方法将容器的当前状态保存为镜像,但是镜像只保存容器的状态,不保存容器的数据。命令备份容器,这种方法可以将容器的数据备份到本地,备份的文件体积较小,易于传输和存储。命令恢复容器,这种方法可以将本地的数据文件复制到容器中,恢复容器的数据。

bangshabgni的博客 6711

设计数据库 ER 图太麻烦?不妨试试这两款工具,自动生成数据库 ER 图!!!

告别手动画图,提高效率~

楼下小黑哥 2万+

【Docker】Docker数据的存储

默认情况下,在运行中的容器里创建的文件,被保存在一个可写的容器层里,如果容器被删除了,则对应的数据也随之删除了。这个可写的容器层是和特定的容器绑定的,也就是这些数据无法方便的和其它容器共享。

morris 7281

保姆级教程:在K230开发板上为张大头步进电机实现位置、速度、回零全功能控制

本文提供了一份详细的K230开发板与张大头步进电机的控制教程,涵盖硬件连接、协议解析、模块化代码实现及实战案例。通过位置、速度和回零功能的全面讲解,帮助开发者快速掌握步进电机的高级控制技术,适用于自动化、机器人等应用场景。

weixin_42629671的博客 708

Docker - 关于容器数据存储

你知道Docker容器-镜像结构吗? Docker容器结构如何持久化、共享数据? 为什么要设置数据卷? 如何传递共享? 这篇告诉你

key_768的博客 1099

别再手动敲代码了!用STM32CubeMX+FreeRTOS图形化配置,5分钟搞定多任务通信框架

本文详细介绍了如何利用STM32CubeMX和FreeRTOS快速搭建多任务通信框架,大幅提升嵌入式开发效率。通过图形化配置工具,开发者可在5分钟内完成任务调度、时钟配置和内核对象生成,特别适合物联网设备开发。文章还提供了代码优化和调试技巧,帮助开发者轻松应对复杂应用场景。

weixin_30363285的博客 291

MoCap 动作捕捉开源库教程

数据通过 tf2 和支持不同 QoS 设置的 /poses 主题直接发布。该软件包最初是为 Crazyswarm 开发的,用于跟踪多达 50 个飞行机器人。

机器人控制与仿真应用 1307

docker--容器数据进行持久化存储的三种方式

Docker是一种流行的容器化技术,它允许开发者将应用程序及其依赖打包在一个轻量级、可移植的容器中。与虚拟机不同,Docker容器共享主机操作系统的内核,因此更轻便和高效。持久化存储指的是保存数据的方法,这些数据在应用程序或系统重启后仍然存在。在传统计算中,我们通常将数据存储在硬盘、数据库或外部存储设备上。Docker 卷是由 Docker 管理的存储,可以独立于容器生命周期存在,适合需要在多个容器之间共享或持久化数据的场景。

lwxvgdv的博客 7235

如何成为一名高级数字 IC 设计工程师(6-7)数字 IC 验证篇:DEBUG 技巧

不懂验证的设计不是好的设计;UVM 验证思维是指导缜密的芯片设计的导师;推荐书籍《芯片验证漫游指南》。

新芯设计的博客 1604

Docker数据存储方式:数据卷(Data Volume)

Docker - Docker数据存储方式:数据卷(Data Volume) 1.什么是数据卷 2.Docker支持的三种数据挂载方式 3.Volume(普通数据卷) 4.bind mounts(绑定数据卷) 5.tmpfs mounts(临时数据卷) 6.三种存储方式适用场景 -------------------------------------------------------------------------------------------------------------

持之以恒,方得始终 1851

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Docker-修改docker数据存储目录

推荐修改配置文件来改 文章目录通过软链接修改docker数据存储目录修改配置文件实现 通过软链接修改docker数据存储目录 1、停止正在运行的docker: systemctl stop docker 2、创建文件夹: mkdir /data/docker 3、移动/var/lib/docker/目录到新目录中: 如果是未启动过,可以跳过 3 和 4 mv /var/lib/doc...

zhf's blog 7883

精雕软件(JDpaint) 5.5 绿色版

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

Docker存储方式总结

docker四种存储方式 docker四种方式:默认、volumes数据卷、bind mounts挂载、tmpfs mount(仅在linux环境中提供),其中volumes、bind mounts两种实现持久化容器数据; 默认:数据保存在运行的容器中,容器删除后,数据也随之删除; volumes:数据卷,数据存放在主机文件系统/var/lib/docker/volumes/目录下,该目录由docker管理,其它进程不允许修改,推荐该种方式持久化数据; Bind mounts:直接挂载主机文件系统的

bobozai86的博客 2241

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

修改 Docker 默认数据存储路径

Docker 默认数据存储路径修改。

RAB 3057

Docker数据存储

Docker数据存储 配置方式 1. -v or --volume 使用此参数严格保证参数的有序性,其主要有三个参数,其参数以:分隔, 此种方式的可读性较弱,建议使用--mount的方式指定 主要参数有 path of host machine 指定挂载在主机的文件路径 path of container the file 指定挂载于容器内的文件路径 third field optional. such as: co, consistent … etc. 额外的一些属性配置,以,分隔 配置案例 $ do

zzd1989812的专栏 755

Docker数据存储详解

Docker 容器对于宿主机来说只是一个运行在linux上的应用, 因此它的数据存储还是会依赖宿主机器 ,Docker是通过挂载宿主机文件系统或内存的方式来实现数据存储的,挂载方式有三种,volume ,bind mount 和tmpfsvolumes-在宿主机的文件系统上的docker工作路径下创建一个文件夹(/var/lib/docker/volumes)来存储数据, 其他非docker进程是不能修改该路径下的文件,完全由docker来管理。

dxw827406的博客 540

使用软连接的方式修改Docker数据存储目录

使用软连接的方式修改Docker数据存储目录 1、停止正在运行的docker:systemctl stop docker 2、创建文件夹:mkdir /data/docker (/data为新磁盘目录名) 3、移动/var/lib/docker/目录到新目录中:mv /var/lib/docker/* /data/docker 4、删除/var/lib/docker/目录:rm -rf /var/lib/docker 5、软连接/data/docker 到 /var/lib/里:ln -s /data/do

weixin_43675226的博客 2566

安装docker及修改Docker数据存储路径

安装docker18.03.1-ce 用root用户安装 添加用户 useradd -m docker usermod -a -G docker docker 安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 containerd yum install -y https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd

xuewu777777的博客 1186

docke07数据存储(docker volume)

文章目录docke07数据存储(dokcker volume)一.引子二.docker volumn的基本原理(一).docker数据的储存方式(二).docker持久化存储数据的两种方式(三).docker volume的使用三.docker volume的实验搭建(一)docker volumn的使用(docker volume/dockerfile)(二).docker volume 在容器之间的共享(data container)(三).删除volume(docker rm -v )四.小结: do

weixin_47678667的博客 469

docker更换数据存储路径

4.修改docker配置文件中的数据存储路径 vim /etc/docker/daemon.json 中的data-root。这样会导致docker关闭失败,解决办法:systemctl stop docker.socket。2.备份现在的 Docker 数据存储目录。3.将现在的数据存储目录,移动到新的磁盘中。1. 先停掉docker服务。5.启动docker。

xiaofeixia666888的博客 2115

docker更改数据存储

摘要:本文介绍了Docker存储路径迁移的完整步骤:1) 停止Docker服务;2) 查看原存储路径;3) 创建新存储目录;4) 复制数据到新路径;5) 修改daemon.json配置文件指定新路径;6) 重启服务并验证。关键命令包括查看路径(docker info)、数据迁移(cp -rv)和修改配置文件。通过这6个步骤即可完成Docker数据存储位置的迁移工作。

dhzfjnkl的博客 548

docker容器数据存储的方式——数据卷

docker容器数据存储的方式——数据卷 在使用docker的过程中,我们知道,容器的运行,是以镜像为基础层、在其上创建一个当前容器的存储层,用来进行读写,当我们的容器被删除的时候,容器存储层也会被删除,数据会丢失,所以,容器存储数据的方式需要改变,这里就应用到了数据卷。 什么是数据卷? 数据卷是一个可供一个或多个容器使用的特殊目录,可以提供很多有用的特性: 数据卷可以在容器之间共享和重用 对数据卷的更新,不会影响镜像 数据卷默认会一直存在,即使容器被删除 数据卷指令 关于数据卷的管理我们从

li944254211的博客 1396

Docker数据存储总结

本部分主要介绍所谓的Test Double的概念,并且对其中容易被混用的Mocks与Stubs的概念进行一个阐述。在初期接触到的时候,很多人会把Mock对象与另一个单元测试中经常用到的Stub对象搞混掉。为了方便更好地理解,这里把所有的所谓的Test Double的概念进行一个说明。我们先来看一个常用的单元测试的用例: public class OrderEas...

生命不止摸鱼不止 267
上一篇: 小知识:docker run、exec和attach使用和区别
下一篇: 小知识:docker 六种网络类型
壹零Boy
博客等级 码龄14年 31粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值