入门 - Docker容器数据储存和转移

简介: 容器和镜像之间的主要区别是顶部的可写层。所有对容器添加新的或修改现有数据的内容都存储在该可写层中。当容器被删除时,可写层也被删除。底层镜像保持不变。 同一个镜像可以被创建多个同时运行的容器,相当于最上层的可写层不同而已,Docker版“披上羊皮的狼”。

容器和层


容器和镜像之间的主要区别是顶部的可写层。所有对容器添加新的或修改现有数据的内容都存储在该可写层中。当容器被删除时,可写层也被删除。底层镜像保持不变。 同一个镜像可以被创建多个同时运行的容器,相当于最上层的可写层不同而已,Docker版“披上羊皮的狼”。


容器数据储存


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


  • 当该容器不再运行时,数据不会持久存在,如果另一个进程需要,则可能很难从容器中获取数据。
  • 容器的可写层紧密耦合到运行容器的主机。无法轻松地将数据移动到其他位置。


Docker有两个容器选项可以在主机中存储文件,因此即使在容器停止之后文件仍然存在:数据卷挂载目录。如果你在Linux上运行Docker,你也可以使用_tmpfs mount_。 下面是用法:


-v或者--volume标志在单独容器中使用,--mount标志用于群集服务容器


-v或–volume:由三个字段组成,用冒号字符(:)分隔。字段必须按正确的顺序排列,并且每个字段的含义不是很明显。

  • 对于命名卷,第一个字段是卷的名称,并且在给定主机上是唯一的。对于匿名卷,省略第一个字段。
  • 第二个字段是文件或目录在容器中安装的路径。
  • 第三个字段是可选的,是逗号分隔的选项列表,例如ro。这些选项将在下面讨论。


--mount:由多个键值对组成,以逗号分隔,每个键=组由一个元组组成。该–mount语法比更详细的-v或–volume,但按键的顺序并不显著,并且标志的价值更容易理解。


  • 该type安装件,其可以是bind,volume,或tmpfs。本主题讨论卷,因此类型始终是volume。
  • 该source安装的。对于命名卷,这是卷的名称。对于匿名卷,省略此字段。可以指定为source或src。
  • 将destination文件或目录安装在容器中的路径作为其值。可以指定为destination,dst或target。
  • 该readonly选项(如果存在)导致绑定装入以只读方式装入容器中。
  • 该volume-opt选项可以多次指定,它采用由选项名称及其值组成的键值对。


使用数据卷


数据卷是保存Docker容器生成和使用的数据的首选机制。数据卷完全由Docker管理。有几个优点: 与挂载目录相比,卷更易于备份或迁移。 可以使用Docker CLI命令或Docker API管理数据卷 卷适用于Linux和Windows容器。可以在多个容器之间更安全地共享卷。 卷驱动程序允许在远程主机或云提供程序上存储卷,加密卷的内容或添加其他功能。 新卷可以通过容器预先填充其内容。 卷不会增加使用它的容器的大小,并且卷的内容存在于给定容器的生命周期之外 docker run-d-P–name nginx-v【重点my-vol重点】:/webapp nginx docker run-d-P–name nginx–mount source=my-vol,target=/webapp nginx ①如果本地数据卷或者本地目录尚未创建,-v命令则会自动创建(此时创建的是匿名数据卷),–mount则会报错 匿名数据卷:没有指定名称标识的数据卷,docker随机生成不重复的标识,依赖于一个容器,如果该容器消亡,则因为数据卷标识无法知道,所以无法复用。 ②如果是容器里的目录不存在,两者都会自动创建 创建数据卷 docker volume create my-vol 数据卷列表 docker volume ls 查看数据卷具体信息 docker volume inspect my-vol 删除数据卷 docker volume rm my-vol 清除无主的数据卷 docker volume prune 备份数据卷 当您需要备份,还原或将数据从一个Docker主机迁移到另一个Docker主机时,卷是更好的选择。您可以使用卷停止容器,然后备份卷的目录(例如/var/lib/docker/volumes/)。


使用挂载目录


将主机上的目录或者文件(绝对路径)挂载到容器指定的路径中(绝对路径),也是比较快捷高效的做法,但是数据卷拥有更好的优点,如果你在开发新的应用,请尝试使用数据卷。 docker run-d-p 8082:8080–name tomcat-mount-v/usr/local/kun/aa:/usr/local/tomcat/webapps/aa tomcat docker run-d-p 8082:8080–name tomcat-mount–mount type=bind,src=/usr/local/kun/aa,target=/usr/local/tomcat/webapps/aa tomcat

目录
相关文章
|
6月前
|
NoSQL 算法 Redis
【Docker】(3)学习Docker中 镜像与容器数据卷、映射关系!手把手带你安装 MySql主从同步 和 Redis三主三从集群!并且进行主从切换与扩容操作,还有分析 哈希分区 等知识点!
Union文件系统(UnionFS)是一种**分层、轻量级并且高性能的文件系统**,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下(unite several directories into a single virtual filesystem) Union 文件系统是 Docker 镜像的基础。 镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
721 6
|
6月前
|
监控 Linux 调度
【赵渝强老师】Docker容器的资源管理机制
本文介绍了Linux CGroup技术及其在Docker资源管理中的应用。通过实例演示了如何利用CGroup限制应用程序的CPU、内存和I/O带宽使用,实现系统资源的精细化控制,帮助理解Docker底层资源限制机制。
606 6
|
6月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
669 2
|
8月前
|
Kubernetes Docker Python
Docker 与 Kubernetes 容器化部署核心技术及企业级应用实践全方案解析
本文详解Docker与Kubernetes容器化技术,涵盖概念原理、环境搭建、镜像构建、应用部署及监控扩展,助你掌握企业级容器化方案,提升应用开发与运维效率。
1132 108
|
9月前
|
存储 监控 测试技术
如何将现有的应用程序迁移到Docker容器中?
如何将现有的应用程序迁移到Docker容器中?
670 57
|
6月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
705 51
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
9月前
|
存储 监控 Java
如何对迁移到Docker容器中的应用进行性能优化?
如何对迁移到Docker容器中的应用进行性能优化?
564 59