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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM