Docker Stack 部署web集群

Docker愈来愈成熟,功能也愈来愈强大。使用Dokcer Stack作服务集群也是很是的方便,docker 本身就提供了负载功能,感受很方便,就想给你们分享一下,作一个简单的教程。html

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

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

  这篇帖子中全部的代码 github地址:https://github.com/lpxxn/godo...golang

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

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

clipboard.png

  在192.168.0.49上执行命令加入swarmcentos

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

clipboard.png

  这样咱们就建好了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 文件所在的文件夹

clipboard.png

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

docker build . -t goweb:1.0

clipboard.png

你能够运行一下新生成的镜像

docker run -p 8100:8000 7a7e3

clipboard.png

镜像提交到私有仓库
关于如何搭建私有仓库服务器我这里的就多说了,能够去我以前的帖子看一下

  地址1:http://www.cnblogs.com/li-pen...

  地址2:https://yq.aliyun.com/article...

  也能够用harbor本身搭建,这个我尚未作过教程,有时间再写。

由于集群的上机器是自动从仓库取镜像而后再运行程序,因此须要将咱们上面生成的镜像推送到咱们的私有仓库上去。我本身搭建的

使用tag从新命名

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

clipboard.png

推送

docker push lpxxn.com:5000/goweb:1.0

clipboard.png

docker-compose 文件
  接下来建立docker-compose.yml文件

image 就是咱们上面建立好的镜像。运行5个应用程序,docker 会本身作负载,端口映射8111,失败时自动重启服务,而且建立了本身的网络,当有多个server服务时这个很是有用。

里面的具体参数,你们能够看官方教程:

https://docs.docker.com/compo...

复制代码
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

clipboard.png

查看启动的服务

docker service ps mygoweb

clipboard.png

测试服务
看这些返回的主机名:不同吧。docker 为咱们作了负载了。

clipboard.png

本文做者:lpxxn

阅读原文

本文为云栖社区原创内容,未经容许不得转载。

相关文章
相关标签/搜索