Docker Stack 部署web集群的方法步驟
Docker越來越成熟,功能也越來越強(qiáng)大。使用Dokcer Stack做服務(wù)集群也是非常的方便,docker自己就提供了負(fù)載功能,感覺很方便,就想給大家分享一下,做一個簡單的教程。
環(huán)境
我是用了兩臺centos7的虛擬機(jī)來做這個教程他們的ip分別是
主服務(wù)器:192.168.0.105 // 也是私有倉庫服務(wù)器 服務(wù)器2: 192.168.0.49
這篇帖子中所有的代碼 github地址:https://github.com/lpxxn/godockerswarm
設(shè)置Docker Swarm
我以192.168.0.105做為主服務(wù)器,在他上面開啟swarm
docker swarm init
執(zhí)行命令后會給出加入這個swarm的命令
在192.168.0.49上執(zhí)行命令加入swarm
docker swarm join --token SWMTKN-1-425vswwmb8o34uhnmo58w0k4rfzs5okjtye7mokpqps1vl9ymq-0p6pr2gua7l8a6udb67tfndoo 192.168.0.105:2377
這樣我們就建好了swarm,兩臺主機(jī)現(xiàn)在建立好了關(guān)系。
web服務(wù)
web服務(wù)是用go語言寫一個簡單的接口,返回主機(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)行程序。簡單吧
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 文件所在的文件夾
在這個目錄下執(zhí)行docker build命令:
docker build . -t goweb:1.0
你可以運(yùn)行一下新生成的鏡像
docker run -p 8100:8000 7a7e3
鏡像提交到私有倉庫
關(guān)于如何搭建私有倉庫服務(wù)器我這里的就多說了,可以去我之前的帖子看一下
地址:http://www.dbjr.com.cn/article/156168.htm
因?yàn)榧旱纳蠙C(jī)器是自動從倉庫取鏡像然后再運(yùn)行程序,所以需要將我們上面生成的鏡像推送到我們的私有倉庫上去。我自己搭建的
使用tag重新命名
docker tag goweb:1.0 lpxxn.com:5000/goweb:1.0
推送
docker push lpxxn.com:5000/goweb:1.0
docker-compose文件
接下來創(chuàng)建docker-compose.yml文件
image就是我們上面創(chuàng)建好的鏡像。運(yùn)行5個應(yīng)用程序,docker會自己做負(fù)載,端口映射8111,失敗時自動重啟服務(wù),并且創(chuàng)建了自己的網(wǎng)絡(luò),當(dāng)有多個server服務(wù)時這個非常有用。
里面的具體參數(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)用
到了最后的階段了,部屬一樣很簡單,執(zhí)行deploy命令
docker stack deploy -c docker-compose.yml mygoweb
查看啟動的服務(wù)
docker service ps mygoweb
測試服務(wù)
看這些返回的主機(jī)名:不一樣吧。docker為我們做了負(fù)載了。
這篇帖子中所有的代碼github地址:https://github.com/lpxxn/godockerswarm
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Docker數(shù)據(jù)管理(數(shù)據(jù)卷&數(shù)據(jù)卷容器)
容器中管理數(shù)據(jù)主要有兩種方式,這篇文章主要介紹了詳解Docker數(shù)據(jù)管理(數(shù)據(jù)卷&數(shù)據(jù)卷容器) ,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-10-10docker容器內(nèi)要啟動兩個進(jìn)程時Dockerfile的實(shí)現(xiàn)代碼
這篇文章主要介紹了docker容器內(nèi)要啟動兩個進(jìn)程時Dockerfile的實(shí)現(xiàn)代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11解決Mac下 docker 無法 ping 通宿主機(jī)的問題
這篇文章主要介紹了解決Mac下 docker 無法 ping 通宿主機(jī)的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11Docker容器實(shí)戰(zhàn)之鏡像與容器的工作原理
這篇文章主要介紹了Docker容器實(shí)戰(zhàn)之鏡像與容器,關(guān)于鏡像與容器的工作原理,下面文章將詳細(xì)介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-05-05spring-boot構(gòu)建docker鏡像上傳倉庫的示例教程
這篇文章主要介紹了spring-boot構(gòu)建docker鏡像上傳倉庫,受限創(chuàng)建一個簡單spring-boot-web項目,查看鏡像上傳倉庫這時候有兩種解決方案,對docker鏡像上傳倉庫相關(guān)知識感興趣的朋友跟隨小編一起看看吧2022-12-12Docker部署MinIO對象存儲服務(wù)器結(jié)合Cpolar實(shí)現(xiàn)遠(yuǎn)程訪問的操作方法
MinIO是一個開源的軟件,可以免費(fèi)使用,還可以在普通硬件上運(yùn)行,降低了存儲成本,本文介紹在本地Docker中部署MinIO服務(wù),并實(shí)現(xiàn)遠(yuǎn)程訪問管理界面,節(jié)約云服務(wù)器運(yùn)行成本,感興趣的朋友一起看看吧2023-12-12Docker rocketmq部署的實(shí)現(xiàn)示例
最近學(xué)習(xí)使用 rocketmq,需要搭建 rocketmq 服務(wù)端,本文主要記錄 rocketmq 搭建過程以及這個過程踩到的一些坑,感興趣的可以了解一下2021-12-12