说明:
        一直想学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. Yahoo Programming Contest 2019 D - Ears

    D - Ears 思路: s:起点           t:终点           l:左端点           r:右端点 以上称为关键点 dp[i][j]表示到位置 i 为止,已经经过前 j ...

  2. js 字符串跟数组的相互转化

    一:字符串转化为数组 例子: var str = "3:2;2:1"; 要变成 arr= [{ a:"3", b:"2", bol:fals ...

  3. 最全面的移动APP测试点

    随着互联网,大数据时代的不断推进,演化.移动开发领域得到普遍普及,APP开发如潮水般涌现.下面我将详细介绍app的测试点: 首先我们先熟悉app测试基本流程: 1.1流程图 1.2测试周期 测试周期可 ...

  4. 7.5 GRASP原则五:高内聚 High Cohesion

    GRASP原则五:高内聚 High Cohesion  How to keep objects focused, understandable and manageable, and as a si ...

  5. day042 css 选择器

    css(Cascading Style Sheet) 层叠样式表,定义了如何显示HTML元素,给HTML设置样式,让它看起来更好 一.css语法 css样式包括两部门,选择器(给谁的样式)和声明(什么 ...

  6. day20_python_1124

    01 昨日内容回顾 类的名称空间 对象的空间 class A: def __init__(): pass obj = A() 对象查询属性:对象本身 ----> 类 -----> 父类 类 ...

  7. python之二分法查找

    二分法查找主要的作用就是查找元素 规则. 掐头结尾取中间, 必须是有序列 # 二分法查找 (需要你明白和掌握) # lst = [1,3,5,7,12,36,68,79] # n = int(inpu ...

  8. Java中的值传递与引用传递

    1.基本类型和引用类型在内存中的保存 Java中数据类型分为两大类,基本类型和对象类型.相应的,变量也有两种类型:基本类型和引用类型. 基本类型的变量保存原始值,即它代表的值就是数值本身: 而引用类型 ...

  9. CT ubuntu 16.04安装 adobe flash player

    sudo apt-get  install flashplugin-installer chrome 升级 chrome://chrome-urls/ chrome://components/ 找到A ...

  10. Shell 变量替换及测试

    声明:$ 后面跟linux可执行命令 一.变量替换                   语法                      说明 ${变量名#匹配规则} 从变量的开头进行规则匹配,将符合最 ...