撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>>

上一节中,我们学习了如何搭建一个swarm集群。本节中,我们介绍如何操作service。

service,大家应该不陌生,我们在之前讲过。一个service就对应一个container容器。我们之前使用docker compose时,一个service时部署在一台机器上面的。但是我们在swarm下面,我们创建一个service时,他可能会运行在我们cluster中的任何一个节点中去,下面详细介绍。

docker service 命令

docker service create 有点像docker run

在swarm下面,我们不适用docker run命令来运行容器。docker run表示在本地创建一个container。而service不一定运行在本地。所以在swarm下,一般不用docker run。

我们用创建一个service:

vincent@swarm-manager:~$ docker service create --name demo busybox sh -c "while true; do sleep 3600;done"
lf0wx1k2xz3l88mandyifkdm7
overall progress: 1 out of 1 tasks
1/1: running
verify: Service converged

查看service情况:

vincent@swarm-manager:~$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
lf0wx1k2xz3l        demo                replicated          1/1                 busybox:latest

那么这个service运行在哪个节点上呢?

vincent@swarm-manager:~$ docker service ps demo
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE               ERROR                              PORTS
hkgsjp3dswfh        demo.1              busybox:latest      swarm-worker-1      Ready               Ready 3 seconds ago

说明运行在swarm-worker-1。

MODE replicated表示这个service是可以水平扩展的

如何扩展?

docker service scale demo=5

vincent@swarm-manager:~$ docker service scale demo=5
demo scaled to 5
overall progress: 5 out of 5 tasks
1/5: running
2/5: running
3/5: running
4/5: running
5/5: running
verify: Service converged
vincent@swarm-manager:~$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
lf0wx1k2xz3l        demo                replicated          5/5                 busybox:latest

可以看到成功扩展了5个service。5/5表示:分母表示这个service的scale是多少,分子表示有多少个已经正常启动了。

vincent@swarm-manager:~$ docker service ps demo
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE           ERROR               PORTS
kvngsxo8q1jv        demo.1              busybox:latest      swarm-worker-2      Running             Running 3 minutes ago
w9uw1zoncfki        demo.2              busybox:latest      swarm-worker-1      Running             Running 2 minutes ago
sxsro5dzepjc        demo.3              busybox:latest      swarm-manager       Running             Running 2 minutes ago
klxhs3ec1j6c        demo.4              busybox:latest      swarm-manager       Running             Running 2 minutes ago
yxov6fzvwsyr        demo.5              busybox:latest      swarm-worker-2      Running             Running 2 minutes ago

可以看到有两个service在swarm-worker-2节点上,有两个service在swarm-manager节点上,有一个在swarm-worker-1节点上。

我们去swarm-worker-1验证一下:

vincent@swarm-worker-1:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
f1644c316b53        busybox:latest      "sh -c 'while true; …"   3 minutes ago       Up 3 minutes                            demo.2.w9uw1zoncfkikb1iayit9mdba

有一个container。再去swarm-work-2验证一下:

vincent@swarm-worker-2:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
a0607b0aa4ad        busybox:latest      "sh -c 'while true; …"   4 minutes ago       Up 4 minutes                            demo.5.yxov6fzvwsyrfue8q1redjyx9
9ccc6696214e        busybox:latest      "sh -c 'while true; …"   6 minutes ago       Up 6 minutes                            demo.1.kvngsxo8q1jvd5mv6k9lcvxf1

有两个container。再去swarm-manager验证一下:

vincent@swarm-manager:~$ docker container ls
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
128053167c33        busybox:latest      "sh -c 'while true; …"   5 minutes ago       Up 5 minutes                            demo.4.klxhs3ec1j6cek8914lk5mhdt
dd1dca1864dc        busybox:latest      "sh -c 'while true; …"   5 minutes ago       Up 5 minutes                            demo.3.sxsro5dzepjc0mgs1phzz12ro

有两个container。

将service横向扩展5个以后,一切正常。

如果删除容器,会怎么样?

我们将swarm-worker-2中的一个容器删掉:

vincent@swarm-worker-2:~$ docker rm -f 9ccc6696214e
9ccc6696214e

然后早swarm-maganger上查看:

vincent@swarm-manager:~$ docker service ls
ID                  NAME                MODE                REPLICAS            IMAGE               PORTS
lf0wx1k2xz3l        demo                replicated          5/5                 busybox:latest

发现还是5个。但是这已经不是之前的5个容器了。

vincent@swarm-manager:~$ docker service ps demo
ID                  NAME                IMAGE               NODE                DESIRED STATE       CURRENT STATE            ERROR                         PORTS
vq4lgu31i4bn        demo.1              busybox:latest      swarm-worker-1      Running             Running 3 minutes ago
kvngsxo8q1jv         \_ demo.1          busybox:latest      swarm-worker-2      Shutdown            Failed 3 minutes ago     "task: non-zero exit (137)"
w9uw1zoncfki        demo.2              busybox:latest      swarm-worker-1      Running             Running 10 minutes ago
sxsro5dzepjc        demo.3              busybox:latest      swarm-manager       Running             Running 10 minutes ago
klxhs3ec1j6c        demo.4              busybox:latest      swarm-manager       Running             Running 10 minutes ago
yxov6fzvwsyr        demo.5              busybox:latest      swarm-worker-2      Running             Running 10 minutes ago

