Docker Stack 部署web集群的方法步驟
Docker越來(lái)越成熟,功能也越來(lái)越強(qiáng)大。使用Dokcer Stack做服務(wù)集群也是非常的方便,docker自己就提供了負(fù)載功能,感覺(jué)很方便,就想給大家分享一下,做一個(gè)簡(jiǎn)單的教程。
環(huán)境
我是用了兩臺(tái)centos7的虛擬機(jī)來(lái)做這個(gè)教程他們的ip分別是
主服務(wù)器:192.168.0.105 // 也是私有倉(cāng)庫(kù)服務(wù)器 服務(wù)器2: 192.168.0.49
這篇帖子中所有的代碼 github地址:https://github.com/lpxxn/godockerswarm
設(shè)置Docker Swarm
我以192.168.0.105做為主服務(wù)器,在他上面開(kāi)啟swarm
docker swarm init
執(zhí)行命令后會(huì)給出加入這個(gè)swarm的命令

在192.168.0.49上執(zhí)行命令加入swarm
docker swarm join --token SWMTKN-1-425vswwmb8o34uhnmo58w0k4rfzs5okjtye7mokpqps1vl9ymq-0p6pr2gua7l8a6udb67tfndoo 192.168.0.105:2377

這樣我們就建好了swarm,兩臺(tái)主機(jī)現(xiàn)在建立好了關(guān)系。
web服務(wù)
web服務(wù)是用go語(yǔ)言寫一個(gè)簡(jiǎn)單的接口,返回主機(jī)的名稱:這樣方便我們查看是否有負(fù)載
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文件:
執(zhí)行的意思就是基于golang境像,把代碼復(fù)制到相應(yīng)文件夾,暴露出端口,運(yùn)行程序。簡(jiǎn)單吧
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 文件所在的文件夾

在這個(gè)目錄下執(zhí)行docker build命令:
docker build . -t goweb:1.0

你可以運(yùn)行一下新生成的鏡像
docker run -p 8100:8000 7a7e3

鏡像提交到私有倉(cāng)庫(kù)
關(guān)于如何搭建私有倉(cāng)庫(kù)服務(wù)器我這里的就多說(shuō)了,可以去我之前的帖子看一下
地址:http://m.fzitv.net/article/156168.htm
因?yàn)榧旱纳蠙C(jī)器是自動(dòng)從倉(cāng)庫(kù)取鏡像然后再運(yùn)行程序,所以需要將我們上面生成的鏡像推送到我們的私有倉(cāng)庫(kù)上去。我自己搭建的
使用tag重新命名
docker tag goweb:1.0 lpxxn.com:5000/goweb:1.0

推送
docker push lpxxn.com:5000/goweb:1.0

docker-compose文件
接下來(lái)創(chuàng)建docker-compose.yml文件
image就是我們上面創(chuàng)建好的鏡像。運(yùn)行5個(gè)應(yīng)用程序,docker會(huì)自己做負(fù)載,端口映射8111,失敗時(shí)自動(dòng)重啟服務(wù),并且創(chuàng)建了自己的網(wǎng)絡(luò),當(dāng)有多個(gè)server服務(wù)時(shí)這個(gè)非常有用。
里面的具體參數(shù),大家可以看官方教程:
https://docs.docker.com/compose/compose-file/
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:
部署應(yīng)用
到了最后的階段了,部屬一樣很簡(jiǎn)單,執(zhí)行deploy命令
docker stack deploy -c docker-compose.yml mygoweb

查看啟動(dòng)的服務(wù)
docker service ps mygoweb


測(cè)試服務(wù)
看這些返回的主機(jī)名:不一樣吧。docker為我們做了負(fù)載了。

這篇帖子中所有的代碼github地址:https://github.com/lpxxn/godockerswarm
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
三款Docker圖形化工具優(yōu)缺點(diǎn)對(duì)比
大家好,本篇文章主要講的是三款Docker圖形化工具優(yōu)缺點(diǎn)對(duì)比,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下2022-01-01
Docker創(chuàng)建openresty容器的實(shí)現(xiàn)步驟
OpenResty可以用來(lái)構(gòu)建高性能的Web應(yīng)用和服務(wù),本文主要介紹了Docker創(chuàng)建openresty容器的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-03-03
Docker部署rabbitmq遇到的兩個(gè)問(wèn)題
當(dāng)使用docker部署rabbitmq時(shí)遇到兩個(gè)問(wèn)題,訪問(wèn)交換機(jī)時(shí)報(bào)錯(cuò),另一種是訪問(wèn)channel時(shí)報(bào)錯(cuò),本文給大家分享解決方案,感興趣的朋友跟隨小編一起看看吧2021-07-07
詳解docker pull 下來(lái)的鏡像都存到了哪里
這篇文章主要介紹了詳解docker pull 下來(lái)的鏡像都存到了哪里,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
使用Docker安裝部署MySQL和Redis的詳細(xì)過(guò)程
這篇文章主要介紹了使用Docker安裝部署MySQL和Redis,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
基于Harbor構(gòu)建docker私有倉(cāng)庫(kù)的方法
這篇文章主要介紹了Harbor構(gòu)建docker私有倉(cāng)庫(kù)的問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12

