热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

Docker容器文件系统详细介绍(图文)

这篇文章主要介绍了Docker容器文件系统详细介绍(图文)的相关资料,这里对Docker容器文件系统进行了具体的分析详解,需要的朋友可以参考下

Docker 容器文件系统

Dockerfile是软件的原材料,Docker镜像是软件的交付品,而Docker容器则可以认为是软件的运行态。从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

Docker镜像

Docker镜像是Dockerfile的产物,是Docker容器的前提,大有承前启后之意。Docker技术发展两年有余,相信大家很早就听说过Docker大多采用联合文件系统(Union Filesystem),为Docker容器提供文件系统服务。

关于Docker镜像,有以下特性:

  1. 由Dockerfile生成
  2. 呈现层级结构
  3. 每层镜像包含:镜像文件以及镜像json元数据信息

Docker容器

Docker容器是Docker镜像的运行态体现。概括而言,就是在Docker镜像之上,运行进程。进程启动的方式有两种,用户即可以选择运行自己另行指定的命令,也可以选择运行Docker镜像内部指定的命令。

Docker容器的文件系统,可以说大部分由Docker镜像来提供。为什么说是大部分呢?其实是有原因的,镜像内容虽多,但依然不是全部。下面,我会带大家看看,Docker镜像中有什么,而Docker容器的哪些内容不在Docker镜像中。

Docker容器文件系统

那就让我们一图看尽Docker容器的文件系统:

这里写图片描述

上图从一个较为全面的角度阐述了DockerfileDocker镜像Docker容器三者的关系。

Dockerfile体现

Docker容器已经在运行,但是追本溯源,我们依然可以找到Dockerfile的影子。上图中,我们可以发现,Docker容器依附Docker镜像,而Docker镜像Dockerfile是这样的:

FROM ubuntu:14.04
ADD run.sh /
VOLUME /data
CMD ["./run.sh"]

我们可以看到,以上Dockerfile中的每一条命令,都在Docker镜像中以一个独立镜像层的形式存在。

Docker镜像体现

毫无疑问,Docker镜像是由Dockerfile构建而成,我们也可以看到图中下4层被标记为Docker镜像。作为Docker技术的核心,我们必须了解Docker如何构建镜像,以及Docker镜像构建之后的产物是什么。

初次接触Docker,了解层级管理的Docker镜像之后,很容易就认为:每一层Docker镜像中都含有相应的文件系统文件。其实不然,以上Dockerfile中的4条命令,则是一个很好的佐证。

FROM ubuntu:14.04 :设置基础镜像,此时会使用基础镜像ubuntu:14.04的所有镜像层,为简单起见,图中将其作为一个整体展示。

ADD run.sh /:将Dockerfile所在目录的文件run.sh加至镜像的根目录,此时新一层的镜像只有一项内容,即根目录下的run.sh.

VOLUME /data:设定镜像的VOLUME,此VOLUME在容器内部的路径为/data。需要注意的是,此时并未在新一层的镜像中添加任何文件,但更新了镜像的json文件,以便通过此镜像启动容器时获取这方面的信息。

CMD ["./run.sh"]:设置镜像的默认执行入口,此命令同样不会在新建镜像中添加任何文件,仅仅在上一层镜像json文件的基础上更新新建镜像的json文件。Docker容器体现

涉及到Docker容器,便是动态的内容,一切似乎都有了生命。上文曾提及,Docker容器的文件系统中不仅包含Docker镜像。此言不虚,图中的顶上两层,就是Docker为Docker容器新建的内容,而这两层恰恰不属于镜像范畴。

这两层分别为Docker容器的初始层(Init Layer)与可读写层(Read-Write Layer),初始层中大多是初始化容器环境时,与容器相关的环境信息,如容器主机名,主机host信息以及域名服务文件等。

再来看可读写层,这一层的作用非常大,Docker的镜像层以及顶上的两层加起来,Docker容器内的进程只对可读写层拥有写权限,其他层对进程而言都是只读的(Read-Only)。如AUFS等文件系统下,写下层镜像内容即会涉及COW(Copy-on-Write)技术。另外,关于VOLUME以及容器的hosts、hostname、resolv.conf文件等都会挂载到这里。需要额外注意的是:虽然Docker容器有能力在可读写层看到VOLUME以及hosts文件等内容,但那都仅仅是挂载点,真实内容位于宿主机上。

总结

Docker镜像属静态,Docker容器属动态,两者之间有着千丝万缕的关系。从Docker容器文件系统的角度来认识两者,我相信会对大家有很大的帮助。

Docker镜像以及Docker容器文件系统,绝对是非常细致的内容,基于这些概念,实在有太多有意思的话题可以展开,本系列后续会有以下多篇文章来分析:

1.深刻理解Docker镜像大小

2.其实docker commit很简单

3.不得不说的docker save与docker export区别

