【云原生 | Docker篇】网络和存储原理(三)(上)

简介: 【云原生 | Docker篇】网络和存储原理(三)(上)

网络和存储原理


前言


博主语录:一文精讲一个知识点,多了你记不住,一句废话都没有


经典语录:勇者愤怒,抽刃向更强者;怯者愤怒,却抽刃向更弱者


一、Docker存储


1、镜像如何存


1.0、自己探索


FROM busybox 
CMD ping baidu.com


截取的nginx的分层


image.png


nginx 这个镜像怎么存的
使用: docker image inspect nginx


image.png


如图指示了镜像怎么存的


LowerDir :底层目录; diw (只是存储不同);包含小型linux和装好的软件
/var/lib/docker/overlay2/67b3802c6bdb5bcdbcccbbe7aed20faa7227d584ab37668a03ff6952e631f7f2/diff:用户文件;
/var/lib/docker/overlay2/f56920fac9c356227079df41c8f4b056118c210bf4c50bd9bb077bdb4c7524b4/diff: nginx 的启动命令放在这里
/var/lib/docker/overlay2/0e569a134838b8c2040339c4fdb1f3868a7118dd7f4907b40468f5fe60f055e5/diff: nginx 的配置文件在这里
/var/lib/docker/overlay2/2b51c82933078e19d78b74c248dec38164b90d80c1b42f0fdb1424953207166e/diff: 小linux 系统


倒着看


image.png

"LowerDir":
"/var/lib/docker/overlay2/41e4fa41a2ad1dca9616d4c8254a04c4d9d6a3d462c862f1e9a0562de2384dbc-
init/diff:/var/lib/docker/overlay2/e3b8bdbb0cfbe5450696c470994b3f99e8a7942078e2639a788027529c6278f7/diff:/var/lib/docker/overlay2/67b3802c6bdb5bcdbcccbbe7aed20faa7227d584ab37668a03ff6952e631f7f2/diff:/var/lib/docker/overlay2/f56920fac9c356227079df41c8f4b056118c210bf4c50bd
9bb077bdb4c7524b4/diff:/var/lib/docker/overlay2/0e569a134838b8c2040339c4fdb1f3868a7118dd7f4907b40468f5fe60f055e5/diff:/var/lib/docker/overlay2/2b51c82933078e19d78b74c248dec38164b90d80c1b42f0fdb142495320766e/diff",
"MergedDir":
"/var/lib/docker/overlay2/41e4fa41a2ad1dca9616d4c8254a04c4d9d6a3d462c862f1e9a0562de2384dbc/merged",
"UpperDir": (镜像的上层可以感知变化)"/var/lib/docker/overlay2/41e4fa41a2ad1dca9616d4c8254a04c4d9d6a3d462c862f1e9a0562de2384dbc/diff",【容器的修改后的文件,保存在宿主机哪里呀。容器删除后,那些容器目录还存在吗?一定不再】
"WorkDir":
"/var/lib/docker/overlay2/41e4fa41a2ad1dca9616d4c8254a04c4d9d6a3d462c862f1e9a0562de2384dbc/work"


MergedDir :合并目录;容器最终的完整工作目录全内容都在合并层;数据卷在容器层产生;所有的增删改都在容器层;


image.png


  • UpperDir :上层目录;


  • WorkDir :工作目录(临时层),PID;


LowerDir(底层)\UpperDir(上层)\MergedDir\WorkDir(临时东西)


docker 底层的 storage driver 完成了以上的目录组织结果;


1.1、Images and layers


Docker 映像由一系列层组成。 每层代表图像的 Dockerfile 中的一条指令。 除最后一层外的每一层都是只读的。 如以下Dockerfile :


FROM ubuntu:15.04
COPY . /app
RUN make /app
CMD python /app/app.py
# 每一个指令都可能会引起镜像改变,这些改变类似 git 的方式逐层叠加。


  • 该Dockerfile包含四个命令,每个命令创建一个层。
  • FROM语句从ubuntu:15.04映像创建一个图层开始。
  • COPY命令从Docker客户端的当前目录添加一些文件。
  • RUN命令使用make命令构建您的应用程序。
  • 最后,最后一层指定要在容器中运行的命令。
  • 每一层只是与上一层不同的一组。 这些层彼此堆叠。
  • 创建新容器时,可以在基础层之上添加一个新的可写层。 该层通常称为“容器层”。 对运行中的容器所做的所有更改(例如写入新文件,修改现有文件和删除文件)都将写入此薄可写容器层。


image.png


1.2、Container and layers


  • 容器和镜像之间的主要区别是可写顶层。
  • 在容器中添加新数据或修改现有数据的所有写操作都存储在此可写层中。
  • 删除容器后,可写层也会被删除。 基础图像保持不变。 因为每个容器都有其自己的可写容器层,并且所有更改都存储在该容器层中,所以多个容器可以共享对同一基础映像的访问,但具有自己的数据状态。


下图显示了共享同一 Ubuntu 15.04 映像的多个容器。


image.png


1.3、磁盘容量预估


docker ps -s


size :用于每个容器的可写层的数据量(在磁盘上)。


virtual size :容器使用的用于只读图像数据的数据量加上容器的可写图层大小。

多个容器可以共享部分或全部只读图像数据。


从同一图像开始的两个容器共享 100 %的只读数据,而具有不同图像的两个容器(具有相同的层)共享这些公共层。 因此,不能只对虚拟大小进行总计。这高估了总磁盘使用量,可能是一笔不小的数目。


