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

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索docker
容器文件系统
docker容器管理系统、docker 容器文件系统、docker 容器 操作系统、docker 进入容器、docker 启动容器,以便于您获取更多的相关知识。

时间: 2024-10-31 17:01:56

Docker 容器文件系统详细介绍(图文)_docker的相关文章

Docker 存储驱动详细介绍_java

Docker 存储驱动详细介绍 最近做项目,期间对Docker 存储驱动不会,于是在网上找资料,并解决了,这里就记录下. 目的 理解docker的存储方式 docker的image和container在host上的目录结构 docker image和container的内容与配置不同存储 Docker是一个开源的应用容器引擎,主要利用Linux内核namespace实现沙盒隔离,用Cgroup实现资源限制.Docker用于统一开发和部署的轻量级 Linux 容器,试图解决"依赖地狱"问

Docker容器配置Nginx实例分享_docker

作为目前最火的应用,Docker 确实存在着其独到之处,无论是程序猿还是运维都应该听说过 Docker 的大名,Docker 已经走过了许多的坑,目前最新版本是 v1.11.0 版本,应该说是完全能承载开发使用和运维监控,这款工具能帮助我们高效的打包.发布和运行承载着应用程序的容器系统.而且收集日志.帮助 App 的快速开发都有很大作用. 容器和虚拟机,经常是被拿出来对比的两款产品,实际上两者有着根本的差别,虚拟机是完全模拟了一台真实计算机,在上面运行的系统可能或者不可能知道自己运行在虚拟化环境

Docker 端口映射详细介绍_docker

Docker 端口映射:          最近抽空,把Docker 端口映射的资料整理了一下,以便后续项目应用,大家也可以参考下.   # Find IP address of container with ID <container_id> 通过容器 id 获取 ip $ sudo docker inspect <container_id> | grep IPAddress | cut -d '"' -f 4 无论如何,这些 ip 是基于本地系统的并且容器的端口非本地

容器服务中的节点失效时Docker容器重新调度介绍

    生产环境部署的服务都会考虑单点失效情况下的高可用性.在容器服务中,当节点失效的时候,能否重新调度容器到健康节点上继续提供服务对于生产环境中的服务高可用性尤为重要.下面我们就演示一下容器服务的重新调度功能.     首先创建一个含有3个节点的集群.       我们使用如下编排模板创建一个含有三个实例的nginx service,注意到添加了一个属性reschedule:on-node-failure意思是在节点失效的时候 会重新调度这个容器. web: image: nginx rest

非宿主机外部访问docker容器问题

问题描述 非宿主机外部访问docker容器问题 简单介绍一下我的环境: 1.docker宿主机(os:centos7, ip:192.168.0.100) 2.宿主机中用brctl新建一个虚拟网桥bridge0(brctl addbr bridge0),并分配IP为192.168.227.1 (ifconfig bridge0 192.168.227.1 netmask 255.255.255.0) 3.然后docker容器以网桥方式用pipework挂到bridge0下: docker run

Docker 容器概念

不玩虚的, 当然更畅快 docker 与虚拟机(vm)对比: lark_01_vm_vs_docker 虚拟机运行在虚拟硬件上, 应用运行在虚拟机内核上.而 docker daemon 是宿主机上的一个进程, 应用只是 docker daemon 的一个子进程, 换句话说, 应用直接运行在宿主机内核上. 虚拟机需要特殊硬件虚拟化技术支持, 因而只能运行在物理机上.docker 没有硬件虚拟化, 因而可以运行在物理机.虚拟机, 甚至 docker 容器内(嵌套运行). 因为没有硬件虚拟化及多运行一

Docker 数据卷及数据容器详细介绍及示例_docker

Docker 数据卷及数据容器 这两天开始学习docker,发现docker确实很强大,让网站部署和维护的效率大大提高.遂准备将手头维护的几个小站,全部docker化.整理的过程中感觉到,docker可以以功能或者进程为单位进行部署和维护,不用再花时间在繁琐的配置上面,但是docker和宿主之间的数据共享以及docker间的数据共享仍然是让人头疼和操心的地方. 几个基本概念: docker: 一种容器管理技术,这里也指既有的开发工具链. container: 容器 image: 镜像 volum

Docker 数据卷,数据卷容器详细介绍_docker

Docker 数据卷,数据卷容器详细介绍 引子 有些时候,我们的服务运行时必不可少的会产生一些日志,或是我们需要把容器内的数据进行备份,甚至多个容器之间进行数据共享,这必然涉及容器的数据管理操作. 容器中管理数据主要有两种方式: 数据卷 数据卷容器 数据卷是一个可供容器使用的特殊目录,它绕过文件系统,可以提供很多有用的特性: - 数据卷可以在容器之间共享和重用 - 对数据卷的修改会立马生效 - 对数据卷的更新,不会影响镜像 - 卷会一直存在,直到没有容器使用 #(类似linux下的挂载(moun

Docker Windows下如何安装详细介绍(图文)_docker

Docker Windows 介绍及安装 前言: 放在三年前,你不认识Docker情有可原,但如果现在你还这么说,不好意思,只能说明你OUT了,行动起来吧骚年,很可能你们公司或者你即将要去的公司,或者你想去的公司很可能就会引入Docker,或者已经引入了Docker. Docker溯源 Docker的前身是名为dotCloud的小公司,主要提供的是基于 PaaS(Platform as a Service,平台及服务)平台为开发者或开发商提供技术服务,并提供的开发工具和技术框架.因为其为初创的公