1.编排swarm简介
学习怎么将docker用于生产环境,前面学的是用于本地测试环境
之前学的是通过docker客户端连接安装好docker的linux机器,如下图

生产环境下机器和容器都非常多,怎么去管理容器?怎么横向扩展?如果容器down了怎么恢复?如何更新容器不影响业务?如何监控容器?如何调度容器的创建?如何保护隐私数据?
swarm是内置于docker的容器编排工具
swarm集群架构图,有manager和worker两种角色
manager至少有两个,内置分布式存储数据库实现数据同步,这里是通过Raft进行数据同步的,不会出现脑裂的情况,最终实现HA
worker之间通过gossip的网络做数据同步
service和replicas,部署nginx的service,实际部署产生三个容器,三个容器通过调度系统,调度到不同的节点
也就是部署时,最初是不知道扩展节点会部署到哪里的,由swarm通过调度算法去算的,看哪个机器目前空闲
服务创建和调度
在swarm manage做决策,决定将worker部署到哪里
2.三节点swarm集群的搭建
准备三台装好docker的机器,这里做一个manager,两个worker
在主节点node01初始化swarm
运行完生成一行命令,子节点加入时,复制这一行代码执行就可以
node02和node03分别作为worker加入
查看当前swarm节点
节点退出swarm集群
快速部署:
地址:https://labs.play-with-docker.com/
执行上面的步骤
3.创建维护Service并扩展
创建service
查看service状态
查看service创建的container的情况
然后在对应节点可以查看进程
将service横向扩展
查看一共有5个demo实例
不同节点查看进程,5个service平均分配到manager和workder
node02中,删除一个容器
删完立刻去主节点查看,少了一个demo实例
主节点查看,会自动恢复
主节点删除service
4.使用DockerStack部署VotingApp
进入之前的/home/voting-example目录,将之前的docker-compose.yml内容删掉
swarm模式编译运行
查看运行状态
查看运行详细情况,多次执行,直到部署好
访问IP:5000是投票的页面
访问IP:5001是查看结果的页面
集群运行状态下,将vote扩展为3个
查看到多了一个实例
停止并删除所有service
5.使用DockerStack部署可视化应用
创建目录
部署服务
查看stack部署情况
浏览器访问任意节点的9001端口
查看stack实例
集群运行状态下,将stack-demo_portainer扩展为3个
浏览器访问任意节点的9001端口,此时stack-demo_portainer变为了3个实例
删除stack实例
6.使用并管理DockerSecret
secret可以是用户名和密码,也可以是SSH key,可以是任何不想让别人看到的数据
docker swarm的架构如下,manager节点有基于raft的内置的分布式存储,是加密后存储的,worker信息也是加密是,也是分布式存储的
随意创建一个文件
创建secret
此时密码已经存储到manager的分布式存储中了
查看secret
也可以从标准输入创建
再次查看secret
删除secret
创建mysql的service
查看进程运行的节点,这里看到是node03运行的
node03中查看进程
node03中交互运行mysql
交互运行时可以查看密码,然后用这个密码登录mysql
7.更新service版本
创建demo网络
查看网络
创建service,可以去dockerHub查看nginx版本
访问80端口,会返回一个欢迎页
在node01写一个脚本,不停访问
在另一个会话,更新service的版本到1.13
node02访问业务,自动切换到新版本
在另一个会话,更新访问端口
node02访问,查看效果