docker从零开始存储存储概述

benjamin77 benjamin77     2022-12-24     371

关键词:

管理Docker中的数据

默认情况下,在容器内创建的所有文件都存储在可写容器层中。这意味着:

  • 当该容器不再运行时,数据不会持久存在,如果另一个进程需要,则可能很难从容器中获取数据。
  • 容器的可写层紧密耦合到运行容器的主机。您无法轻松地将数据移动到其他位置。
  • 写入容器的可写层需要 存储驱动程序来管理文件系统。存储驱动程序使用Linux内核提供联合文件系统。与使用直接写入主机文件系统的数据卷相比,这种额外的抽象降低了性能 

Docker有两个容器选项可以在主机中存储文件,因此即使在容器停止之后文件仍然存在:和 绑定挂载如果你在Linux上运行Docker,你也可以使用tmpfs mount

继续阅读有关这两种持久数据方式的更多信息。

选择正确的挂载类型

无论您选择使用哪种类型的安装,数据在容器中看起来都是相同的。它作为目录或容器文件系统中的单个文件公开。

可视化卷,绑定装载和tmpfs 装载之间差异的简单方法是考虑数据在Docker主机上的位置。

Docker有两个容器选项可以在主机中存储文件,因此即使在容器停止之后文件仍然存在:卷(volume)和 绑定挂载(bind mount)如果你在Linux上运行Docker,你也可以使用tmpfs mount

选择正确的挂载类型

无论您选择使用哪种类型的安装,数据在容器中看起来都是相同的。它作为目录或容器文件系统中的单个文件公开。

可视化卷,绑定装载和tmpfs 装载之间差异的简单方法是考虑数据在Docker主机上的位置。

技术分享图片

 

存储在由Docker/var/lib/docker/volumes/在Linux上)管理的主机文件系统的一部分中非Docker进程不应修改文件系统的这一部分。卷是在Docker中保留数据的最佳方式。

绑定挂载可以存储在主机系统的任何位置它们甚至可能是重要的系统文件或目录。Docker主机或Docker容器上的非Docker进程可以随时修改它们。

tmpfs挂载仅存储在主机系统的内存中,永远不会写入主机系统的文件系统。

有关挂载类型的更多细节

  • volume:由Docker创建和管理。您可以使用该docker volume create命令显式创建卷,或者Docker可以在容器或服务创建期间创建卷。

    创建卷时,它存储在Docker主机上的目录中。将卷装入容器时,此目录是装入容器的目录。除了卷由Docker管理并与主机的核心功能隔离,其他类似于绑定挂载的工作方式。

    给定的容量可以同时安装到多个容器中。当没有正在运行的容器正在使用卷时,该卷仍可供Docker使用,并且不会自动删除。您可以使用删除未使用的卷docker volume prune

    装入卷时,可以命名匿名匿名卷在首次装入容器时未给出明确的名称,因此Docker为它们提供了一个随机名称,该名称在给定的Docker主机中保证是唯一的。除名称外,命名和匿名卷的行为方式相同。

    卷还支持使用卷驱动程序,这些驱动程序允许您将数据存储在远程主机或云提供的程序上,以及其他可能性。

  • bind mounts:自Docker早期开始提供。与卷相比,绑定装载具有有限的功能。使用绑定装入时,主机上的文件或目录将装入容器中。文件或目录由主机上的完整路径引用。该文件或目录不需要已存在于Docker主机上。如果它尚不存在,则按需创建。绑定挂载非常高效,但它们依赖于具有特定目录结构的主机文件系统。如果您正在开发新的Docker应用程序,请考虑使用命名卷。这是由于您无法使用Docker CLI命令直接管理bind mounts。

绑定挂载允许访问敏感文件

使用绑定装入的一个副作用,无论好坏,都可以通过容器中运行的进程更改主机文件系统 ,包括创建,修改或删除重要的系统文件或目录。这是一种强大的功能,可能会产生安全隐患,包括影响主机系统上的非Docker进程。

  • tmpfs挂载tmpfs挂载不会保留在磁盘上,无论是在Docker主机上还是在容器中。它可以在容器的生命周期中由容器使用,以存储非持久状态或敏感信息。例如,在内部,swarm服务使用tmpfs挂载将隐私挂载到服务的容器中。

 bind mounts和volume都可以使用-v  or --volume 标志装入容器,但每种装置的语法略有不同。对于tmpfs  mount,您可以使用该 --tmpfs标志。但是,在Docker 17.06及更高版本中,对于bind mounts,volume或tmpfs挂载,我们建议使用标志 --mount对容器和服务挂载因为语法更清晰。

