Docker镜像与容器的区别

来源:互联网 发布:淘宝魔方店哪个好 编辑:程序博客网 时间:2024/03/29 16:42
Docker入门首先需要了解的两个重要的概念就是镜像与容器。这两个概念非常相似,很容器混淆。这里就来好好的区分一下。

  • 镜像
       一个Docker镜像可以构建于另一个Docker镜像之上,这种层叠关系可以是多层的。第一层的镜像层是基础镜像(Base Image),其它层的镜像(除了最顶层)称为父层镜像(Parent Image)。这些镜像继承了他们父层镜像的所有属性和设置,并在Dockerfile中添加了自己的配置。其实就特别类似于软件开发中的继承。

       Docker镜像通过镜像ID进行识别,镜像ID是一个64字符的十六进制的字符串。但是我们一般使用镜像名来引用,镜像名更加的直观。“docker images”列出所有本地的镜像和详细信息。
       镜像就是一堆只读层(read-only layer)的统一视角,统一文件系统技术能够将不同的层整合成一个文件系统,为这些层提供一个统一的视角,这样就隐藏了多层的存在,在用户的角度来看,只存在一个文件系统,用户对于多层的情况是不可见的。
(图片来自网上)


Docker镜像可以发布为不同的版本,这种机制可以通过Tag来体现。默认下载的版本为latest版本,即为最新的版本。你可以在下载时通过“镜像名:版本号”的方式来下载指定版本的镜像。本地可以存放同一镜像的多个版本。



  • 容器
       Docker容器可以使用命令创建“docker run 镜像名”。它会在所有的镜像层之上增加一个可写层,这个可写层有运行在CPU上的进程。容器有两个不同的状态:运行态(Running)和退出态(Exited).  使用docker run启动容器,Docker容器就进入运行态,当停止Docker容器时(docker stop),就进入退出态。容器的状态可以非常简单的对比某个进程的状态。
       可以用同一个镜像启动多个Docker容器,这些容器启动后都是活动的,彼此是相互隔离的。对其中一个容器的变更只会局限于那个容器本身,所以Docker是一个很好的资源隔离的工具。
       容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。由于也使用了统一文件系统,所以多层的状态对用户也是不可见的。


容器  =  镜像 + 可写层。  并且容器的定义并没有提及是否要运行容器。

我们可以使用“docker ps -a”来查看当前Docker中的所有容器,包括运行态和退出态:




  • 容器与镜像的关系


最简单的关系可以理解如下:
镜像:类
容器:对象

我们软件开发中使用类来实例化一个或多个对象,Docker中使用镜像来创建一个或多个容器,很多操作都是直接对容器进行操作的。































原创粉丝点击