1.4、镜像如何挑选


  • Busybox :是一个集成了一百多个最常用 Linux 命令和工具的软件。L inux 工具里的瑞士军刀
  • Alpine : Alpine 操作系统是一个面向安全的轻型 Linux 发行版经典最小镜像,基于 busybox ,功能比 Busybox完善。
  • Slim : docker hub 中有些镜像有 slim 标识,都是瘦身了的镜像。也要优先选择
  • 无论是制作镜像还是下载镜像,优先选择 Alpine 类型 .


1.5、Copy On Write


  • 写时复制是一种共享和复制文件的策略,可最大程度地提高效率。


  • 如果文件或目录位于映像的较低层中,而另一层(包括可写层)需要对其进行读取访问,则它仅使用现有文件。


  • 另一层第一次需要修改文件时(在构建映像或运行容器时),将文件复制到该层并进行修改。 这样可以将I / O和每个后续层的大小最小化。



image.png


目录
相关文章
|
2天前
|
Kubernetes Cloud Native Docker
云原生时代的容器化实践:Docker与Kubernetes入门
【9月更文挑战第30天】在云计算的浪潮中,云原生技术正以前所未有的速度重塑着软件开发和运维领域。本文将通过深入浅出的方式,带你了解云原生的核心组件——Docker容器和Kubernetes集群,并探索它们如何助力现代应用的构建、部署和管理。从Docker的基本命令到Kubernetes的资源调度,我们将一起开启云原生技术的奇妙之旅。
|
12天前
|
运维 Cloud Native Docker
云原生技术入门:Docker容器化实战
【9月更文挑战第20天】本文将引导你走进云原生技术的世界,通过Docker容器化技术的实战演练,深入理解其背后的原理和应用。我们将一起探索如何在云平台上利用Docker简化部署、扩展和管理应用程序的过程,并揭示这一技术如何改变现代软件的开发和运维模式。
|
8天前
|
数据采集 存储 JavaScript
构建您的第一个Python网络爬虫:抓取、解析与存储数据
【9月更文挑战第24天】在数字时代,数据是新的金矿。本文将引导您使用Python编写一个简单的网络爬虫,从互联网上自动抓取信息。我们将介绍如何使用requests库获取网页内容,BeautifulSoup进行HTML解析,以及如何将数据存储到文件或数据库中。无论您是数据分析师、研究人员还是对编程感兴趣的新手,这篇文章都将为您提供一个实用的入门指南。拿起键盘,让我们开始挖掘互联网的宝藏吧!
|
7天前
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
26 4
|
17天前
|
Kubernetes Cloud Native 开发者
云原生入门:从Docker到Kubernetes的旅程
【9月更文挑战第16天】 本文将带你进入云原生的世界,从理解Docker容器的基础开始,逐步深入到Kubernetes集群管理。我们将通过简单的代码示例和实际操作,探索这两个关键技术如何协同工作,以实现更高效、灵活的应用程序部署和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供清晰的指导和实用的知识。
51 11
|
28天前
|
Cloud Native 持续交付 Docker
云原生技术实践:Docker容器化部署教程
【9月更文挑战第4天】本文将引导你了解如何利用Docker这一云原生技术的核心工具,实现应用的容器化部署。文章不仅提供了详细的步骤和代码示例,还深入探讨了云原生技术背后的哲学,帮助你理解为何容器化在现代软件开发中变得如此重要,并指导你如何在实际操作中运用这些知识。
|
2月前
|
Kubernetes Cloud Native 开发者
探索云原生技术:从Docker到Kubernetes的旅程
【8月更文挑战第31天】云原生技术正在改变软件开发、部署和运维的方式。本文将带你了解云原生的核心概念,并通过实际代码示例,展示如何使用Docker容器化应用,并进一步通过Kubernetes进行集群管理。我们将一起构建一个简单的微服务架构,体验云原生带来的高效与便捷。
|
2月前
|
Kubernetes Cloud Native 云计算
云原生入门:从Docker到Kubernetes的旅程
【8月更文挑战第31天】 在数字化转型的浪潮中,云原生技术成为推动现代软件开发的关键力量。本文将引导读者理解云原生的基本概念,通过Docker和Kubernetes的实际应用示例,展示如何在云平台上部署和管理容器化应用。我们将一起探索服务编排、持续集成和微服务架构的实践之路,旨在为初学者揭开云原生技术的神秘面纱,并激发对这一前沿领域的深入探索。
|
2月前
|
运维 Kubernetes Cloud Native
云原生技术入门:Kubernetes和Docker的协同工作
【8月更文挑战第31天】 在云原生的世界里,容器技术是基石。本文将带你了解如何通过Kubernetes和Docker这两个强大的工具,搭建起你的云原生应用架构。我们将一起探索它们如何相互配合,提升开发与运维的效率。准备好了吗?让我们启航,探索云原生的奥秘!
|
2月前
|
Cloud Native 云计算 Docker
云原生之旅:Docker容器化实践
【8月更文挑战第31天】本文深入浅出地介绍了云原生技术中的一个重要组成部分—Docker容器。通过实际案例,我们将一起探索如何将应用容器化,并部署到云端。文章不仅涵盖了Docker的基本操作和概念,还提供了详细的代码示例,帮助初学者快速上手。让我们一起开启云原生技术的奇妙旅程吧!

热门文章

最新文章

下一篇
无影云桌面