volume的使用用例

volume是在Docker容器和服务中持久保存数据的首选方法。卷的使用用例:

  • 在多个运行容器之间共享数据。如果未显式创建它,则会在第一次将其装入容器时创建卷。当该容器停止或被移除时,该卷仍然存在。多个容器可以同时安装相同的卷,可以是读写也可以是只读。仅在您明确删除卷时才会删除卷。

  • 当Docker主机不能保证具有指定的目录或文件结构时。Volumes可帮助您将Docker主机的配置与容器运行时分离。

  • 如果要将容器的数据存储在远程主机或云提供程序上,而不是本地存储。

  • 当您需要备份,还原或将数据从一个Docker主机迁移到另一个Docker主机时,卷是更好的选择。您可以使用卷停止容器,然后备份卷的目录(例如/var/lib/docker/volumes/<volume-name>)。

 

bind mounts的良好用例

通常,您应该尽可能使用卷。bind mounts适用于以下类型的用例:

  • 将配置文件从主机共享到容器。这就是Docker默认通过/etc/resolv.conf从主机安装到每个容器中来为容器提供DNS解析的方式 

  • 在Docker主机上的开发环境和容器之间共享源代码或构建工件。例如,您可以将Maven target/ 目录安装到容器中,每次在Docker主机上构建Maven项目时,容器都可以访问重建的构建。

    如果您以这种方式使用Docker进行开发,你的Dockerfile将会复制生产准备就绪的构建 指向到镜像中,而不再依赖于bind mounts。

  • 当Docker主机的文件或目录结构保证与容器所需的绑定装载一致时。

 

tmpfs挂载的好用例

tmpfs当您不希望数据在主机或容器内持久存在时,最好使用tmpfs挂载。这可能是出于安全原因,或者在应用程序需要编写大量非持久状态数据时保护容器的性能。

使用bind mounts或volume的提示

 

如果您使用bind mounts或volume,请记住以下几点:

  • 如果将空volume 挂在到容器中已存在的文件或目录中,则会将这些文件或目录传播(复制)到volume中。同样,如果启动容器并指定尚不存在的卷,则会为您创建一个空卷。这是预先填充另一个容器所需数据的好方法。

  • 如果将bind mounts或非空volume 装入容器中已存在某些文件或目录,则挂载会覆盖这些文件或目录,就像将文件保存到 Linux主机上/mnt然后安装USB驱动器进入/mnt/mnt在卸载USB驱动器之前,USB驱动器的内容会覆盖内容。隐藏的文件不会被删除或更改,但在安装mount binds或volume时无法访问

 

docker运维-从零开始学习(代码片段)

Docker运维-从零开始学习一、Docker概述二、什么是容器?三、Docker的特点①轻量级②标准③安全四、Docker与传统虚拟机的区别五、Docker核心概念①镜像(Image)②容器(Container)③仓库(Repository)六、Docker安装部署七、容器镜像加速器... 查看详情

从零开始学java-day14(代码片段)

序列化和反序列化概述序列化是指将对象的状态信息转换为可以存储或传输形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后可以通过从存储区中读取或者反序列化对象的状态,重新创建该对象.序列化:... 查看详情

centos7修改docker容器和镜像默认存储位置

参考技术A本文被帮助文档:通常,当你开始使用docker时,我们并不太关心Docker用于存储镜像和容器的默认目录。当使用Docker进行更多实验时,Docker开始占用大量的空间时,你不得不按下紧急按钮。所以现在是时候把故障排除放... 查看详情

docker框架概述

 docker的框架  docker使用传统的client-server架构模式,用户端通过dockerclient与docker daemon建立通信,并将请求发送给后者,而docker后端时松藕合结构,不同模块各斯其职,有机结合,完成用户请求。  dockerdaemom... 查看详情

从零开始搭建dockerswarm集群

从零开始搭建DockerSwarm集群 检查节点Docker配置1.打开Docker配置文件(示例是centos7)vim /etc/sysconfig/docker2.添加-Htcp://0.0.0.0:2375到OPTIONSOPTIONS=‘-g /cutome-path/docker -H tcp://0.0.0.0:2375‘3.Cent 查看详情