可以看到,我们在swarm-worker-2上的一个容器已经shutdown了,但是在swarm-worker-1上重新启动了一个。因此swarm-worker-1上有两个container。

因此,swarm不仅保证可以横向扩展,而且还保证一定数目的有效的。

当swarm发现scale中的部分节点上的service失效,那么他会通过cluster的任一节点上重启一个,达到scale。可以确保系统是有效稳定的。

docker service rm demo

可以删除demo.

vincent@swarm-manager:~$ docker service rm demo
demo

从零开始学习docker(十七)Swarm mode ---service相关推荐

  1. 从零开始学习docker(十五)Swarm mode 介绍

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 一般情况下,我们都在一台机器下部署容器,但实际情况下,应用如果只在一台机器上无法满足我们的需求,包含的容器比较多 ...

  2. [297]从零开始学习Docker

    这篇文章是我学习 Docker 的记录,大部分内容摘抄自 <<Docker - 从入门到实践>> 一书,并非本人原创. 学习过程中整理成适合我自己的笔记,其中也包含了我自己的实 ...

  3. 从零开始学习docker(二十一)service管理

    本节我们介绍如何以方便的方式管理service. 我们之前提到docker-compose,适用于本地开发,可以在本机部署,提供了很大的便利.而swarm是一个cluster,可不可以通过docker ...

  4. 从零开始学习docker(十九)Swarm mode 集群服务间通信--RoutingMesh

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 在上一节中,我们介绍了通过service create部署了wordpress和mysql,我们发现了几个问题: ...

  5. 从零开始学习docker(十八)Swarm mode 部署wordpress

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 本次我们部署一个稍微负复杂的application--wordpress. 之前我们使用docker run分别 ...

  6. 从零开始学习docker(十六)Swarm mode 创建集群

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 这一节我们介绍如何搭建一个三节点的swarm集群.安装docker的同时,swarm已经内置了.所以不需要额外安 ...

  7. 从零开始学习docker(二十)RoutingMesh--Ingress负载均衡

    我们知道容器之间的通信,例如上图中的10.0.9.3与10.0.9.5通信是通过overlay网络,是通过一个VXLAN tannel来实现的. 但是service和service之间通信是通过VIP ...

  8. 从零开始学习docker(十三)Docker Compose--scale

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 环境准备,上一节中的flask-redis项目,将项目启动: docker-compose up -d Star ...

  9. 从零开始学习docker(十二)介绍Docker Compose基本使用

    撸了今年阿里.头条和美团的面试,我有一个重要发现.......>>> 默认情况下在mac或者Windows安装docker的时候会自动安装docker-compose.对于Linux ...

最新文章

  1. HTML 表单(form) 使用详解
  2. python_魔法方法(六):迭代器和生成器
  3. 众望所归!中国机器狗能【后空翻】了。。。
  4. 机器学习面试--决策树
  5. 微信小程序 访问locolhost_微信小程序开发——本地调试
  6. web-----简单小游戏项目
  7. comsol仿真模型:风力发电机复合材料叶片的应力和模态分析
  8. 微信小程序开发之组件view,scroll-view,swiper,text,rich-text,button,image,navigator
  9. php重构求圆柱圆锥的体积,六年级数学下册2.8 圆锥的体积教案 (新版)苏教版...
  10. Android Studio 设置背景色、修改前进后退快捷键
  11. 星巴克急了,瑞幸就稳了?
  12. memcached 源码分析
  13. 3238: [Ahoi2013]差异
  14. js将php时间戳转换成格式化日期
  15. python疲劳检测代码_【君奉天|开发日记】疲劳驾驶检测
  16. 计算机在英语写作中应用,计算机技术在英语写作教学中的应用研究
  17. Matlab一元一次函数拟合及显著性检验
  18. Golang实现并发版网络爬虫:豆瓣-电影名人数评分爬取并保存文件
  19. Android图片的三级缓存
  20. AE/PR脚本模板-110个可爱卡通手绘涂鸦图形动画预设

热门文章

  1. RequiredFieldValidator 根据group组来触发验证
  2. python与java、php、go的优势对比
  3. php如何获取上传文件的后缀?
  4. mysql 数据库存储表情
  5. 优化案例 | CASE WHEN进行SQL改写优化
  6. cad蜂鸟工具_蜂鸟视图地图数据中台,全面提升商业地产的可视化信息管控
  7. 压缩比13为什么建议用92的油_92号和95号汽油,哪个更耐烧?车主:欢迎入坑
  8. 数字旅游解决方案_迪庆州首个数字旅游小镇5G基站在巴拉格宗开通
  9. .net 把一个对象赋值给一个参数_Java:new一个对象的过程中发生了什么?
  10. basler相机 ip linux,Linux环境中连接Basler相机(Pylon软件的安装),ROS环境中连接Basler相机...