Docker 1.12.1实践操作记录
Docker swarm 容器    2017-03-26 21:24:06    769   
lightingfire   Docker swarm 容器

早就知道docker1.12有很大的改变,仰慕也是很久了,十一期间,抽了点时间(其他时间都在玩)根据官方文档试了下,还是挺好玩的,很多功能也很实用(服务发现、自动伸缩等),下面就是我的操作步奏,大家一起来看看

首先,开放如下端口:

TCP 2377 集群管理节点通信的端口

TCP & UDP 7946 集群节点通信的端口

TCP & UDP 4789 overlay 网络通信端口

  1. firewall-cmd --permanent --add-port={2377/tcp,2377/udp,7946/tcp,7946/udp,4789/tcp,4789/udp}
  2. firewall-cmd --reload
  3. firewall-cmd --list-all

启动集群

  1. # 主节点
  2. docker swarm init --advertise-addr 192.168.11.33
  3. # 子节点
  4. docker swarm join \
  5. --token SWMTKN-1-51w1r44gg7n392k4eti1i52zrbhwjwkmmqoe2zugtur483rdyb-9yb9ucnj23xc0k49sh7cddge3 \
  6. 192.168.11.33:2377

在swarm中部署一个服务

  1. # 创建服务
  2. docker service create --replicas 1 --name helloworld alpine ping docker.com
  3. # 查看服务
  4. docker service ls
  5. # 使用inspect查看服务
  6. docker service inspect --pretty helloworld
  7. # 使用inspect查看服务的详细信息
  8. docker service inspect helloworld
  9. # 查看服务在各个节点上运行的信息
  10. docker service ps helloworld

在swarm中均衡服务

  1. # 将helloworld节点拓展到5个
  2. docker service scale helloworld=5
  3. # 查看服务在节点上的运行信息
  4. docker service ps helloworld

删除swarm中的服务

  1. # 删除服务
  2. docker service rm helloworld
  3. # 查询服务状态
  4. docker service ps helloworld
  5. # 或者
  6. docker service inspect helloworld

滚动更新swarm中的服务

–update-delay 表示延迟多少时间更新,1s表示1秒,1m表示1分钟,1h表示一小时,10m30s表示10分30秒
–replicas 3 表示3份服务

  1. # 启动服务
  2. docker service create --replicas 3 --name redis --update-delay 10s redis:3.2.3-alpine
  3. # 查看服务
  4. docker service inspect --pretty redis
  5. docker service ps redis
  6. # 更新服务
  7. docker service update --image redis:3.2.4-alpine redis
  8. # 查看服务状态
  9. docker service ps redis
  10. ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
  11. bfwxlnus32ujz14kinwh72ahy redis.1 redis:3.2.4-alpine node-34 Running Running 5 minutes ago
  12. 3esh91crtjqbwwc07ym3jnvt6 \_ redis.1 redis:3.2.3-alpine node-34 Shutdown Shutdown 5 minutes ago
  13. 59mrs5b2ezx4e507l9o2o9fju redis.2 redis:3.2.4-alpine node-34 Running Running 5 minutes ago
  14. 6g742e4innpgkd7cmengbhrfv \_ redis.2 redis:3.2.3-alpine node-33 Shutdown Shutdown 5 minutes ago
  15. cosw8s7bzaa4uqkryhzoegv43 redis.3 redis:3.2.4-alpine node-33 Running Running 4 minutes ago
  16. cecz63fox72359hye54in7vco \_ redis.3 redis:3.2.3-alpine node-33 Shutdown Shutdown 4 minutes ago
  17. # 删除服务
  18. docker service rm redis

排除一个节点

  1. # 启动服务
  2. docker service create --replicas 3 --name redis --update-delay 10s redis:3.2.3-alpine
  3. # drain启动服务
  4. docker node update --availability drain node-34
  5. # 查看服务状态
  6. docker service ps redis
  7. ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
  8. cemacmh9s21nojcbhrrsheksx redis.1 redis:3.2.3-alpine node-33 Running Preparing 7 seconds ago
  9. ae3z7j70914ul8xk1m3fxlzc3 \_ redis.1 redis:3.2.3-alpine node-34 Shutdown Shutdown 5 seconds ago
  10. 5436gxjv0kuvua7spf4y8beg0 redis.2 redis:3.2.3-alpine node-33 Running Running 7 minutes ago
  11. aublwl8ma1htydcffai73no66 redis.3 redis:3.2.3-alpine node-33 Running Running 7 minutes ago
  12. # 查看node-34的节点状态
  13. docker node inspect --pretty node-34
  14. ID: 41plo41mur0ec50agvh2pfswa
  15. Hostname: node-34
  16. Joined at: 2016-10-02 07:53:32.92200565 +0000 utc
  17. Status:
  18. State: Ready
  19. Availability: Drain
  20. Platform:
  21. Operating System: linux
  22. Architecture: x86_64
  23. Resources:
  24. CPUs: 1
  25. Memory: 977.9 MiB
  26. Plugins:
  27. Network: bridge, host, null, overlay
  28. Volume: local
  29. Engine Version: 1.12.1
  30. # 恢复节点
  31. docker node update --availability active node-34
  32. # 查看节点状态
  33. docker service ps redis
  34. ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR
  35. cemacmh9s21nojcbhrrsheksx redis.1 redis:3.2.3-alpine node-33 Running Running 7 minutes ago
  36. ae3z7j70914ul8xk1m3fxlzc3 \_ redis.1 redis:3.2.3-alpine node-34 Shutdown Shutdown 8 minutes ago
  37. 5436gxjv0kuvua7spf4y8beg0 redis.2 redis:3.2.3-alpine node-33 Running Running 15 minutes ago
  38. aublwl8ma1htydcffai73no66 redis.3 redis:3.2.3-alpine node-33 Running Running 15 minutes ago

总结(摘自《Docker 1.12迎来内置编排机制》

  1. 简单但强大:编排可谓现代分布式应用的核心所在;其如此重要,意味着我们必须以无缝化方式将其内置于核心Docker Engine当中。我们的编排方案遵循了容器设计理念,即无设置过程、只需学习少数简单概念且提供“还算不错”的使用体验。
  2. 弹性:设备时刻可能发生故障。对于现代系统而言,采用无单点故障设计以确保故障出现时不会导致应用停机已经成为一种必要。
  3. 安全性:安全性又是另一项默认要求。一切可能有碍安全性的因素,包括证书生成以及了解PKI等,都需要被移除。不过高级用户仍然能够从细处着手,更为全面地实现控制与审计。
  4. 可选功能与向下兼容性:作为拥有数百万用户的解决方案,向下兼容性是Docker Engine必须具备的能力。所有新功能以可选方式提供,大家可根据需要选择并为其分配对应的日常运行资源(内存与CPU等)。Docker Engine内的编排机制就像是我们这套平台内置的电池,但允许用户随意更换为使用其它第三方编排方案。

by 刘迎光@萤火虫工作室
OpenBI交流群:495266201
MicroService 微服务交流群:217722918
mail: liuyg#liuyingguang.cn
博主首页(==防止爬虫==):http://blog.liuyingguang.cn
OpenBI问答社区:http://openbi.liuyingguang.cn/

Pre: CentOS7 设置docker 的Storage Driver为overlay

Next: K8S对node添加label,并根据label筛选节点