Оглавление:
Карта сайта:
Оглавление:
Карта сайта:
Это старая версия документа!
Для примера развернем сервер на nodejs на нескольких нодах.
Для начала сбилдим образ из репозитория http://webmastermsk.ru:30000/serg/docker-demo-3.git
📁 docker-demo-3 +---Dockerfile \---Dockerfile \---index.js
Dockerfile с nodejs:
FROM node:14-alpine RUN apk add curl WORKDIR /opt/app ADD index.js . CMD ["node", "./index.js"]
сам сервер index.js
const http = require('http'); const { networkInterfaces } = require('os'); const port = 3000; const requestHandler = (request, response) => { const IPs = getIPs(); response.end(JSON.stringify(IPs)); } const server = http.createServer(requestHandler) server.listen(port, (err) => { if (err) { return console.log('Ошибка', err) } console.log(`Сервер запущен на порту ${port}`) }); const getIPs = () => { const nets = networkInterfaces(); const results = {}; for (const name of Object.keys(nets)) { for (const net of nets[name]) { if (net.family === 'IPv4' && !net.internal) { if (!results[name]) { results[name] = []; } results[name].push(net.address); } } } return results; }
vagrant@server3:~$ git clone http://webmastermsk.ru:30000/serg/docker-demo-3.git Cloning into 'docker-demo-3'... remote: Enumerating objects: 18, done. remote: Total 18 (delta 0), reused 0 (delta 0), pack-reused 18 Unpacking objects: 100% (18/18), 5.70 KiB | 233.00 KiB/s, done. vagrant@server3:~$ cd docker-demo-3 vagrant@server3:~/docker-demo-3$ docker build -t localhost:5000/ip:latest . [+] Building 6.0s (9/9) FINISHED docker:default => [internal] load build definition from Dockerfile 0.1s => => transferring dockerfile: 132B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/node:14-alpine 1.3s => CACHED [1/4] FROM docker.io/library/node:14-alpine@sha256:434215b487a329c9e867202ff89e704d3a75e554822e07f3e 0.0s => [internal] load build context 0.0s => => transferring context: 779B 0.0s => [2/4] RUN apk add curl 4.5s => [3/4] WORKDIR /opt/app 0.0s => [4/4] ADD index.js . 0.0s => exporting to image 0.1s => => exporting layers 0.1s => => writing image sha256:fba7632540bebadbd6b336ba39860933632795dba668fa9ed85b51c0a22d5f3d 0.0s => => naming to localhost:5000/ip:latest
vagrant@server3:~/docker-demo-3$ docker push localhost:5000/ip:latest The push refers to repository [localhost:5000/ip] 18cafcc3f78c: Pushed ec5ff2197706: Pushed 31e6ec6c7217: Pushed 31f710dc178f: Mounted from api a599bf3e59b8: Mounted from api e67e8085abae: Mounted from api f1417ff83b31: Mounted from api latest: digest: sha256:f2f8eea3183aff907842979e68d0d077fd38e13b88f465adcd21d099ff58913b size: 1783 vagrant@server3:~/docker-demo-3$ ls
vagrant@server1:~$ docker service create --publish 3000:3000 --name ip --replicas=3 localhost:5000/ip:latest zdjrd1q2k15r24tg5jt0rn3dq overall progress: 3 out of 3 tasks 1/3: running [==================================================>] 2/3: running [==================================================>] 3/3: running [==================================================>] verify: Service converged vagrant@server1:~$ docker service ls ID NAME MODE REPLICAS IMAGE PORTS zdjrd1q2k15r ip replicated 3/3 localhost:5000/ip:latest *:3000->3000/tcp 3srd0mspdl9a registry replicated 1/1 registry:latest *:5000->5000/tcp vagrant@server1:~$ docker service ps ip ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS fuowub8ay4vk ip.1 localhost:5000/ip:latest server5 Running Running 41 seconds ago 9hmorz7kom2t ip.2 localhost:5000/ip:latest server3 Running Running 41 seconds ago booxxr5fhm8m ip.3 localhost:5000/ip:latest server4 Running Running 38 seconds ago
Делаем курловый запрос и смотрим что в ответе каждый раз новый ip адрес
werwolf@werwolf-System-Product-Name:~$ curl localhost:3000 {"eth0":["10.0.0.11"],"eth1":["172.18.0.3"]} werwolf@werwolf-System-Product-Name:~$ curl localhost:3000 {"eth0":["10.0.0.9"],"eth1":["172.18.0.3"]} werwolf@werwolf-System-Product-Name:~$ curl localhost:3000 {"eth0":["10.0.0.10"],"eth1":["172.18.0.3"]} werwolf@werwolf-System-Product-Name:~$ curl localhost:3000 {"eth0":["10.0.0.11"],"eth1":["172.18.0.3"]} werwolf@werwolf-System-Product-Name:~$ curl localhost:3000 {"eth0":["10.0.0.9"],"eth1":["172.18.0.3"]} werwolf@werwolf-System-Product-Name:~$ curl localhost:3000 {"eth0":["10.0.0.10"],"eth1":["172.18.0.3"]} werwolf@werwolf-System-Product-Name:~$