要了解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 hours ago 150MB
weilu2/myrep demo1 a0a4a49f2713 hours ago 150MB
python 2.7-slim a15e375b7949 hours ago 138MB
hello-world latest 05a3bd381fc2 weeks ago .84kB
dockersamples/visualizer <none> 8dbf7c60cf88 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" hours ago Up hours /tcp stlab_visualizer..fg2b1hqvnj2mq3m9w45yuz6kn
bf9303546953 weilu2/myrep:demo1 "python app.py" hours ago Up hours /tcp stlab_web..0h9g8d449c63uz06gf3ugcy21
16fb0dea04cb weilu2/myrep:demo1 "python app.py" hours ago Up hours /tcp stlab_web..hkpsnerqii2kgp880ln5l1n8v

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

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

可以使用命令查看Service:

docker service ls

结果:

ID                  NAME                MODE                REPLICAS            IMAGE                             PORTS
thz266xdqokf stlab_visualizer replicated / dockersamples/visualizer:stable *:->/tcp
agqm6iq2jtlu stlab_web replicated / weilu2/myrep:demo1 *:->/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- Ready Active Leader
yn8btfa3qvcozwcneh15hh9ju centos7- Ready Active

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

Stack

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

可以使用命令查看stack:

docker stack ls

结果:

NAME                SERVICES
stlab

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

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

docker stack services stlab

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

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

Task

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

docker stack ps stlab

结果:

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

最新文章

  1. ES6+ 现在就用系列(二):let 命令
  2. 转:判断DATASET是否为空
  3. Android--手持PDA读取SD卡中文件
  4. 移动APP 中文输入法下的搜索优化
  5. Linux高级变量
  6. hdu 4856 Tunnels (bfs + 状压dp)
  7. 基于React服务器端渲染的博客系统
  8. Android Activity 生命周期详解
  9. CSS中IE8和chrom像素百分比计算差异
  10. (转载)TRS的WCM6漏洞权限绕过以及绕过密码的登陆方式
  11. struts2的配置和使用
  12. 【APP UI 设计模式】(一)APP UI 设计原则和流程
  13. mysql允许远程连接授权方法
  14. ISAPI和CGI限制中没有ASP.NET v4.0
  15. Java实现对文本文件MD5加密并ftp传送到远程主机目录
  16. 《java程序设计》结对编程-四则运算整体总结
  17. 【SpringCloud微服务实战学习系列】服务治理Spring Cloud Eureka
  18. Python之Pandas知识点
  19. PAT甲题题解-1048. Find Coins (25)-水
  20. man命令使用

热门文章

  1. vue事件处理机制
  2. js中——限制文本框输入非数字
  3. 《python解释器源码剖析》第7章--python中的set对象
  4. 下拉菜单 Spinner 简单纯字符串版
  5. python3之POST请求URL
  6. cubase 的 CC控制器使用
  7. want
  8. 安装Angulr CLI
  9. BBS-添加文章及文章中图片
  10. MySQL中主键的选择与磁盘性能