说明:
        一直想学Docker,容器、镜像、仓库什么的好难理解就没怎么看了,最近下定决心好好看看,google、Baidu发现这篇好文章,看完差不多有个大概的理解。里面的内容基本上来以下博文,是国外一小伙写的,很牛~,第二个链接是国内翻译的一个译文,第三个链接里有几幅图很经典,是参考这里的。这么好的文章真的得分享
 
      http://merrigrove.blogspot.sg/2015/10/visualizing-docker-containers-and-images.html  原文
      http://dockone.io/article/783  译文
      https://www.cnblogs.com/SzeCheng/p/6822905.html
总体图:

 
 
一、镜像
 
镜像(Image)就是一堆只读层(read-only layer)的统一视角。一个只读的模板。如一个镜像可以包含一个完整的操作系统环境,里面仅安装了Apache或用户需要的其他应用程序。镜像可以用来创建Docker容器。Docker提供了一个简单的机制来创建镜像或更新现有的镜像。用户也可以直接从其他人那里下载一个已经做好的镜像直接来使用。
 
 
 
 
 
二、容器(Container)
 
Docker利用容器来运行应用、容器是从镜像创建的运行实例。可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。容器的定义和镜像几乎一样,也是一堆层的视角,唯一的区别在与容器的最上面那一层是可读可写的。
 
 
 
 
 
三、运行容器(Running Container Definition)
 
一个运行态容器(running container)被定义为一个可读写的统一文件系统加上隔离的进程空间和包含其中的进程。
 
 
 
正是文件系统隔离技术使得Docker成为了一个前途无量的技术。一个容器中的进程可能会对文件进程修改,删除,创建,这些改变都将作用于可读写层(read-write layer)
 
 
 
四、镜像层(image layer)
 
一个层并不仅仅包含文件系统的改变,还包含了其他重要信息。  
 
 
 
       
元数据(metadata)就是关于这个层的额外信息,它不仅能够让Docker获取运行和构建时的信息,还包括父层的层次信息,只读层和读写层都包含元数据。

 
 
每一层都包含了一个指向父层的指针,如果一个层没有这个指针,说明他处于最底层。
 
 
 
五、全局理解
 
1)docker create <image-id>
 
 
 
docker create 命令为指定的镜像(image)添加了一个可读写层,构成了一个新的容器,这个容器并没有运行
 
 
 
2)docker start <container-id>
 

 
Docker start 命令为容器文件系统创建了一个进程隔离空间,每个容器只能够有一个进程隔离的空间
 
3)docker run <image-id>
 
 
docker start 与docker run的区别
 
docker run 命令先是利用镜像创建了一个容器,这个命令隐藏了docker create与docker start细节
 
4)docker ps
 
docker ps命令会列出所有运行中的容器。这隐藏了非运行态容器的存在。
 
5)docker ps -a
 
 
docker ps -a 会列出所有的容器,不管是运行的,还是停止的
 
6)docker images
 
 
 
docker images 会列出所有顶层(top-level)镜像。没有办法区分一个镜像和一个只读层,所以提出了top-level镜像。只有创建容器时使用的镜像或者是直接pull下来的镜像能被称为顶层镜像(top-level),并且每一个顶层镜像下面都影藏了多个镜像层
 
 
7)docker images -a
 
 
docker iamges -a命令列出了所有的镜像,列出了所有的可读层,查看某一个image-id下的所有层,可使用docker history image-id来查看
 
 
8)docker stop <container-id>
 
 
 docker stop命令会向运行中的容器发送一个SIGTERM信号,然后停止所有进程
 
9)docker skill <container-id>
 
docker kill 命令向所有运行在容器中的进程发送一个不友好的SIGKILL信号
 
10)docker pause <container-id>
 
 
docker stop和docker kill 命令会发送UNIX的信号给运行中的进程。docker pause用cgroups的特性将运行中的进程空间暂停
 
11)docker rm <container-id>
 
 
docker rm命令会移除构成容器的可读写层,这个命令只能对非运行态容器执行
 
11)docker rmi <image-id>
 
 
docker rmi 命令会移除构成镜像的一个只读层。只能够使用docker rmi来移除最顶层(top level layer)也就是镜像,也可以使用-f参数来强制删除中间的只读层
12)docker commit <container-id>
 
 
docker commit命令将容器的可读写层转换成一个只读层,这样把一个容器转换成了不可变的镜像
 
 
 
13)docker build
 
 
 
 
 
build命令根据Dockerfile文件中的FROM指令获取到镜像,然后重复的run、修改、commit。在循环中每一步都会生成一个新的层,因此许多新的层会被创建
 
14)docker exec <running-container-id>
 
docker exec 命令会在运行中的容器执行一个新进程
 
15)docker inspect <container-id> or <image-id>
 
docker inspect 命令会提取出容器或者镜像最顶层的元数据
 
16)docker save <image-id>
 
 

docker save创建一个镜像的压缩文件,这个文件能够在另一个主机的Docker上使用。和export命令不同。save命令为每一个层都保存了它们的元数据,只对镜像生效

 
17)docker export <container-id>
 
 
docker export创建一个tar文件,并且移除了元数据和不必要的层,将多个层整合成一个层,只保存当前统一视角看到的内容。export后的容器再import到Docker中,通过docker images -tree命令只能看到一个镜像;而save后的镜像不同,他能看到这个镜像的历史镜像
18)docker history <image-id>
 
 
docker history命令递归的输出指定镜像的历史镜像

