摘要:本文會(huì)通過三個(gè)簡(jiǎn)單的,演示如何通過部署集群。首先創(chuàng)建集群然后部署集群查看集群運(yùn)行情況然后查看容器運(yùn)行情況可以看到當(dāng)前有個(gè)容器在運(yùn)行,一個(gè)容器,五個(gè)容器。
本文會(huì)通過三個(gè)簡(jiǎn)單的demo,演示如何通過docker部署node集群。
如果想學(xué)習(xí)docker,官方文檔是一個(gè)不錯(cuò)的入門指引,或者可以看這個(gè)gitbook。
一、部署node容器
首先準(zhǔn)備一個(gè)node服務(wù)demo,代碼如下:
const Koa = require("koa"); const app = new Koa(); app.use(async ctx => { ctx.body = "Hello World"; }); app.listen(8080);
部署node服務(wù)
制作自己的node服務(wù)鏡像,最簡(jiǎn)單的方式就是基于已有的node鏡像,在此基礎(chǔ)上,添加自己的內(nèi)容,可以通過Dockerfile描述自己的node鏡像,內(nèi)容如下:
FROM node:8.9.1 # 復(fù)制當(dāng)前代碼到指定目錄下 ADD . /home/app WORKDIR /home/app RUN npm install EXPOSE 8080 CMD ["npm", "run", "dev"]
有了鏡像文件之后,可以通過docker build構(gòu)建鏡像:
docker build -t node-demo . # -t 表示定義鏡像名
查看當(dāng)前構(gòu)建的鏡像:
docker images
通過鏡像運(yùn)行容器:
docker run -d -p 8080:8080 node-demo # -d 表示后臺(tái)運(yùn)行
查看運(yùn)行中容器信息:
docker ps
查看容器運(yùn)行日志:
docker logs xxx # xxx 為容器id
暫停容器:
docker container stop xxx
因?yàn)殓R像底層是一個(gè)linux鏡像,所以可以連接上容器bash:
docker exec -i -t xxx bash
二、部署node、redis服務(wù)
在第一步代碼的基礎(chǔ)上,我們使用node連接一個(gè)redis,模擬一個(gè)訪客計(jì)數(shù)的功能,修改后的node代碼如下:
const Koa = require("koa"); const bluebird = require("bluebird"); const redis = require("redis"); bluebird.promisifyAll(redis.RedisClient.prototype); bluebird.promisifyAll(redis.Multi.prototype); const app = new Koa(); // 注意這里的host被指定為 redis,這是docker compose提供的功能 let host = "redis"; let port = "6379"; let client = redis.createClient({ host, port }); app.use(async ctx => { if (ctx.path == "/incr") { let num = await client.getAsync("num"); num++; client.set("num", num, redis.print); return ctx.body = `num is ${num}`; } ctx.body = "Hello World"; }); app.listen(8080);
node服務(wù)需要連接redis服務(wù),docker提供了compose工具簡(jiǎn)化了容器間通信,要使用compose功能,需要定義描述文件docker-compose.yml:
version: "3" services: web: build: . ports: - "8080:8080" redis: image: "redis:alpine"
這里描述了兩個(gè)容器web和redis,分別對(duì)應(yīng)node和redis。
然后通過docker-compose啟動(dòng)容器,默認(rèn)如果沒有構(gòu)建鏡像,會(huì)先構(gòu)建或者pull鏡像:
docket-compose up -d
查看容器運(yùn)行情況:
docker-compose ps
暫停容器:
docker-compose stop
三、部署node集群
最后例子是啟動(dòng)多個(gè)node容器,構(gòu)成集群,然后訪問同一個(gè)redis:
利用docker提供的實(shí)例擴(kuò)展,其實(shí)很容易做到,只要修改docker-compose.yml如下:
version: "3" services: web: image: node-demo deploy: replicas: 5 resources: limits: cpus: "0.1" memory: 50M ports: - "8080:8080" redis: image: "redis:alpine"
唯一的區(qū)別就是添加了deploy聲明,指定是node實(shí)例數(shù)量和資源情況。
對(duì)于真正的集群部署,docker提供了swarm功能,swarm功能很強(qiáng)大,可以管理跨機(jī)器部署,這里就只用到最簡(jiǎn)單的實(shí)例擴(kuò)展。
首先創(chuàng)建集群:
docker swarm init
然后部署集群
docker stack deploy -c docker-compose.yml node-swarm
查看集群運(yùn)行情況
docker service ls
然后查看容器運(yùn)行情況
docker container ls
可以看到當(dāng)前有6個(gè)容器在運(yùn)行,一個(gè)redis容器,五個(gè)node容器。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/27171.html
摘要:本文將使用容器使用編排快速部署集群,可用于開發(fā)環(huán)境單機(jī)多實(shí)例或生產(chǎn)環(huán)境部署。在集群每一個(gè)節(jié)點(diǎn)上執(zhí)行安裝使用安裝重啟服務(wù)驗(yàn)證分詞默認(rèn)使用分詞器只能處理英文,中文會(huì)被拆分成一個(gè)個(gè)的漢字,沒有語義。 本文將使用Docker容器(使用docker-compose編排)快速部署Elasticsearch 集群,可用于開發(fā)環(huán)境(單機(jī)多實(shí)例)或生產(chǎn)環(huán)境部署。 注意,6.x版本已經(jīng)不能通過 -Epat...
摘要:其一將用于代理與面向公開的服務(wù)之間的通信。數(shù)據(jù)庫上線并開始運(yùn)行后,我們接下來部署后端?,F(xiàn)在,會(huì)幫助我們完成全部負(fù)載均衡工作。這樣所有來自代理的請(qǐng)求都將指向網(wǎng)絡(luò),并由后者跨越全部實(shí)例執(zhí)行負(fù)載均衡。 七夕大家過得怎么樣?今天數(shù)人云帶大家回歸技術(shù)和干貨。雖然我們能夠在Swarm集群當(dāng)中部署任意數(shù)量的服務(wù),但這并不代表各項(xiàng)服務(wù)全部可為用戶所訪問。而新的Swarm網(wǎng)絡(luò)使得各項(xiàng)服務(wù)之間能夠更為輕松...
摘要:本項(xiàng)目旨在建立基于部署的生產(chǎn)環(huán)境使用的私鏈集群,在盡可能簡(jiǎn)化使用的前提下保留足夠的靈活性,方便業(yè)務(wù)快速組建區(qū)塊鏈私有網(wǎng)絡(luò)集群,并基于此開發(fā)私有區(qū)塊鏈平臺(tái)應(yīng)用。因是高性能輕量級(jí)的程序,一般啟動(dòng)一個(gè)角色的容器即可。啟動(dòng)時(shí)須指定等命令參數(shù)。 項(xiàng)目地址:https://github.com/tabalt/doc...,歡迎Star和參與完善。 本項(xiàng)目旨在建立基于Docker部署的生產(chǎn)環(huán)境使用的...
閱讀 3498·2021-11-18 10:02
閱讀 3749·2021-09-13 10:25
閱讀 1950·2021-07-26 23:38
閱讀 2612·2019-08-30 15:44
閱讀 2311·2019-08-30 13:51
閱讀 1255·2019-08-26 11:35
閱讀 2298·2019-08-26 10:29
閱讀 3474·2019-08-23 14:56