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
在192.168.0.49上執行命令加入swarmcentos
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 . /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-pen...
地址2:https://yq.aliyun.com/article...
也能夠用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/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
查看啓動的服務
docker service ps mygoweb
測試服務
看這些返回的主機名:不同吧。docker 爲咱們作了負載了。
本文做者:lpxxn
本文爲雲棲社區原創內容,未經容許不得轉載。