Kubernetes Aʻo Mahele 1: Nā noi, Microservices, a me nā pahu
Ma kā mākou noi, ua hana ʻo Habr i kahi hub Kubernetes a hauʻoli mākou e kau i ka puke mua ma loko. Kau inoa!
He maʻalahi ka Kubernetes. No ke aha e uku nui ai nā panakō iaʻu e hana ma kēia wahi, ʻoiai hiki i kekahi ke haku i kēia ʻenehana i loko o kekahi mau hola?
Inā kānalua ʻoe e hiki ke aʻo koke ʻia ʻo Kubernetes, manaʻo wau e hoʻāʻo ʻoe e hana iā ʻoe iho. ʻO ia hoʻi, i ka loaʻa ʻana o kēia mea, hiki iā ʻoe ke holo i kahi noi e pili ana i nā microservices i kahi hui Kubernetes. Hiki iaʻu ke hōʻoiaʻiʻo i kēia, no ka mea ma ke ʻano hana like aʻu e hoʻohana ai ma ʻaneʻi e aʻo ai i kā mākou mea kūʻai aku pehea e hana ai me Kubernetes. He aha ka mea e ʻokoʻa ai kēia alakaʻi mai nā mea ʻē aʻe? ʻOiaʻiʻo, nui nā mea. No laila, hoʻomaka ka hapa nui o kēia mau mea me ka wehewehe ʻana i nā mea maʻalahi - nā manaʻo o Kubernetes a me nā hiʻohiʻona o ke kauoha kubectl. Manaʻo nā mea kākau o kēia mau ʻatikala ua kamaʻāina kā lākou mea heluhelu i ka hoʻomohala noiʻi, microservices, a me nā pahu Docker. E hele mākou ma ke ala ʻē aʻe. ʻO ka mea mua, e kamaʻilio e pili ana i ka holo ʻana i kahi noi e pili ana i nā microservice ma kahi kamepiula. A laila e nānā mākou i ke kūkulu ʻana i nā kiʻi pahu no kēlā me kēia microservice. A ma hope o kēlā, e kamaʻāina mākou me nā Kubernetes a me ka nānā ʻana i ka waiho ʻana o kahi noi e pili ana i nā microservices i loko o kahi pūʻulu i mālama ʻia e Kubernetes.
ʻO kēia ala, me ka hele mālie ʻana i nā Kubernetes, e hāʻawi i ka hohonu o ka hoʻomaopopo ʻana i nā mea e hana nei, pono ia no ka mea maʻamau e hoʻomaopopo i ke ʻano o ka hoʻonohonoho ʻana o nā mea āpau ma Kubernetes. He ʻenehana maʻalahi ʻo Kubernetes, ʻoiai ʻo ka mea makemake e ʻike iā ia e ʻike i kahi a pehea e hoʻohana ʻia ai.
I kēia manawa, me ka ʻole o ka hoʻopaʻapaʻa, e hoʻomaka kāua e hana a kamaʻilio e pili ana i ka noi a mākou e hana pū ai.
polokalamu hoʻokolohua
Hoʻokahi wale nō hana o kā mākou noi. Lawe ʻo ia, ma ke ʻano he hoʻokomo, hoʻokahi ʻōlelo, a ma hope o ia, me ka hoʻohana ʻana i nā mea hana loiloi kikokikona, hana ia i ka nānā ʻana i ka manaʻo o kēia ʻōlelo, e loaʻa ana kahi loiloi o ka manaʻo o ka mea kākau o ka ʻōlelo i kekahi mea.
ʻO kēia ke ʻano o ka puka aniani nui o kēia noi.
Hoʻohana Pūnaewele ʻIke Manaʻo
Mai kahi hiʻohiʻona ʻenehana, aia ka noi i ʻekolu microservices, kēlā me kēia mea e hoʻonā i kekahi mau hana:
ʻO SA-Frontend kahi kikowaena pūnaewele Nginx e lawelawe ana i nā faila static React.
ʻO SA-WebApp kahi palapala noi pūnaewele i kākau ʻia ma Java e lawelawe ana i nā noi mai ke alo.
ʻO SA-Logic kahi noi Python e hana ana i ka nānā ʻana i ka manaʻo kikokikona.
He mea nui e hoʻomaopopo ʻaʻole noho kaʻawale nā microservices. Hoʻokō lākou i ka manaʻo o "ka hoʻokaʻawale ʻana i nā hana", akā, i ka manawa like, pono lākou e launa pū me kekahi.
Ke kahe nei ka ʻikepili i ka noi
Ma ke kiʻikuhi i luna, hiki iā ʻoe ke ʻike i nā pae helu o ka ʻōnaehana, e hōʻike ana i nā kahe ʻikepili i ka noi. E wāwahi kākou iā lākou:
Noi ka polokalamu kele i kahi faila mai ke kikowaena index.html (ʻo ia ka mea e hoʻouka ai i ka pūʻolo app React).
Hoʻopili ka mea hoʻohana me ka noi, ke kumu kēia i kahi kelepona i kahi noi pūnaewele ma muli o Spring.
Hoʻouna ka palapala noi pūnaewele i ka noi e hoʻokaʻawale i ka kikokikona i ka noi Python.
Hoʻopili ka noi Python i ka manaʻo o ka kikokikona a hoʻihoʻi i ka hopena ma ke ʻano he pane i ka noi.
Hoʻouna ka polokalamu Spring i kahi pane i ka noi React (ʻo ia hoʻi, e hōʻike ana i ka hopena o ka kikokikona i hoʻopaʻa ʻia i ka mea hoʻohana).
Hiki ke loaʻa ke code no kēia mau noi āpau maanei. Manaʻo wau e kope ʻoe i kēia waihona iā ʻoe iho i kēia manawa, no ka mea he nui nā hoʻokolohua hoihoi me ia ma mua o mākou.
Ke holo nei i kahi noi e pili ana i nā microservices ma ka mīkini kūloko
I mea e hana ai ka noi, pono mākou e hoʻomaka i nā microservice ʻekolu. E hoʻomaka kākou me ka nani loa o lākou - ka noi mua.
▍ Hoʻonohonoho i ka React no ka hoʻomohala kūloko
No ka holo ʻana i kahi noi React, pono ʻoe e hoʻokomo i ka framework Node.js a me NPM ma kāu kamepiula. Ma hope o ka hoʻokomo ʻana i kēia mau mea a pau, e hoʻohana i ka terminal i ka waihona papahana sa-frontend a holo i kēia kauoha:
npm install
Ma ka hoʻokō ʻana i kēia kauoha ma ka waihona node_modules e hoʻouka ʻia nā mea hilinaʻi o ka noi React, aia nā moʻolelo i loko o ka faila package.json. Ma hope o ka hoʻoiho ʻana i nā mea hilinaʻi ma ka waihona like, e holo i kēia kauoha:
npm start
ʻo ia wale nō. Ke holo nei ka polokalamu React a hiki ke kiʻi ʻia ma ka hoʻokele ʻana i ka helu kelepona localhost:3000. Hiki iā ʻoe ke hoʻololi i kekahi mea ma kāna code. E ʻike koke ʻoe i ka hopena o kēia mau hoʻololi i ka polokalamu kele pūnaewele. Hiki i kēia ke mahalo i ka mea i kapa ʻia he "wela" pani o nā modula. Mahalo i kēia, huli ka hoʻomohala mua i kahi ʻike maʻalahi a leʻaleʻa.
▍Hoʻomākaukau i kahi polokalamu React no ka hana ʻana
No ke kumu o ka hoʻohana maoli ʻana i kahi polokalamu React, pono mākou e hoʻololi iā ia i hoʻonohonoho o nā faila static a lawelawe iā lākou i nā mea kūʻai aku e hoʻohana ana i kahi kikowaena pūnaewele.
No ke kūkulu ʻana i ka app React, e hoʻohana hou i ka terminal, hoʻokele i ka waihona sa-frontend a holo i kēia kauoha:
npm run build
E hana kēia i kahi papa kuhikuhi ma ka waihona papahana build. Loaʻa iā ia nā faila static a pau e pono ai no ka hana ʻana o ka noi React.
▍Ke lawelawe nei i nā faila static me Nginx
Pono mua ʻoe e hoʻokomo a holo i ka pūnaewele pūnaewele Nginx. he mea hiki iā ʻoe ke hoʻoiho a loaʻa nā ʻōlelo kuhikuhi no ka hoʻokomo ʻana a me ka holo ʻana. A laila pono ʻoe e kope i nā mea o ka waihona sa-frontend/build i ka waihona [your_nginx_installation_dir]/html.
Me kēia ala, ʻo ka faila i hana ʻia i ka wā o ka hui ʻana o ka noi React index.html e loaʻa ma [your_nginx_installation_dir]/html/index.html. ʻO kēia ka faila, ma ka maʻamau, nā pilikia o ka server Nginx i ka wā e komo ai. Hoʻonohonoho ʻia ke kikowaena e hoʻolohe ma kahi awa 80, akā hiki iā ʻoe ke hoʻonohonoho i ke ala āu e makemake ai ma ka hoʻoponopono ʻana i ka faila [your_nginx_installation_dir]/conf/nginx.conf.
E wehe i kāu polokalamu kele pūnaewele a hele i localhost:80. E ʻike ʻoe i ka ʻaoʻao app React.
React app i lawelawe ʻia e ka server Nginx
Inā ʻoe e hoʻokomo i kekahi mea ma ke kahua Type your sentence a kaomi i ke pihi Send - ʻaʻohe mea e hiki mai. Akā, inā ʻoe e nānā i ka console, hiki iā ʻoe ke ʻike i nā memo hewa ma laila. I mea e hoʻomaopopo pono ai i kahi e kū ai kēia mau hewa, e nānā kākou i ke code noi.
▍Ka nānā ʻana i ke code o ka palapala noi mua
Ke nānā nei i ke code o ka faila App.js, hiki iā mākou ke ʻike i ke kaomi ʻana i ke pihi Send kahea i ke ano analyzeSentence(). Hōʻike ʻia ke code no kēia ʻano hana ma lalo nei. I ka manawa like, e hoʻolohe i ka ʻoiaʻiʻo no kēlā me kēia laina i loaʻa kahi ʻōlelo o ke ʻano # Номер, aia kahi wehewehe i hāʻawi ʻia ma lalo o ke code. Ma ke ala like, e hoʻokaʻawale mākou i nā ʻāpana code ʻē aʻe.
1. ʻO ka HKH kahi i noi ʻia ai ka POST. Ua manaʻo ʻia kēia helu wahi he palapala noi e kali ana no ia mau noi.
2.Hoʻouna ʻia ke kino noi i ka palapala noi. Eia ke kino noi laʻana:
{
sentence: "I like yogobella!"
}
3.Ke loaʻa ka pane i kahi noi, hoʻonui ʻia ke kūlana o ka ʻāpana. ʻO kēia ke kumu e hana hou ai ka ʻāpana. Inā loaʻa iā mākou ka ʻikepili (ʻo ia hoʻi, kahi mea JSON i loko o ka ʻikepili i hoʻokomo ʻia a me ka helu kikokikona i helu ʻia), e hoʻopuka mākou i ka ʻāpana Polarityoiai ua hookoia na kumu. Eia kā mākou wehewehe ʻana i ka ʻāpana:
Me he mea lā e hana maikaʻi ana ke code. He aha ka hewa maanei? Inā manaʻo ʻoe ma ka helu wahi e hoʻāʻo ai ka noi e hoʻouna i kahi noi POST, ʻaʻohe mea i hiki ke ʻae a hoʻokō i kēia noi, a laila pololei loa ʻoe. ʻO ia hoʻi, e hoʻoponopono i nā noi e hōʻea ana i ka helu wahi http://localhost:8080/sentiment, pono mākou e holo i kahi noi pūnaewele ma muli o Spring.
Pono mākou i kahi noi Spring hiki ke ʻae i kahi noi POST
▍Ka hoʻonohonoho ʻana i kahi palapala noi pūnaewele ma muli o Spring
I mea e kau ai i kahi noi Spring, pono ʻoe iā JDK8 a me Maven a me nā ʻano hoʻololi kaiapuni i hoʻonohonoho pono ʻia. Ma hope o kou hoʻokomo ʻana i kēia mau mea a pau, hiki iā ʻoe ke hoʻomau i ka hana ma kā mākou papahana.
▍ Hoʻopili i ka palapala noi i loko o kahi faila jar
E hoʻokele, me ka hoʻohana ʻana i ka terminal, i ka waihona sa-webapp a komo i keia kauoha:
mvn install
Ma hope o ka hoʻokō ʻana i kēia kauoha i ka waihona sa-webapp e hana ʻia ka papa kuhikuhi target. ʻO kēia kahi e loaʻa ai ka polokalamu Java, i hoʻopaʻa ʻia i kahi faila jar, i hōʻike ʻia e ka faila sentiment-analysis-web-0.0.1-SNAPSHOT.jar.
▍Ke hoʻomaka nei i kahi polokalamu Java
E hele i ka waihona target a holo i ka noi me kēia kauoha:
Loaʻa ka hewa i ka wā e hoʻokō ai i kēia kauoha. I mea e hoʻomaka ai e hoʻoponopono, hiki iā mākou ke hoʻokaʻawale i nā kikoʻī ʻokoʻa i ka ʻikepili trace stack:
Error creating bean with name 'sentimentController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sa.logic.api.url' in value "${sa.logic.api.url}"
No mākou, ʻo ka mea nui ma ʻaneʻi ʻo ka haʻi ʻana i ka hiki ʻole ke wehewehe i ke ʻano sa.logic.api.url. E noʻonoʻo kākou i ke code kahi i kū ai ka hewa.
▍Ka helu helu palapala noi Java
Eia ka snippet code kahi i kū ai ka hewa.
@CrossOrigin(origins = "*")
@RestController
public class SentimentController {
@Value("${sa.logic.api.url}") // #1
private String saLogicApiUrl;
@PostMapping("/sentiment")
public SentimentDto sentimentAnalysis(
@RequestBody SentenceDto sentenceDto)
{
RestTemplate restTemplate = new RestTemplate();
return restTemplate.postForEntity(
saLogicApiUrl + "/analyse/sentiment", // #2
sentenceDto, SentimentDto.class)
.getBody();
}
}
I loko o SentimentController he mahinaai saLogicApiUrl. Hoʻonohonoho ʻia kona waiwai e ka waiwai sa.logic.api.url.
Nā laina saLogicApiUrl hui pū me ka waiwai /analyse/sentiment. Hoʻohui pū lākou i kahi helu no ke kelepona ʻana i ka microservice e hana ana i ka nānā ʻana i nā kikokikona.
▍Ka hoʻonohonoho ʻana i kahi waiwai waiwai
I ka punawai, ʻo ke kumu paʻamau o nā waiwai waiwai he faila application.properties, hiki ke loaʻa ma sa-webapp/src/main/resources. Akā ʻo ka hoʻohana ʻana ʻaʻole ia wale ke ala e hoʻonohonoho ai i nā waiwai waiwai. Hiki iā ʻoe ke hana i kēia me kēia kauoha:
Pono ka waiwai o kēia waiwai e kuhikuhi i ka helu o kā mākou noi Python.
Ma ka hoʻonohonoho ʻana iā ia, haʻi mākou i ka noi pūnaewele Spring kahi e pono ai e hana i nā noi parsing kikokikona.
I ʻole e paʻakikī i ko mākou ola, e hoʻoholo mākou e loaʻa ka noi Python ma localhost:5000 a e ho'āʻo e poina iā ia. ʻO ka hopena, ʻo ke kauoha e hoʻomaka i ka noi Spring e like me kēia:
E wehewehe ana i ka helu wahi no ka noi ʻana iā POST.
Ke kiʻi ʻana i kahi waiwai sentence mai ke kino noi.
Ka hoʻomaka ʻana o ka mea inoa ʻole TextBlob a loaa ka waiwai polarity no ka noi mua i loaʻa ma ke kino o ka noi (i kā mākou hihia, ʻo kēia wale nō ka noi i waiho ʻia no ka nānā ʻana).
Hoʻihoʻi i kahi pane, aia i loko o ke kino ka kikokikona o ka hāʻawi a me ka mea hōʻailona i helu ʻia no ia polarity.
Ke hoʻomaka nei i ka noi Flask, e loaʻa ana ma 0.0.0.0:5000 (hiki iā ʻoe ke komo iā ia me ka hoʻohana ʻana i ke kūkulu ʻana o ke ʻano localhost:5000).
I kēia manawa ke holo nei nā microservices i hoʻokumu i ka noi. Hoʻonohonoho ʻia lākou e launa pū kekahi me kekahi. Eia ke ʻano o ke kiʻikuhi noi ma kēia pae o ka hana.
Lawe ʻia nā microservice a pau e hana i ka noi i kahi kūlana olakino
I kēia manawa, ma mua o ka hoʻomau ʻana, wehe i ka React app ma kahi polokalamu kele pūnaewele a hoʻāʻo e hoʻokaʻawale i kekahi ʻōlelo me ia. Inā hana pololei nā mea a pau - ma hope o ke kaomi ʻana i ke pihi Send e ʻike ʻoe i nā hualoaʻa loiloi ma lalo o ka pahu kikokikona.
Ma ka ʻāpana aʻe, e kamaʻilio mākou e pili ana i ka holo ʻana i kā mākou microservices i nā pahu Docker. Pono kēia i mea e hoʻomākaukau ai i ka noi e holo i ka hui Kubernetes.
Nā pahu Docker
Kubernetes he ʻōnaehana no ka hoʻokaʻawale ʻana, ka hoʻonui ʻana a me ka hoʻokele ʻana i nā noi containerized. Ua kapa ʻia ʻo ia he "container orchestrator". Inā hana ʻo Kubernetes me nā ipu, a laila ma mua o ka hoʻohana ʻana i kēia ʻōnaehana, pono mākou e kiʻi i kēia mau ipu. Akā ʻo ka mua, e kamaʻilio e pili ana i nā ipu. ʻO ka pane maikaʻi loa paha i ka nīnau o ka mea hiki ke loaʻa i loko palapala iā Docker:
ʻO ke kiʻi pahu he pahu māmā, paʻa ponoʻī, hiki ke hoʻokō ʻia i loko o kahi noi, e komo pū ana i nā mea āpau e pono ai e holo: code noi, runtime environment, system tools and library, settings. Hiki ke hoʻohana ʻia nā papahana i hoʻopaʻa ʻia ma nā kaiapuni ʻo Linux a me Windows a e hana mau nō ia me ka nānā ʻole ʻana i ka ʻōnaehana.
'O ia ho'i, hiki ke ho'ohana 'ia nā ipu ma luna o kekahi kamepiula, me nā kikowaena hana, a ma kēlā me kēia kaiapuni, e hana like nā polokalamu i loko o ia mau mea.
No ka ʻimi ʻana i nā hiʻohiʻona o nā ipu a hoʻohālikelike iā lākou i nā ala ʻē aʻe e holo ai i nā noi, e nānā i ka laʻana o ka lawelawe ʻana i kahi noi React me ka hoʻohana ʻana i kahi mīkini virtual a me kahi pahu.
▍Ka lawelawe ʻana i nā faila static o kahi palapala noi React me ka mīkini virtual
Ke ho'āʻo nei e hoʻonohonoho i ka mālama ʻana i nā faila static me ka hoʻohana ʻana i nā mīkini virtual, e hālāwai mākou i kēia mau hemahema:
Hoʻohana pono ʻole i nā kumuwaiwai, no ka mea he ʻōnaehana holoʻokoʻa kēlā me kēia mīkini virtual.
Ka hilinaʻi platform. ʻAʻole pono paha ka hana ma kekahi kamepiula kūloko ma kahi kikowaena hana.
ʻO ka scaling lohi a me ke kumu waiwai o kahi hoʻonā mīkini uila.
ʻO ka server pūnaewele Nginx e lawelawe ana i nā faila static e holo ana i kahi mīkini virtual
Inā hoʻohana ʻia nā ipu e hoʻoponopono i kahi pilikia like, a laila, i ka hoʻohālikelike ʻana me nā mīkini virtual, hiki ke ʻike ʻia nā ikaika aʻe:
Hoʻohana pono i nā kumuwaiwai: hana me ka ʻōnaehana hana me ka hoʻohana ʻana iā Docker.
Kūʻokoʻa paepae. E holo ana kahi pahu e hiki ai i ka mea hoʻomohala ke holo ma kāna kamepiula ponoʻī.
Hoʻolaha māmā ma o ka hoʻohana ʻana i nā papa kiʻi.
Hāʻawi ʻo Nginx pūnaewele i nā faila static e holo ana i kahi pahu
Ua hoʻohālikelike wale mākou i nā mīkini virtual a me nā ipu ma kekahi mau wahi, akā ʻo ia ka lawa e ʻike ai i ka ikaika o nā ipu. he mea Hiki iā ʻoe ke ʻike i nā kikoʻī e pili ana i nā pahu Docker.
▍Ke kūkulu ʻana i kiʻi pahu no kahi polokalamu React
ʻO ka papa hana kumu o kahi pahu Docker ka faila Dockerfile. I ka hoʻomaka ʻana o kēia faila, ua hoʻopaʻa ʻia kahi kiʻi kumu o ka ipu, a laila hoʻokomo ʻia kahi ʻano kuhikuhi e hōʻike ana i ke ʻano o ka hana ʻana i kahi pahu e kūpono i nā pono o kahi noi.
Ma mua o ka hoʻomaka ʻana e hana me ka faila Dockerfile, e hoʻomanaʻo i ka mea a mākou i hana ai i mea e hoʻomākaukau ai i nā faila o ka noi React no ka hoʻouka ʻana i ka server Nginx:
Ke kūkulu ʻana i kahi pūʻolo polokalamu React (npm run build).
E hoʻomaka ana i ka server Nginx.
Ke kope ʻana i nā mea o kahi papa kuhikuhi build mai ka waihona papahana sa-frontend i ka waihona kikowaena nginx/html.
Ma lalo ʻoe e ʻike ai i nā mea like ma waena o ka hana ʻana i kahi pahu a me nā hana i luna i hana ʻia ma ke kamepiula kūloko.
▍ Hoʻomākaukau i kahi Dockerfile no ka noi SA-Frontend
Nā kuhikuhi e hoʻokomo i loko Dockerfile no ka palapala noi SA-Frontend, ʻelua wale nō hui. ʻO ka ʻoiaʻiʻo ua hoʻomākaukau ka hui hoʻomohala Nginx i kahi kumu kiʻi no Nginx, a mākou e hoʻohana ai e kūkulu i kā mākou kiʻi. Eia nā ʻanuʻu ʻelua e pono ai mākou e wehewehe:
Pono ʻoe e hana i ke kiʻi Nginx i kumu o ke kiʻi.
waihona waihona sa-frontend/build pono e kope i ka waihona kiʻi nginx/html.
Inā hele mākou mai kēia wehewehe ʻana i ka faila Dockerfile, a laila e like me kēia:
FROM nginx
COPY build /usr/share/nginx/html
E like me kāu e ʻike ai, maʻalahi loa nā mea āpau ma aneʻi, ʻoiai ʻo ka ʻike o ka faila e hiki ke heluhelu a hiki ke hoʻomaopopo ʻia. Hōʻike kēia faila i ka ʻōnaehana e lawe i ke kiʻi nginx me nā mea a pau i loaʻa iā ia, a kope i nā mea o ka papa kuhikuhi build i ka papa kuhikuhi nginx/html.
Eia paha kāu nīnau e pili ana i kaʻu ʻike i kahi e kope pono ai i nā faila mai ka waihona build, i.e. no hea mai ke ala /usr/share/nginx/html. ʻOiaʻiʻo, ʻaʻohe mea paʻakikī ma ʻaneʻi. ʻO kaʻoiaʻiʻo, hiki ke loaʻa ka ʻike pili i loko wehewehe kiʻi.
▍Hoʻākoakoa i ke kiʻi a hoʻouka i ka waihona
Ma mua o hiki iā mākou ke hana me kahi kiʻi i hoʻopau ʻia, pono mākou e waiho i ka waihona kiʻi. No ka hana ʻana i kēia, e hoʻohana mākou i ka pūnaewele hoʻolaha kiʻi kiʻi kiʻi manuahi Docker Hub. I kēia pae o ka hana, pono ʻoe e hana i kēia:
Eia a ma lalo i nā kauoha like $DOCKER_USER_ID pono e hoʻololi ʻia me kou inoa inoa ma Docker Hub. No ka laʻana, e like paha kēia ʻāpana o ke kauoha: rinormaloku/sentiment-analysis-frontend.
I kēia hihia, hiki ke hoʻopōkole ʻia kēia kauoha ma ka wehe ʻana mai ia mea -f Dockerfile, ʻoiai ua loaʻa i ka waihona kahi a mākou e hoʻokō ai i kēia kauoha.
No ka hoʻouna ʻana i ke kiʻi i hoʻopau ʻia i ka waihona, pono mākou i kēia kauoha:
Ma hope o ka hoʻopau ʻana, e nānā i kāu papa inoa o nā waihona ma Docker Hub e ʻike inā ua paʻi maikaʻi ʻia ke kiʻi i ka waihona kapuaʻi.
▍Hoʻomaka i kahi pahu
I kēia manawa hiki i kekahi ke hoʻoiho a holo i ke kiʻi i kapa ʻia ʻo $DOCKER_USER_ID/sentiment-analysis-frontend. No ka hana ʻana i kēia, pono ʻoe e holo i kēia kaʻina o nā kauoha:
docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
Ke holo nei ka pahu, a hiki iā mākou ke hoʻomau i ka hana ma ka hana ʻana i nā kiʻi ʻē aʻe a mākou e pono ai. Akā ma mua o ka hoʻomau ʻana, e hoʻomaopopo kākou i ka hoʻolālā 80:80, ka mea i loaʻa i loko o ke kauoha e holo i ke kiʻi a me he mea huikau.
Helu mua 80 ʻo ia ka helu awa o ka mea hoʻokipa (ʻo ia hoʻi, ke kamepiula kūloko).
Helu lua 80 ʻo ia ke awa o ka pahu kahi e hoʻohuli hou ʻia ai ke noi.
E noʻonoʻo i kēia kiʻi.
Hoʻouna ʻana i ke awa
Hoʻouna ka ʻōnaehana i nā noi mai ke awa <hostPort> i ke awa <containerPort>. ʻO ia hoʻi, ke komo ʻana i ke awa 80 hoʻihoʻi ʻia ke kamepiula i kahi awa 80 ipu.
Mai ka awa 80 wehe ʻia ma ke kamepiula kūloko, hiki iā ʻoe ke komo i ka noi mai kēia kamepiula ma localhost:80. Inā ʻaʻole kākoʻo kāu ʻōnaehana iā Docker, hiki iā ʻoe ke holo i ka noi ma kahi mīkini virtual Docker, e like ke ʻano o ka helu. <docker-machine ip>:80. No ka ʻike ʻana i ka IP address o ka mīkini virtual Docker, hiki iā ʻoe ke hoʻohana i ke kauoha docker-machine ip.
I kēia manawa, i ka manawa i hoʻomaka maikaʻi ai ka pahu app mua, pono ʻoe e wehe i kāna ʻaoʻao ma kahi polokalamu kele.
▍.dockerignore waihona
Ke kūkulu ʻana i ke kiʻi noi SA-Frontend, hiki iā mākou ke ʻike he lohi loa kēia kaʻina hana. ʻO kēia no ka mea pono e hoʻouna ʻia ka pōʻaiapili kūkulu kiʻi i ka daemon Docker. Hāʻawi ʻia ka papa kuhikuhi e hōʻike ana i ka pōʻaiapili kūkulu ma ke ʻano he hoʻopaʻapaʻa hope loa i ke kauoha docker build. I kā mākou hihia, aia kahi kiko ma ka hope o kēia kauoha. ʻO kēia ka hopena i ka hoʻopili ʻia ʻana o kēia ʻano i loko o ka pōʻaiapili hui:
Akā ʻo nā waihona āpau i loaʻa ma ʻaneʻi, pono mākou i kahi waihona build. ʻO ka hoʻoiho ʻana i kekahi mea ʻē aʻe he mea hoʻopau manawa. Hiki iā ʻoe ke wikiwiki i ke kūkulu ʻana ma ka haʻi ʻana iā Docker i nā papa kuhikuhi e haʻalele. No ka hana ʻana i kēia, pono mākou i kahi faila .dockerignore. ʻO ʻoe, inā kamaʻāina ʻoe i ka faila .gitignore, maʻa paha ke ʻano o kēia faila. Hoʻopaʻa ia i nā papa kuhikuhi i hiki ʻole i ka ʻōnaehana kūkulu kiʻi ke haʻalele. I kā mākou hihia, ua like nā mea o kēia faila:
node_modules
src
public
waihona .dockerignore pono i loko o ka waihona like me ka waihona Dockerfile. I kēia manawa, e lawe ʻia ka hui o ke kiʻi i mau kekona.
E hana kākou i ke kiʻi no kahi polokalamu Java.
▍Ke kūkulu ʻana i kiʻi pahu no kahi polokalamu Java
ʻIke ʻoe i ka mea, a ua aʻo mua ʻoe i nā mea āpau āu e pono ai e hana i nā kiʻi pahu. ʻO ia ke kumu e pōkole loa ai kēia māhele.
E wehe i ka faila Dockerfile, aia ma ka waihona papahana sa-webapp. Inā heluhelu ʻoe i ka kikokikona o kēia faila, a laila ʻelua mau kūkulu hou e hoʻomaka me nā huaʻōlelo ENV и EXPOSE:
Huaʻōlelo nui ENV hiki iā ʻoe ke haʻi aku i nā ʻano like ʻole i loko o nā pahu Docker. ʻO ka mea kūikawā, i kā mākou hihia, hiki iā ʻoe ke hoʻonohonoho i kahi URL e komo i ka API o ka noi e hana ana i ka nānā ʻana i nā kikokikona.
Huaʻōlelo nui EXPOSE hiki iā ʻoe ke haʻi iā Docker e wehe i kahi awa. E hoʻohana mākou i kēia awa ke hana mākou me ka noi. Maanei hiki iā ʻoe ke ʻike i kēlā ma Dockerfile no ka palapala noi SA-Frontend aohe kauoha pela. No ka palapala wale nō kēia, ʻo ia hoʻi, no ka mea heluhelu kēia kūkulu Dockerfile.
ʻO ke kūkulu ʻana i ke kiʻi a hoʻokuʻu iā ia i ka waihona e like me ka laʻana mua. Inā ʻaʻole ʻoe i hilinaʻi nui i kou hiki, hiki ke loaʻa nā kauoha pili i ka faila README.md i ka waihona sa-webapp.
▍Ke kūkulu ʻana i kiʻi pahu no kahi noi Python
Inā ʻoe e nānā i nā mea o ka faila Dockerfile i ka waihona sa-logicʻaʻole ʻoe e ʻike i kahi mea hou ma laila. ʻO nā kauoha no ke kūkulu ʻana i ke kiʻi a paʻi iā ia i ka waihona e ʻike mua iā ʻoe, akā, e like me ke ʻano o kā mākou mau noi ʻē aʻe, hiki ke loaʻa iā lākou ma ka faila. README.md i ka waihona sa-logic.
▍Ke hoʻāʻo nei i nā noi pahu pahu
Hiki iā ʻoe ke hilinaʻi i kahi mea āu i hoʻāʻo ʻole ai? ʻAʻole hiki iaʻu. E ho'āʻo kākou i kā mākou mau ipu.
E hoʻomaka kākou i ka pahu noi sa-logic a hoʻonohonoho iā ia e hoʻolohe ma kahi awa 5050:
docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
E hoʻomaka kākou i ka pahu noi sa-webapp a hoʻonohonoho iā ia e hoʻolohe ma kahi awa 8080. Eia kekahi, pono mākou e hoʻonohonoho i ke awa kahi e hoʻolohe ai ka noi Python no nā noi mai ka noi Java ma o ka hoʻihoʻi ʻana i ka loli kaiapuni. SA_LOGIC_API_URL:
$ docker run -d -p 8080:8080 -e SA_LOGIC_API_URL='http://<container_ip or docker machine ip>:5000' $DOCKER_USER_ID/sentiment-analysis-web-app
E aʻo pehea e ʻike ai i ka IP address o kahi pahu a i ʻole Docker VM, e nānā i ka faila README.
E hoʻomaka kākou i ka pahu noi sa-frontend:
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
I kēia manawa ua mākaukau nā mea a pau e hoʻokele i ka polokalamu kele i ka helu wahi localhost:80 a hoʻāʻo i ka app.
E ʻoluʻolu e hoʻomaopopo inā hoʻololi ʻoe i ke awa no sa-webapp, a inā ʻoe e holo nei i kahi Docker VM, pono ʻoe e hoʻoponopono i ka faila App.js mai kahi waihona sa-frontendma ka hoʻololi ʻana i ka helu IP a i ʻole ka helu port ma ke ʻano analyzeSentence()ma ke pani ʻana i ka ʻike o kēia manawa ma kahi o ka ʻikepili kahiko. Ma hope o kēlā, pono ʻoe e hui hou i ke kiʻi a hoʻohana.
ʻO kēia ke ʻano o kā mākou palapala noi i kēia manawa.
Holo nā microservices i nā pahu
Hōʻuluʻulu manaʻo: no ke aha mākou e pono ai i kahi hui Kubernetes?
Ua nānā wale mākou i nā faila Dockerfile, kamaʻilio e pili ana i ke kūkulu ʻana i nā kiʻi a hoʻokuke iā lākou i kahi waihona Docker. Eia kekahi, ua aʻo mākou pehea e wikiwiki ai i ka hui ʻana o nā kiʻi me ka hoʻohana ʻana i ka faila .dockerignore. ʻO ka hopena, ke holo nei kā mākou microservices i nā pahu Docker. Ma ʻaneʻi paha ʻoe i kahi nīnau kūpono e pili ana i ke kumu e pono ai mākou iā Kubernetes. ʻO ka pane i kēia nīnau e hāʻawi ʻia i ka ʻāpana ʻelua o kēia mea. I kēia manawa, e noʻonoʻo i kēia nīnau:
E manaʻo mākou ua kaulana kā mākou palapala noiʻi kikokikona ma ka honua holoʻokoʻa. He mau miliona noi e hele mai iā ia i kēlā me kēia minuke. ʻO kēia ke ʻano o nā microservices sa-webapp и sa-logic e pilikia nui ana. Pehea e hoʻonui ai i nā ipu e holo ana i nā microservices?