在一个分布式应用中,咱们把应用的不一样层叫作“Services”。好比,一个视频共享应用,它包含存储数据到数据库的服务,用户上载后后台进行的视频解码服务,前端服务等等。前端
然而,一个服务只能在一个镜像中运行,这使得一个分布式应用可能会产生冲突,好比,端口冲突,容器复用等等。因此,docker-compose.yml文件应运而生。web
一 、运行docker-compose.yml文件来创新一个servicedocker
前提数据库
1,将本地要运行的某个容器镜像上传至本身的的docker仓库浏览器
如,我想要运行一个web服务,首先生成本身的web容器,该容器生成方法参照个人上一篇文章,而后给friendlyhello镜像打个标签app
(标签名字得跟仓库中的用户名和路径一致,通常格式”usrname/path:tag”)如图curl
即上述操做完成了镜像上传。分布式
2,接下来就是利用docker-compose文件建立一个web服务url
将上述文件保存为docker-compose.yml,即在当前目录下含有spa
而后在当前目录下运行docker swarm init 将该机器配置成服务的管理者,
再运行docker stack deploy -c docker-compose.yml getstartedlab(其中getstartedlab是你给你的app服务取的名字,运行成功后,经过docker service ls 命令查看服务是否创建起来,而后打开浏览器链接到localhost查看咱们的app服务的输出,或者运行curl -4 http://localhost 查看输出。
至此一个app服务已经创建好了。
3,扩展app服务
你能够反复修改你的docker-compose.yml文件,并运行命令docker stack deploy -c docker-compose.yml getstartedlab来扩展你的app服务。
4,卸载app服务和swarm
docker stack rm getstartedlab
docker swarm leave --force
2、理解Swarm集群
一个swarm是一组运行docker的机器并加入到集群中。在集群中,swarm管理者来执行机器中的命令,这些机器能够是物理的或者虚拟的,也被称做节点。
3、Swarm管理者的运行容器的调度策略
1,最大限度的利用每一个机器
即每一个机器很可能运行足够多的容器,当当前机器不足以知足调度队列中下一个容器所需资源时才更换另外一个机器。
2,每一个机器至少运行一个特定容器
即查询调度队列中容器数量,尽量保证每一个机器上都至少运行一个特定容器。
一个swarm集群有一个管理者和多个工做者,其中管理者可以认证其余机器来参与集群中的工做,工做者只提供工做能力而不具有认证其余机器的权限。
具体实现思路请参照个人下一篇文章,欢迎读者留下爪印共同探讨。本文参考了docker官网文件https://docs.docker.com/。