Docker概念(二)的更多相关文章

  1. docker 概念初识

    1 docker 优势,一次创建或配置可以在任意时间.任意环境让应用正常的运行. 快速交付和部署,开发人员可以使用镜像快速构建一套标准的开发环境:开发完后测试和运维人员可以直接使用相同的环境来部署代码 ...

  2. Docker 概念及基本用法

    Docker 概念及基本用法 一. 本节内容简介 本实验中我们初步接触Docker的概念和基本用法.需要依次完成下面几项任务: 理解Docker是什么 学习如何在Linux上安装Docker 学习如何 ...

  3. JavaScript基本概念(二)

    JavaScript 基本概念(二) 操作符和语句 目录 操作符 一元操作符 位操作符 布尔操作符 乘性操作符 其他操作符 语句部分 说起操作符,回忆下上一篇文章末尾说的话. 操作符 一元操作符 ++ ...

  4. C#学习基础概念二十五问

    C#学习基础概念二十五问 1.静态变量和非静态变量的区别?2.const 和 static readonly 区别?3.extern 是什么意思?4.abstract 是什么意思?5.internal ...

  5. AspNetCore容器化(Docker)部署(二) —— 多容器通信

    一.前言 着上一篇 AspNetCore容器化(Docker)部署(一) —— 入门,在单个容器helloworld的基础上引入nginx反向代理服务器组成多容器应用. 二.配置反向代理转接 配置转接 ...

  6. Docker 系列二(操作镜像).

    一.镜像管理 1.拉取镜像 docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签] -- Docker 镜像仓库地址 :一般是 域名或者IP[:端口号 ...

  7. docker概念

    一.docket概述 什么是docker? 为什么docker会出现 一款产品从开发到上线,从操作系统,到运行环境,再到应用配置.作为开发+运维之间的协作我们需要关心很多东西,这也是很多互联网公司都不 ...

  8. docker 概念 | 安装 | 基本使用

    Docker 是世界领先的软件容器平台,所以想要搞懂Docker的概念我们必须先从容器开始说起. 一 先从认识容器开始 先来看看容器较为官方的解释 一句话概括容器:容器就是将软件打包成标准化单元,以用 ...

  9. Docker(二):理解容器编排工具Kubernetes内部工作原理

    一.Kubernetes是什么 要说到Docker就不得不说说Kubernetes.当Docker容器在微服务的环境下数量一多,那么统一的,自动化的管理自然少不了.而Kubernetes就是一个这样的 ...

随机推荐

  1. js的柯里化currying

    转载:http://www.zhangxinxu.com/wordpress/2013/02/js-currying/ 我自己的理解柯里化就是这样的,(1)必须返回匿名函数,(2)参数复用. 1. 参 ...

  2. 超轻量级Json框架SmartObject

    最近我在codeplex上发了一个项目SmartObject(基于framework4.5,目前是1.0版本).用法如下: // HowToUse using Spider.Data; //json ...

  3. Vue mixins(混入)

    建立一个公共组件,然后对该组件进行混入继承. 注意会走两个生命周期,谨慎使用 mixins混入,相当于生成new 组件:组件引用,相当与在父组件内开辟了一块单独的空间 mixins适用于,两个有非常相 ...

  4. css新单位vw,vh在响应式设计中的应用

    考虑到未来响应式设计的开发,如果你需要,浏览器的高度也可以基于百分比值调整.但使用基于百分比值并不总是相对于浏览器窗口的大小定义的最佳方式,比如字体大小不会随着你窗口改变而改变,如今css3引入的新单 ...

  5. 为iframe添加onclick事件

    如果页面上有iframe时,鼠标点击在iframe内时,包含iframe的document是不响应任何事件的, 例如: $("#iframe1").click(function() ...

  6. JavaScript异步流程控制的前世今生

    Javascript语言将任务的执行模式分成两种:同步(Synchronous)和异步(Asynchronous). 什么是同步编程 "同步模式"就是上一段的模式,后一个任务等待前 ...

  7. AIX中PV,VG,LV及FS常用相关命令

    1.PV常用相关命令 1)lsdev:列出ODM(Object Data Manager)中的设备. 2)chdev:修改一个AIX设备的属性. 3)mkdev:创建一个AIX设备. 4)chpv:修 ...

  8. linux svn 多项目设置

    cd /svn/repos svnadmin create project_a svnadmin create project_b cd project_a cp -a conf /svn/ cd / ...

  9. Mysql怎么判断繁忙 checkpoint机制 innodb的主要参数

    Mysql怎么判断繁忙,innodb的主要参数,checkpoint机制,show engine innodb status   2018年07月13日 15:45:36 anzhen0429 阅读数 ...

  10. IE浏览器使用VLC实时显示视频(海康、大华)

    VLC2.X 下载地址: https://download.csdn.net/download/zhutouaizhuwxd/10692873 CSDN必须要加分,你们用分下载吧 使用方法: 只需要添 ...