docker第五篇存储

镜像概述复习  Docker镜像由多个只读层叠加而成,启动容器时,Docker会加载只读镜像层并在镜像栈顶部添加一个读写层  如果运行中的容器修改了现有的一个已经存在的文件,那改文件将会从读写层下面的只读层复制到读写... 查看详情

docker从零开始网络(一)overly网络

...计阅读时间: 11分钟该overlay网络驱动程序会创建多个docker进程主机之间的分布式网络。该网络位于(覆盖)特定于主机的网络之上,允许连接到它的容器(包括群集服务容器)安全地进行通信。Docker透明地处理每个数据包与... 查看详情

从零开始写博客——数据持久化(文件)(代码片段)

背景前面的文章,我们写了我们的博客系统,也对我们的博客系统进行了测试,基本上已经有了一个博客系统的雏形,但是整个系统有一个问题,那就是我们的数据是在内存中保存的,如果我们把服务停掉了,那么我们新增修改... 查看详情

docker小白从零入门实战(代码片段)

...:Centos6.90.查看是否满足安装需求。先检查服务器环境,docker要求操作系统CentOS6以上,kernel版本必须2.6.32-431或更高,即>=CentOS6.5,[[email protected]~]#uname-r2.6.32-696.23.1.el6.x86_64docker的存储驱动是DeviceMapper,看下你的驱动是否符... 查看详情

从零开始入门k8s|应用存储和持久化数据卷:核心知识

作者|至天 阿里巴巴高级研发工程师一、Volumes介绍PodVolumes首先来看一下PodVolumes的使用场景:场景一:如果pod中的某一个容器在运行时异常退出,被kubelet重新拉起之后,如何保证之前容器产生的重要数据没有丢失?场景二:... 查看详情

从零开始搭建kubernetes(二)_kuboard可视化插件搭建

...能不亚于阿里云的kubernetes可视化界面.该插件运行运行在Docker容器中.在安装可视化之前,我们需要安装Docker容器服务.建议Master和Work节点都安装.因为后期我们搭建Jenkins+Harbor+GitLab的CI/CD时需要Docker容器.设置仓库安装所需的软件包... 查看详情

从零开始写博客——数据持久化(文件)(代码片段)

背景前面的文章,我们写了我们的博客系统,也对我们的博客系统进行了测试,基本上已经有了一个博客系统的雏形,但是整个系统有一个问题,那就是我们的数据是在内存中保存的,如果我们把服务停掉了,那么我们新增修改... 查看详情

从零开始学习docker(初识docker)

从零开始学习Docker第一篇初识Docker提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加第一篇初识Dockerhttps://editor.csdn.net/md/?articleId=121790797文章目录从零开始学习Docker前言一、Docker是什么?二、... 查看详情

rancher概述

参考技术ARancher是一个帮助企业运行和管理Docker和Kubernates的开源软件平台。通过Rancher,企业不再需要从零开始使用各种开源技术构建一个容器服务平台。Rancher提供了管理容器的完整软件栈。Rancher软件包含4个主要的组件:1、基... 查看详情

docker从零开始网络macvlan(代码片段)

...接到物理网络的物理网络接口。在这种情况下,您需要在Docker主机上指定一个物理接口,用于Macvlan,以及Macvlan的子网和网关。您甚至可以使用不 查看详情

从零开始学web之css3css3概述,选择器

大家好,这里是「从零开始学Web系列教程」,并在下列地址同步更新......github:https://github.com/Daotin/Web微信公众号:Web前端之巅博客园:http://www.cnblogs.com/lvonve/CSDN:https://blog.csdn.net/lvonve/在这里我会从Web前端零基础开始,一步步... 查看详情

hyperledgerfabric1.0从零开始——公网环境构建

...文中用到的宿主机环境是Centos,版本为Centos.x86_647.2,通过Docker容器来运行Fabric的节点,版本为v1.0。因此,启动Fabric网络中的节点需要先安装Docker、Docker-compose和Go语言环境,然后在网上拉取相关的Docker镜像,再通过配置compose文件来... 查看详情

docker从零开始网络null网络(代码片段)

...下示例说明了这一点。1.创建容器。[[email protected]~]#dockerrun--rm-dit>--networknone>--nameno-net-alpine>alpine:latest& 查看详情