shangban 发表于 2018-9-21 09:21:17

Docker Stack 部署web集群

  Docker越来越成熟,功能也越来越强大。使用Dokcer Stack做服务集群也是非常的方便,docker 自己就提供了负载功能,感觉很方便,就想给大家分享一下,做一个简单的教程。

环境
  我是用了两台centos7的虚拟机来做这个教程他们的ip分别是
  

主服务器:192.168.0.105// 也是私有仓库服务器  
服务器2: 192.168.0.49
  

  这篇帖子中所有的代码 github地址:https://github.com/lpxxn/godockerswarm

设置Docker Swarm
  我以192.168.0.105做为主服务器,在他上面开启swarm
  

docker swarm init  

  执行命令后会给出加入这个swarm的命令

  在192.168.0.49上执行命令加入swarm
  

docker swarm join --token SWMTKN-1-425vswwmb8o34uhnmo58w0k4rfzs5okjtye7mokpqps1vl9ymq-0p6pr2gua7l8a6udb67tfndoo 192.168.0.105:2377  


  这样我们就建好了swarm,两台主机现在建立好了关系。

web服务
  web服务是用go语言写一个简单的接口,返回主机的名称:这样方便我们查看是否有负载
  

package main  

  
import (
  

"fmt"  
"log"
  
"net/http"
  
"os"
  
)
  

  
func main() {
  
http.HandleFunc("/hi", func(w http.ResponseWriter, r *http.Request) {
  
hostName, _ := os.Hostname()
  
fmt.Fprintf(w, "HostName: %s", hostName)
  
})
  

  
log.Fatal(http.ListenAndServe(":8000", nil))
  
}
  


Docker file
  看一下dockerfile 文件:
  执行的意思就是基于golang境像,把代码复制到相应文件夹,暴露出端口,运行程序。简单吧
  

FROM golang  

  
# Copy the current directory contents into the container
  
COPY .
/go/src/github.com/lpxxn/godockerswarm/  

  
WORKDIR
/go/src/github.com/lpxxn/godockerswarm/  

  
RUN go build
  

  
EXPOSE
8000  

  
CMD [
"./godockerswarm"]  

  看一下dockerfile 文件所在的文件夹

  在这个目录下执行docker build 命令:
  

docker build . -t goweb:1.0  


  你可以运行一下新生成的镜像
  

docker run -p 8100:8000 7a7e3  





镜像提交到私有仓库
  关于如何搭建私有仓库服务器我这里的就多说了,可以去我之前的帖子看一下
  地址1:http://www.cnblogs.com/li-peng/p/6511331.html
  地址2:https://yq.aliyun.com/articles/303216?spm=5176.8091938.0.0.2ce387dadknIQu
  也可以用harbor自己搭建,这个我还没有做过教程,有时间再写。
  因为集群的上机器是自动从仓库取镜像然后再运行程序,所以需要将我们上面生成的镜像推送到我们的私有仓库上去。我自己搭建的
  使用tag重新命名
  

docker tag goweb:1.0 lpxxn.com:5000/goweb:1.0  


  推送
  

docker push lpxxn.com:5000/goweb:1.0  



docker-compose 文件
  接下来创建docker-compose.yml文件
  image 就是我们上面创建好的镜像。运行5个应用程序,docker 会自己做负载,端口映射8111,失败时自动重启服务,并且创建了自己的网络,当有多个server服务时这个非常有用。
  里面的具体参数,大家可以看官方教程:
  https://docs.docker.com/compose/compose-file/#dockerfile
  

version: "3"  
services:
  
web:
  
image: lpxxn.com:
5000/goweb:1.0  
deploy:
  
replicas:
5  
resources:
  
limits:
  
cpus:
"0.1"  
memory: 50M
  
restart_policy:
  
condition: on
-failure  
ports:
  

- "8111:8000"  
networks:
  

- gowebnet  
networks:
  
gowebnet:
  


部署应用
  到了最后的阶段了,部属一样很简单,执行deploy命令
  

docker stack deploy -c docker-compose.yml mygoweb  


  查看启动的服务
  

docker service ps mygoweb  




测试服务
  看这些返回的主机名:不一样吧。docker 为我们做了负载了。

  这篇帖子中所有的代码 github地址:https://github.com/lpxxn/godockerswarm
  我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan


页: [1]
查看完整版本: Docker Stack 部署web集群