本篇內(nèi)容主要講解“怎么設(shè)置Docker Swarm”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么設(shè)置Docker Swarm”吧!
成都創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的張店網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
我是用了兩臺(tái)centos7的虛擬機(jī)來做這個(gè)教程他們的ip分別是
主服務(wù)器:192.168.0.105 // 也是私有倉(cāng)庫(kù)服務(wù)器 服務(wù)器2: 192.168.0.49
這篇帖子中demo代碼 github地址:demo 代碼
我以192.168.0.105做為主服務(wù)器,在他上面開啟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ù)是用go語言寫一個(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)) }
看一下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 文件所在的文件夾
你可以運(yùn)行一下新生成的鏡像
docker run -p 8100:8000 7a7e3
關(guān)于如何搭建私有倉(cāng)庫(kù)服務(wù)器我這里的就多說了,可以去我之前的帖子看一下
地址1:http://www.cnblogs.com/li-peng/p/6511331.html
地址2:https://yq.aliyun.com/articles/303216?spm=5176.8091938.0.0.2ce387dadknIQu
也可以用harbor自己搭建,這個(gè)我還沒有做過教程,有時(shí)間再寫。
因?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
接下來創(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/#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:
部署應(yīng)用
到了最后的階段了,部屬一樣很簡(jiǎn)單,執(zhí)行deploy命令, 在兩個(gè)IP 上創(chuàng)建好鏡像,然后再manager上運(yùn)行如下指令即可
docker stack deploy -c docker-compose.yml mygoweb
docker service ls 查看service docker service rm service_id 刪除service docker service ps myflask_web 查看service docker node ls 查看節(jié)點(diǎn)
查看啟動(dòng)的服務(wù)
docker service ps mygoweb_web
看這些返回的主機(jī)名:不一樣吧。docker 為我們做了負(fù)載了。
===========================================================================
1.創(chuàng)建dockerfile
FROM python:3.6-alpine COPY . /code WORKDIR /code RUN pip install redis flask
app.py
from flask import Flask from redis import Redis app = Flask(__name__) i = 1 @app.route('/') def hello(): global i count = i i += 1 return 'Hello World! 該頁(yè)面已被訪問 {} 次。\n'.format(count) if __name__ == "__main__": app.run(host="0.0.0.0", debug=True,port=5000)
建立好image
docker build -t app:v1 .
創(chuàng)建集群
manager IP: 192.168.0.105 主服務(wù)器manager: docker swarm init --advertise-addr 192.168.0.105 worker: docker swarm join --token SWMTKN-1-425vswwmb8o34uhnmo58w0k4rfzs5okjtye7mokpqps1vl9ymq-0p6pr2gua7l8a6udb67tfndoo 192.168.0.105:2377 這樣我們就建好了swarm,兩臺(tái)主機(jī)現(xiàn)在建立好了關(guān)系
docker-compose.yml
version: '3' services: web: image: app:v1 ports: - "5555:5000" deploy: replicas: 2 command: python /code/app.py
docker stack deploy -c docker-compose.yml myflask 如果你用swarm 連接2 個(gè)機(jī)器,那么 在manager上運(yùn)行該語句即可,會(huì)自動(dòng)進(jìn)行分布式部署跟運(yùn)行的創(chuàng)建。
到此,相信大家對(duì)“怎么設(shè)置Docker Swarm”有了更深的了解,不妨來實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!