Docker概念(二)

说明:
        一直想学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

 

总体图:
 
Docker概念(二)_第1张图片
 
一、镜像
 
镜像(Image)就是一堆只读层(read-only layer)的统一视角。一个只读的模板。如一个镜像可以包含一个完整的操作系统环境,里面仅安装了Apache或用户需要的其他应用程序。镜像可以用来创建Docker容器。Docker提供了一个简单的机制来创建镜像或更新现有的镜像。用户也可以直接从其他人那里下载一个已经做好的镜像直接来使用。
 
Docker概念(二)_第2张图片
 
 
  Docker概念(二)_第3张图片

 
二、容器(Container)
 
Docker利用容器来运行应用、容器是从镜像创建的运行实例。可以被启动、开始、停止、删除。每个容器都是相互隔离的,保证安全的平台。容器的定义和镜像几乎一样,也是一堆层的视角,唯一的区别在与容器的最上面那一层是可读可写的。
Docker概念(二)_第4张图片
 
 
Docker概念(二)_第5张图片
 
 
 
三、运行容器(Running Container Definition)
 
一个运行态容器(running container)被定义为一个可读写的统一文件系统加上隔离的进程空间和包含其中的进程。
 
Docker概念(二)_第6张图片
 
 
 
正是文件系统隔离技术使得Docker成为了一个前途无量的技术。一个容器中的进程可能会对文件进程修改,删除,创建,这些改变都将作用于可读写层(read-write layer)
 
Docker概念(二)_第7张图片
 
 
 
四、镜像层(image layer)
 
一个层并不仅仅包含文件系统的改变,还包含了其他重要信息。  
 
 
 
       
元数据(metadata)就是关于这个层的额外信息,它不仅能够让Docker获取运行和构建时的信息,还包括父层的层次信息,只读层和读写层都包含元数据。
Docker概念(二)_第8张图片
 
 
每一层都包含了一个指向父层的指针,如果一个层没有这个指针,说明他处于最底层。
Docker概念(二)_第9张图片
 
 
 
五、全局理解
 
1)docker create
 
Docker概念(二)_第10张图片
 
 
docker create 命令为指定的镜像(image)添加了一个可读写层,构成了一个新的容器,这个容器并没有运行
 
Docker概念(二)_第11张图片
 
 
2)docker start
 
Docker概念(二)_第12张图片
 
Docker start 命令为容器文件系统创建了一个进程隔离空间,每个容器只能够有一个进程隔离的空间
 
3)docker run
 
Docker概念(二)_第13张图片
 
 
docker start 与docker run的区别
 
Docker概念(二)_第14张图片
docker run 命令先是利用镜像创建了一个容器,这个命令隐藏了docker create与docker start细节
 
4)docker ps
 
Docker概念(二)_第15张图片
 
docker ps命令会列出所有运行中的容器。这隐藏了非运行态容器的存在。
 
5)docker ps -a
 
Docker概念(二)_第16张图片
 
docker ps -a 会列出所有的容器,不管是运行的,还是停止的
 
6)docker images
 
Docker概念(二)_第17张图片
 
 
docker images 会列出所有顶层(top-level)镜像。没有办法区分一个镜像和一个只读层,所以提出了top-level镜像。只有创建容器时使用的镜像或者是直接pull下来的镜像能被称为顶层镜像(top-level),并且每一个顶层镜像下面都影藏了多个镜像层
 
Docker概念(二)_第18张图片
 
7)docker images -a
 
Docker概念(二)_第19张图片
 
docker iamges -a命令列出了所有的镜像,列出了所有的可读层,查看某一个image-id下的所有层,可使用docker history image-id来查看
 
Docker概念(二)_第20张图片
 
8)docker stop
 
Docker概念(二)_第21张图片
 
 docker stop命令会向运行中的容器发送一个SIGTERM信号,然后停止所有进程
 
9)docker skill
 
Docker概念(二)_第22张图片
 
docker kill 命令向所有运行在容器中的进程发送一个不友好的SIGKILL信号
 
10)docker pause
 
Docker概念(二)_第23张图片
 
docker stop和docker kill 命令会发送UNIX的信号给运行中的进程。docker pause用cgroups的特性将运行中的进程空间暂停
 
11)docker rm
 
Docker概念(二)_第24张图片
 
docker rm命令会移除构成容器的可读写层,这个命令只能对非运行态容器执行
 
11)docker rmi
 
Docker概念(二)_第25张图片
 
docker rmi 命令会移除构成镜像的一个只读层。只能够使用docker rmi来移除最顶层(top level layer)也就是镜像,也可以使用-f参数来强制删除中间的只读层
 
12)docker commit
 
Docker概念(二)_第26张图片
 
docker commit命令将容器的可读写层转换成一个只读层,这样把一个容器转换成了不可变的镜像
 
Docker概念(二)_第27张图片
 
 
13)docker build
 
Docker概念(二)_第28张图片
 
Docker概念(二)_第29张图片
 
 
 
build命令根据Dockerfile文件中的FROM指令获取到镜像,然后重复的run、修改、commit。在循环中每一步都会生成一个新的层,因此许多新的层会被创建
 
14)docker exec
 
Docker概念(二)_第30张图片
 
docker exec 命令会在运行中的容器执行一个新进程
 
15)docker inspect or
 
Docker概念(二)_第31张图片
 
docker inspect 命令会提取出容器或者镜像最顶层的元数据
 
16)docker save
 
Docker概念(二)_第32张图片
 
docker save创建一个镜像的压缩文件,这个文件能够在另一个主机的Docker上使用。和export命令不同。save命令为每一个层都保存了它们的元数据,只对镜像生效
 
17)docker export
 
Docker概念(二)_第33张图片
 
docker export创建一个tar文件,并且移除了元数据和不必要的层,将多个层整合成一个层,只保存当前统一视角看到的内容。export后的容器再import到Docker中,通过docker images -tree命令只能看到一个镜像;而save后的镜像不同,他能看到这个镜像的历史镜像
 
18)docker history
 
Docker概念(二)_第34张图片
 
docker history命令递归的输出指定镜像的历史镜像

 

你可能感兴趣的:(Docker概念(二))