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

閱讀原文

本文爲雲棲社區原創內容,未經容許不得轉載。

相關文章
相關標籤/搜索