Docker关键概念阐述

要了解Docker需要对其体系结构中的几个关键概念有所了解,主要包括image、container、service、swarm、stack等。

在介绍这几个概念时,会使用到一个测试环境,这个测试环境是一个由一台manager和一台worker构成的swarm,并且在两个node上都部署了weilu2/myrep:demo1这个镜像,只在manager这个node上部署了dockersamples/visualizer这个镜像。

 

Image
Image是一个轻量级的,独立的,可执行的包,其中包含了运行一个程序所必须的所有内容,包括代码,运行环境,类库,环境变量以及配置文件等。

使用命令可以查看所有的image:

docker images

结果:

REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
friendlyhello              latest              a0a4a49f2713        22 hours ago        150MB
weilu2/myrep               demo1               a0a4a49f2713        22 hours ago        150MB
python                     2.7-slim            a15e375b7949        29 hours ago        138MB
hello-world                latest              05a3bd381fc2        7 weeks ago         1.84kB
dockersamples/visualizer   <none>              8dbf7c60cf88        3 months ago        148MB

 

Container
一个container是image的一个运行时实例,当image在内存中执行时就被称为container。

使用命令可以查看所有的container:

docker container ls

结果:

CONTAINER ID        IMAGE                             COMMAND             CREATED             STATUS              PORTS               NAMES
739543688d4b        dockersamples/visualizer:stable   "npm start"         3 hours ago         Up 3 hours          8080/tcp            stlab_visualizer.1.fg2b1hqvnj2mq3m9w45yuz6kn
bf9303546953        weilu2/myrep:demo1                "python app.py"     3 hours ago         Up 3 hours          80/tcp              stlab_web.4.0h9g8d449c63uz06gf3ugcy21
16fb0dea04cb        weilu2/myrep:demo1                "python app.py"     3 hours ago         Up 3 hours          80/tcp              stlab_web.3.hkpsnerqii2kgp880ln5l1n8v

通过观察结果可以发现,image部署在每一个node上就会形成一个container,因此可以理解为container是只在单个node上运行的image。

 

Service
一个服务是指程序其中的一个部分,比如对于一个大型应用来说,文件存储作为一个单独的服务提供使用,一个服务可以包含若干个container,服务的规模是可以伸缩的。

可以使用命令查看Service:

docker service ls

结果:

ID                  NAME                MODE                REPLICAS            IMAGE                             PORTS
thz266xdqokf        stlab_visualizer    replicated          1/1                 dockersamples/visualizer:stable   *:8080->8080/tcp
agqm6iq2jtlu        stlab_web           replicated          5/5                 weilu2/myrep:demo1                *:80->80/tcp

通过对比前面的image、container以及这个service的结果,可以发现其三者之间的关系,一个service实际上是指一个image运行的所有container的总称。不管这个image运行在多少个node上。

 

Swarm

Swarm是指一组运行着docker的机器构成的集群。在一个swarm中包含若干个Node(节点),其中有一个swarm manager节点,作为管理整个swarm的存在,其余还有若干个节点作为worker存在。

一台机器同一时间只能存在于一个swarm中。

 

Node

Swarm中的机器被称为节点,可以使用命令查看:

docker node ls

结果:

ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
w0mk0httmn11nencbmw9yk0xp *   centos7-1           Ready               Active              Leader
yn8btfa3qvcozwcneh15hh9ju     centos7-2           Ready               Active              

其中centos7-1是manager,根据后面的标识可以看出来。管理swarm的所有命令必须在manager这个节点上执行才有效果,包括该条命令。

 

Stack

Stack是指一组共享依赖的相关的服务。

可以使用命令查看stack:

docker stack ls

结果:

NAME                SERVICES
stlab               2

根据这个结果可以看到这个stack中包含两个services,实际上就是上面使用service ls命令查看到的两个service。

使用命令可以查看某个stack下包含的service:

docker stack services stlab

最后一个参数是指stack的名字,结果如下:

ID                  NAME                MODE                REPLICAS            IMAGE                             PORTS
agqm6iq2jtlu        stlab_web           replicated          5/5                 weilu2/myrep:demo1                *:80->80/tcp
thz266xdqokf        stlab_visualizer    replicated          1/1                 dockersamples/visualizer:stable   *:8080->8080/tcp

 

Task

Task是指在service中运行的一个container。可以使用命令查看某个stack下的task:

docker stack ps stlab

结果:

ID                  NAME                     IMAGE                             NODE                DESIRED STATE       CURRENT STATE          ERROR                              PORTS
moi9ubcbq6j9        stlab_web.1              weilu2/myrep:demo1                centos7-2           Running             Running 4 hours ago                                       
fg2b1hqvnj2m        stlab_visualizer.1       dockersamples/visualizer:stable   centos7-1           Running             Running 3 hours ago                                       
pu2ax0o6rq5f         \_ stlab_visualizer.1   dockersamples/visualizer:stable   centos7-1           Shutdown            Rejected 4 hours ago   "No such image: dockersamples/…"   
l6peeaqkufkm        stlab_web.2              weilu2/myrep:demo1                centos7-2           Running             Running 4 hours ago                                       
hkpsnerqii2k        stlab_web.3              weilu2/myrep:demo1                centos7-1           Running             Running 4 hours ago                                       
0h9g8d449c63        stlab_web.4              weilu2/myrep:demo1                centos7-1           Running             Running 4 hours ago                                       
jo9c0fld9foq        stlab_web.5              weilu2/myrep:demo1                centos7-2           Running             Running 4 hours ago          

 

posted @ 2017-11-03 15:07  大肥肥就是我  阅读(868)  评论(0编辑  收藏  举报