Docker学习笔记(十一)

Docker swarm,提供集群服务,相比于多个服务器而言,集群的优势是自动合理的利用服务器资源。

docker swarm init --advertise-addr 192.168.56.101。创建一个docker manager,成功后提示有创建对于manager node和woker node的命令。如果忘记,可以使用docker swarm join-token worker查看。

在对应host上添加node,相当于给集群添加服务器。

 

在添加node时遇到错误,是CA证书认证过期错误,解决方法:apt install ntp && ntpdate time.nist.gov

 

部署一个服务,docker service create --name web_server httpd。命令形式很想docker run,--name 为服务命名,httpd是镜像名字。
通过docker service ls,查看服务状态,PERLICS显示运行数和期待数。
docker service ps (服务名),检查某个服务在集群上的状态。可以具体知道该服务都分布在哪些node上。
如果需要将服务个数增多(伸缩),docker service scale web_server=5命令非常快捷。
如果manager-node,不希望被分配服务运行,docker node update --availability drain (manager名字),可以将node设置为drain。
当host状态发生变化,集群运行服务要求不变时,集群内部会进行调整服务,通过doceker service ps可以查看服务的具体情况。对于host shutdown时,这个特性非常有用。

docker service create创建时,可以使用参数-replicas=2配置同时创建多个副本。
创建的服务是bridge形式的网络,但是服务没有暴露给外网。
如果需要外界访问服务,则需要docker service update --publish-add 8080:80 web_server,更新服务的端口映射,这样外网就可以访问服务了。

并且由于service是以集群的方式提供服务,所以我们请求集群的每个节点,都可以获得相同的服务内容。这个功能归功于routing mesh的作用。
因为--publish-add的时候,所以副本都重新进行了配置,通过docker network ls查看,ingress网络和docker_gwbridge网络,分别不同主机之间的通信和容器与外网的通信。

由于service之间通信的需求,如果将所以service都publish到外网,那么对于数据库等服务来说是非常不安全的了。这样我们就需要另一种机制来实现服务和服务之间的通信。

服务发现:通过简单的方式让service访问另一个service;service的IP变动不会影响访问该service的其他service;service副本数的变动不会影响访问该service的其他service.

服务发现借助于overlay网络,所以我们先创建网络docker network create --driver overlay myapp_net
部署service,并且将其挂载到该overlay网络上,docker service create --name util --network myapp_net busybox sleep 10000000


posted @ 2017-12-28 14:31  FlyerS  阅读(393)  评论(0)    收藏  举报