4.为什么有些容器文件动不得

5.打破MNT Namespace的容器VOLUME

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


推荐阅读
  • 在开发过程中,我最初也依赖于功能全面但操作繁琐的集成开发环境(IDE),如Borland Delphi 和 Microsoft Visual Studio。然而,随着对高效开发的追求,我逐渐转向了更加轻量级和灵活的工具组合。通过 CLIfe,我构建了一个高度定制化的开发环境,不仅提高了代码编写效率,还简化了项目管理流程。这一配置结合了多种强大的命令行工具和插件,使我在日常开发中能够更加得心应手。 ... [详细]
  • Python 3 Scrapy 框架执行流程详解
    本文详细介绍了如何在 Python 3 环境下安装和使用 Scrapy 框架,包括常用命令和执行流程。Scrapy 是一个强大的 Web 抓取框架,适用于数据挖掘、监控和自动化测试等多种场景。 ... [详细]
  • Docker 中创建 CentOS 容器并安装 MySQL 进行本地连接
    本文详细介绍了如何在 Docker 中创建 CentOS 容器,并在容器中安装 MySQL 以实现本地连接。文章内容包括镜像拉取、容器创建、MySQL 安装与配置等步骤。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • Parallels Desktop for Mac 是一款功能强大的虚拟化软件,能够在不重启的情况下实现在同一台电脑上无缝切换和使用 Windows 和 macOS 系统中的各种应用程序。该软件不仅提供了高效稳定的性能,还支持多种高级功能,如拖放文件、共享剪贴板等,极大地提升了用户的生产力和使用体验。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 在本次分享中,我将详细介绍我的网络数据爬取项目,包括使用Scrapy-Redis进行分布式爬取的具体配置和多台机器的协同工作。此外,还将探讨从Scrapy到Scrapy-Redis的迁移过程,以及在实际爬取过程中遇到的各种反爬虫策略及其应对方法。 ... [详细]
  • 利用ZFS和Gluster实现分布式存储系统的高效迁移与应用
    本文探讨了在Ubuntu 18.04系统中利用ZFS和Gluster文件系统实现分布式存储系统的高效迁移与应用。通过详细的技术分析和实践案例,展示了这两种文件系统在数据迁移、高可用性和性能优化方面的优势,为分布式存储系统的部署和管理提供了宝贵的参考。 ... [详细]
  • 当 EXCLUDE_DEAD 设置为 1 时,为何没有容器被移除? ... [详细]
  • 本文探讨了使用Python进行微服务架构设计的合理性和适用性。首先,介绍了微服务的基本概念及其在现代软件开发中的重要性。接着,通过具体的业务场景,详细分析了Python在微服务架构设计中的优势和挑战。文章还讨论了在实际应用中可能遇到的问题,并提出了相应的解决方案。希望本文能够为从事Python微服务开发的技术人员提供有价值的参考和指导。 ... [详细]
  • Docker入门指南:初探容器化技术
    Docker入门指南:初探容器化技术摘要:Docker 是一个使用 Go 语言开发的开源容器平台,旨在实现应用程序的构建、分发和运行的标准化。通过将应用及其依赖打包成轻量级的容器,Docker 能够确保应用在任何环境中都能一致地运行,从而提高开发和部署的效率。本文将详细介绍 Docker 的基本概念、核心功能以及如何快速上手使用这一强大的容器化工具。 ... [详细]
  • CentOS 7环境下Jenkins的安装与前后端应用部署详解
    CentOS 7环境下Jenkins的安装与前后端应用部署详解 ... [详细]
  • 解读中台架构:微服务与分布式技术的区别及应用
    中心化与去中心化是长期讨论的话题。中心化架构的优势在于部署和维护相对简单,尤其在服务负载较为稳定的情况下,能够提供高效稳定的性能。然而,随着业务规模的扩大和技术需求的多样化,中心化架构的局限性逐渐显现,如扩展性和故障恢复能力较差。相比之下,微服务和分布式技术通过解耦系统组件,提高了系统的灵活性和可扩展性,更适合处理复杂多变的业务场景。本文将深入探讨中台架构中微服务与分布式技术的区别及其应用场景,帮助读者更好地理解和选择适合自身业务的技术方案。 ... [详细]
  • 本文深入探讨了数据库性能优化与管理策略,通过实例分析和理论研究,详细阐述了如何有效提升数据库系统的响应速度和处理能力。文章首先介绍了数据库性能优化的基本原则和常用技术,包括索引优化、查询优化和存储管理等。接着,结合实际应用场景,讨论了如何利用容器化技术(如Docker)来部署和管理数据库,以提高系统的可扩展性和稳定性。最后,文章还提供了具体的配置示例和最佳实践,帮助读者在实际工作中更好地应用这些策略。 ... [详细]
author-avatar
认知天下微博
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有