美文网首页
Docker镜像与容器

Docker镜像与容器

作者: 逑熙 | 来源:发表于2017-09-27 00:09 被阅读66次

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

Docker镜像

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

  • 由Dockerfile生成
  • 呈现层级结构
  • 每层镜像包含:镜像文件以及镜像json元数据信息
Docker容器

Docker容器是Docker镜像的运行态体现。概括而言,就是在Docker镜像之上,运行进程。进程启动的方式有两种,用户即可以选择运行自己另行指定的命令,也可以选择运行Docker镜像内部指定的命令。
Docker容器的文件系统,可以说大部分由Docker镜像来提供。为什么说是大部分呢?其实是有原因的,镜像内容虽多,但依然不是全部。

Docker容器文件系统

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


技术分享

上图从一个较为全面的角度阐述了Dockerfile、Docker镜像与Docker容器三者的关系。
Dockerfile体现Docker容器已经在运行,但是追本溯源,我们依然可以找到Dockerfile的影子。上图中,我们可以发现,Docker容器依附Docker镜像,而Docker镜像的Dockerfile是这样的:

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

我们可以看到,以上Dockerfile中的每一条命令,都在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的整个生命周期有三部分组成:镜像(image)+容器...

  • docker相关概念理解

    Docker 镜像(Images):Docker 镜像是用于创建 Docker 容器的模板。 Docker 容器(...

  • docker安装使用,简单命令

    安装与配置 Docker docker的使用 拉取镜像——用镜像启动容器

  • Docker

    [TOC] 使用 Docker 镜像 下载镜像 列出镜像 构建镜像 删除本地镜像 操作 Docker 容器 容器是...

  • Docker命令及实战

    常用Docker命令 docker容器信息 镜像操作 镜像搜索 镜像下载 删除镜像 容器操作 提示:对于容器的操作...

  • docker

    1.docker 镜像 容器 2.docker与虚拟机 3.docker简单操作 1.docker 镜像 容...

  • docker命令

    镜像、容器基本操作 1、获取镜像docker pull 2、运行容器docker run docker run -...

  • Docker的三个基本概念(镜像、容器,仓库)

    镜像(image)容器(Container)仓库(repository) docker镜像: Docker 镜像,...

  • docker常用操作

    下载docker镜像 查看docker镜像 搜索docker镜像 开启docker容器 查看全部docker实例 ...

网友评论

      本文标题:Docker镜像与容器

      本文链接:https://www.haomeiwen.com/subject/ajqyextx.html