Бидний хүсэлтээр Хабр төв үүсгэсэн
Kubernetes мөн бид үүнд анхны хэвлэлээ байршуулсандаа баяртай байна. Бүртгүүлэх!
Кубернетес бол амархан. Хэн ч энэ технологийг хэдхэн цагийн дотор эзэмшиж чаддаг байхад яагаад банкууд надад их мөнгө төлж энэ чиглэлээр ажиллах болов?
Хэрэв та Кубернетесийг маш хурдан сурч чадна гэдэгт эргэлзэж байвал би үүнийг өөрөө туршиж үзэхийг зөвлөж байна. Тухайлбал, энэ материалыг эзэмшсэнээр та Kubernetes кластерт микро үйлчилгээнд суурилсан програм ажиллуулах боломжтой болно. Би үүнийг баталж чадна, учир нь би үйлчлүүлэгчдэдээ Кубернетестэй ажиллахыг заадаг аргачлалтай яг адилхан юм. Энэ гарын авлагаас юугаараа ялгаатай вэ? Ер нь бол зөндөө л юм бий. Тиймээс эдгээр материалуудын ихэнх нь Кубернетесийн тухай ойлголт, kubectl командын онцлогуудын талаархи энгийн зүйлийн тайлбараас эхэлдэг. Эдгээр материалыг зохиогчид уншигчиддаа програм хөгжүүлэлт, микро үйлчилгээ, Docker контейнеруудыг мэддэг гэж үздэг. Бид өөр замаар явах болно. Эхлээд бид компьютер дээр микро үйлчилгээнд суурилсан програмыг хэрхэн ажиллуулах талаар ярих болно. Дараа нь бид бичил үйлчилгээ тус бүрийн хувьд контейнерийн зургийг бүтээхийг харах болно. Үүний дараа бид Kubernetes-тэй танилцаж, Kubernetes-ийн удирддаг кластерт микро үйлчилгээнд суурилсан програмыг байрлуулах талаар авч үзэх болно.
Кубернетес рүү аажмаар хандах энэхүү арга нь Кубернетес дэх бүх зүйл хэрхэн энгийнээр ажилладагийг ойлгохын тулд энгийн хүмүүст шаардлагатай юу болж байгааг гүн гүнзгий ойлгох боломжийг олгоно. Үүнийг сурахыг хүссэн хүмүүс хаана, хэрхэн ашигладагийг мэддэг бол Кубернетес бол энгийн технологи юм.
Одоо олон зүйл нуршилгүйгээр эхлүүлж, хамтран ажиллах програмынхаа талаар ярилцъя.
Туршилтын хэрэглээ
Манай програм зөвхөн нэг функцийг гүйцэтгэх болно. Энэ нь нэг өгүүлбэрийг оруулга болгон авдаг бөгөөд үүний дараа текстийн шинжилгээний хэрэгслийг ашиглан өгүүлбэрийн сэтгэцийн шинжилгээ хийж, өгүүлбэрийн зохиогчийн тодорхой объектод сэтгэл хөдлөлийн хандлагын үнэлгээг авдаг.
Энэ програмын үндсэн цонх иймэрхүү харагдаж байна.
Текстийн мэдрэмжийн шинжилгээ хийх вэб програм
Техникийн үүднээс авч үзвэл програм нь гурван микро үйлчилгээнээс бүрдэх бөгөөд тус бүр нь тодорхой асуудлыг шийддэг.
- SA-Frontend нь статик React файлуудад үйлчилдэг Nginx вэб сервер юм.
- SA-WebApp нь Java хэл дээр бичигдсэн, урд талын хүсэлтийг боловсруулдаг вэб програм юм.
- SA-Logic нь текст дээр мэдрэмжийн шинжилгээ хийдэг Python програм юм.
Микро үйлчилгээ нь тусдаа байдаггүй гэдгийг анхаарах нь чухал юм. Тэд "хариуцлага хуваах" санааг хэрэгжүүлдэг боловч нэгэн зэрэг бие биетэйгээ харилцах хэрэгтэй.
Аппликешн доторх өгөгдлийн урсгал
Дээрх диаграммд та програмын өгөгдлийн урсгалыг харуулсан системийн дугаарласан үе шатуудыг харж болно. Тэднийг харцгаая:
- Хөтөч нь серверээс файл хүсч байна
index.html
(энэ нь эргээд React програмын багцыг татаж авдаг). - Хэрэглэгч програмтай харилцдаг бөгөөд энэ нь Spring-д суурилсан вэб програм руу залгахад хүргэдэг.
- Вэб програм нь текстийн шинжилгээ хийх хүсэлтийг Python програм руу дамжуулдаг.
- Python програм нь текстийн мэдрэмжийн шинжилгээг хийж, хүсэлтийн хариу болгон үр дүнг буцаана.
- Spring програм нь React програм руу хариу илгээдэг (энэ нь эргээд текстийн шинжилгээний үр дүнг хэрэглэгчдэд харуулдаг).
Эдгээр бүх програмын кодыг олж болно
Орон нутгийн машин дээрээ микро үйлчилгээнд суурилсан програмыг ажиллуулж байна
Аппликешн ажиллахын тулд бид бүх гурван микро үйлчилгээг эхлүүлэх хэрэгтэй. Тэдний хамгийн хөөрхөн нь болох урд талын программаас эхэлцгээе.
▍Орон нутгийн хөгжилд зориулж React-ийг тохируулна уу
React програмыг ажиллуулахын тулд та Node.js платформ болон NPM-ийг компьютер дээрээ суулгах хэрэгтэй. Энэ бүгдийг суулгасны дараа терминалыг ашиглан төслийн хавтас руугаа очно уу sa-frontend
мөн дараах тушаалыг ажиллуулна:
npm install
Энэ тушаалыг хавтсанд ажиллуулснаар node_modules
React програмын хамаарлууд ачаалагдах бөгөөд тэдгээрийн бүртгэл нь файлд байна package.json
. Хамааралтай зүйлсийг нэг хавтсанд татаж авсны дараа дараах тушаалыг ажиллуулна уу:
npm start
Тэгээд л болоо. Одоо React програм ажиллаж байгаа тул та хөтөч дээрээ дараах хаягаар орж хандах боломжтой. localhost:3000
. Та түүний кодонд ямар нэг зүйлийг өөрчилж болно. Та эдгээр өөрчлөлтүүдийн үр нөлөөг хөтөч дээр шууд харах болно. Энэ нь модулиудыг "халуун" гэж нэрлэсний ачаар боломжтой юм. Энэ нь урд талын хөгжүүлэлтийг энгийн бөгөөд тааламжтай туршлага болгодог.
▍React программыг үйлдвэрлэлд бэлтгэх
React программыг бодитоор ашиглахын тулд бид үүнийг статик файлуудын багц болгон хөрвүүлж, вэб сервер ашиглан үйлчлүүлэгчдэд үйлчлэх хэрэгтэй.
React програмыг бүтээхийн тулд терминалыг ашиглан дахин хавтас руу очно уу sa-frontend
мөн дараах тушаалыг ажиллуулна:
npm run build
Энэ нь төслийн хавтсанд лавлах үүсгэнэ build
. Энэ нь React програмыг ажиллуулахад шаардлагатай бүх статик файлуудыг агуулна.
▍Nginx ашиглан статик файлд үйлчлэх
Эхлээд та Nginx вэб серверийг суулгаж ажиллуулах хэрэгтэй. sa-frontend/build
хавтас руу [your_nginx_installation_dir]/html
.
Энэ аргын тусламжтайгаар React програмыг бүтээх явцад үүссэн файл index.html
хаягаар авах боломжтой [your_nginx_installation_dir]/html/index.html
. Энэ нь анхдагчаар Nginx серверт хандах үед гаргадаг файл юм. Сервер нь порт дээр сонсохоор тохируулагдсан 80
, гэхдээ энэ нь файлыг засварлах замаар өөрт хэрэгтэй байдлаар тохируулах боломжтой [your_nginx_installation_dir]/conf/nginx.conf
.
Одоо хөтчөө нээгээд хаяг руу очно уу localhost:80
. Та React програмын хуудсыг харах болно.
Nginx серверээр үйлчилдэг React програм
Хэрэв та одоо талбарт ямар нэгэн зүйл оруулбал Type your sentence
болон товчлуурыг дар Send
- юу ч болохгүй. Гэхдээ хэрэв та консолыг харвал алдааны мэдэгдлүүдийг харж болно. Эдгээр алдаа яг хаана гарч байгааг ойлгохын тулд програмын кодыг шинжилье.
▍Урд талын хэрэглээний кодын шинжилгээ
Файлын кодыг харж байна App.js
, бид товчлуурыг дарснаар үүнийг харж болно Send
аргыг дууддаг analyzeSentence()
. Энэ аргын кодыг доор өгөв. Маягтын тайлбартай мөр бүрийн хувьд гэдгийг анхаарна уу # Номер
, кодын доор өгөгдсөн тайлбар байна. Бид бусад кодын фрагментүүдийг ижил аргаар шинжлэх болно.
analyzeSentence() {
fetch('http://localhost:8080/sentiment', { // #1
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
sentence: this.textField.getValue()})// #2
})
.then(response => response.json())
.then(data => this.setState(data)); // #3
}
1. POST хүсэлт илгээсэн URL. Энэ хаяг дээр ийм хүсэлт хүлээж байгаа өргөдөл байгаа гэж таамаглаж байна.
2.Хүсэлтийн байгууллага өргөдөлд илгээгдсэн. Хүсэлтийн биетийн жишээ энд байна:
{
sentence: "I like yogobella!"
}
3.Хүсэлтийн хариу ирэхэд бүрэлдэхүүн хэсгийн төлөв шинэчлэгдэнэ. Энэ нь бүрэлдэхүүн хэсгийг дахин үзүүлэхэд хүргэдэг. Хэрэв бид өгөгдөл хүлээн авбал (өөрөөр хэлбэл оролтын өгөгдөл болон тооцоолсон текстийн оноог агуулсан JSON объект) бид бүрэлдэхүүн хэсгийг гаргана. Polarity
, учир нь зохих нөхцөл бүрдэх болно. Бид бүрэлдэхүүн хэсгийг дараах байдлаар тайлбарлав.
const polarityComponent = this.state.polarity !== undefined ?
<Polarity sentence={this.state.sentence}
polarity={this.state.polarity}/> :
null;
Код нь маш сайн ажиллаж байгаа бололтой. Энэ юу нь болохгүй байгаа юм бэ? Хэрэв та тухайн аппликешн POST хүсэлт илгээх гэж байгаа хаяг дээр энэ хүсэлтийг хүлээн авч, боловсруулж чадах зүйл хараахан байхгүй гэж үзвэл та туйлын зөв байх болно. Тухайлбал, хүлээн авсан хүсэлтийг боловсруулах http://localhost:8080/sentiment
, бид Spring дээр суурилсан вэб програм ажиллуулах хэрэгтэй.
Бидэнд POST хүсэлтийг хүлээн авах боломжтой Spring програм хэрэгтэй байна
▍Spring-д суурилсан вэб программыг тохируулж байна
Spring програмыг ашиглахын тулд танд JDK8, Maven болон зөв тохируулагдсан орчны хувьсагч хэрэгтэй болно. Энэ бүгдийг суулгасны дараа та манай төсөл дээр үргэлжлүүлэн ажиллах боломжтой.
▍Програмыг jar файлд савлах
Терминал ашиглан хавтас руу шилжинэ үү sa-webapp
мөн дараах тушаалыг оруулна уу:
mvn install
Энэ командыг хавтсанд ажиллуулсны дараа sa-webapp
лавлах үүсгэнэ target
. Энд файлаар дүрслэгдсэн jar файлд савлагдсан Java программ байрлана sentiment-analysis-web-0.0.1-SNAPSHOT.jar
.
▍Java програм ажиллуулж байна
Фолдер руу очих target
Дараах тушаалаар програмыг ажиллуулна уу:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar
Энэ командыг гүйцэтгэх явцад алдаа гарна. Үүнийг засаж эхлэхийн тулд бид стекийн ул мөр өгөгдөл дэх онцгой байдлын дэлгэрэнгүй мэдээллийг шинжлэх боломжтой:
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}"
Бидний хувьд энд хамгийн чухал зүйл бол утгыг тодруулах боломжгүй гэдгийг дурдах явдал юм sa.logic.api.url
. Алдаа гарсан кодыг задлан шинжилье.
▍Java програмын кодын шинжилгээ
Алдаа гарсан кодын хэсэг энд байна.
@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();
}
}
- С-д
entimentController
талбай байнаsaLogicApiUrl
. Түүний үнэ цэнийг өмчөөр нь тодорхойлдогsa.logic.api.url
. - Мөр
saLogicApiUrl
утгатай нийлдэг/analyse/sentiment
. Тэд хамтдаа текстийн шинжилгээ хийдэг микро үйлчилгээ рүү залгах хаягийг бүрдүүлдэг.
▍Хөрөнгийн утгыг тохируулна уу
Хаврын улиралд үл хөдлөх хөрөнгийн үнэ цэнийн стандарт эх сурвалж нь файл юм application.properties
, дээрээс олж болно sa-webapp/src/main/resources
. Гэхдээ түүний хэрэглээ нь үл хөдлөх хөрөнгийн үнэ цэнийг тогтоох цорын ганц арга биш юм. Үүнийг мөн дараах тушаалыг ашиглан хийж болно.
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=WHAT.IS.THE.SA.LOGIC.API.URL
Энэ өмчийн үнэ цэнэ нь манай Python програмын хаягийг зааж өгөх ёстой.
Үүнийг тохируулснаар бид Spring вэб програмд текст шинжилгээний хүсэлтийг гүйцэтгэхийн тулд хаашаа явах ёстойг хэлж өгдөг.
Бидний амьдралыг хүндрүүлэхгүйн тулд бид Python програмыг ашиглах боломжтой гэж шийднэ localhost:5000
тэгээд мартахгүйг хичээцгээе. Үүний үр дүнд Spring програмыг ажиллуулах тушаал дараах байдалтай байна.
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000
Манай системд Python програм дутуу байна
Одоо бидний хийх ёстой зүйл бол Python програмыг ажиллуулах бөгөөд систем нь санаснаар ажиллах болно.
▍Python программыг тохируулж байна
Python програмыг ажиллуулахын тулд та Python 3 болон Pip суулгасан байх ёстой бөгөөд тохирох орчны хувьсагчдыг зөв тохируулсан байх ёстой.
▍Хамаарал суулгах
Төслийн хавтас руу очно уу sa-logic/sa
мөн дараах тушаалуудыг ажиллуулна уу:
python -m pip install -r requirements.txt
python -m textblob.download_corpora
▍Аппликешныг ажиллуулна уу
Хамааралтай зүйлсийг суулгасны дараа бид програмыг ажиллуулахад бэлэн байна:
python sentiment_analysis.py
Энэ тушаалыг ажиллуулсны дараа бидэнд дараахь зүйлийг хэлэх болно.
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Энэ нь програм ажиллаж байгаа бөгөөд хүсэлтийг хүлээж байна гэсэн үг юм localhost:5000/
▍Код судалгаа
Хүсэлтэд хэрхэн хариу үйлдэл үзүүлэхийг ойлгохын тулд Python програмын кодыг харцгаая.
from textblob import TextBlob
from flask import Flask, request, jsonify
app = Flask(__name__) #1
@app.route("/analyse/sentiment", methods=['POST']) #2
def analyse_sentiment():
sentence = request.get_json()['sentence'] #3
polarity = TextBlob(sentence).sentences[0].polarity #4
return jsonify( #5
sentence=sentence,
polarity=polarity
)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000) #6
- Объектыг эхлүүлж байна
Flask
. - POST хүсэлтийг гүйцэтгэх хаягийг зааж өгч байна.
- Үл хөдлөх хөрөнгийг татаж авах
sentence
хүсэлтийн байгууллагаас. - Нэргүй объектыг эхлүүлж байна
TextBlob
мөн үнэ цэнийг нь авахpolarity
хүсэлтийн хэсэгт хүлээн авсан эхний өгүүлбэрийн хувьд (бидний тохиолдолд энэ нь шинжилгээнд илгээсэн цорын ганц өгүүлбэр юм). - Үндсэн хэсэгт өгүүлбэрийн текст болон түүний тооцоолсон үзүүлэлтийг агуулсан хариултыг буцаана
polarity
. - Flask програмыг ажиллуулна уу
0.0.0.0:5000
(Та мөн маягтын бүтцийг ашиглан хандах боломжтойlocalhost:5000
).
Програмыг бүрдүүлдэг микро үйлчилгээнүүд одоо ажиллаж байна. Тэд бие биетэйгээ харилцахаар тохируулагдсан байдаг. Ажлын энэ үе шатанд хэрэглээний диаграм иймэрхүү харагдаж байна.
Програмыг бүрдүүлдэг бүх микро үйлчилгээнүүд ажиллах горимд шилждэг
Одоо, үргэлжлүүлэхээсээ өмнө хөтчөөр React програмаа нээж, түүгээр өгүүлбэрийг задлан шинжилж үзээрэй. Хэрэв бүх зүйл зөв хийгдсэн бол товчлуурыг дарсны дараа Send
та шинжилгээний үр дүнг текст талбарын доор харах болно.
Дараагийн хэсэгт бид микро үйлчилгээгээ Docker контейнерт хэрхэн ажиллуулах талаар ярих болно. Энэ нь програмыг Kubernetes кластер дээр ажиллуулахад бэлтгэхэд шаардлагатай.
Докер савнууд
Контейнерийн дүрс нь програмыг ажиллуулахад шаардлагатай бүх зүйлийг багтаасан хөнгөн жинтэй, бие даасан, гүйцэтгэх боломжтой багц юм: програмын код, гүйцэтгэх орчин, системийн хэрэгсэл ба номын сан, тохиргоо. Контейнержүүлсэн программуудыг Линукс болон Windows орчинд ашиглах боломжтой бөгөөд дэд бүтцээс үл хамааран тэдгээр нь үргэлж ижилхэн ажиллах болно.
Энэ нь контейнеруудыг үйлдвэрлэлийн сервер зэрэг ямар ч компьютер дээр ажиллуулах боломжтой бөгөөд тэдгээрт агуулагдах програмууд нь ямар ч орчинд адилхан ажиллах болно гэсэн үг юм.
Контейнеруудын онцлог шинж чанаруудыг судалж, тэдгээрийг программуудыг ажиллуулах бусад аргуудтай харьцуулахын тулд виртуал машин болон контейнер ашиглан React програмд үйлчлэх жишээг харцгаая.
▍Виртуал машин ашиглан React програмын статик файлд үйлчлэх
Виртуал машин ашиглан статик файлын үйлчилгээг зохион байгуулахыг оролдоход бид дараахь сул талуудтай тулгарах болно.
- Виртуал машин бүр нь бүрэн хэмжээний үйлдлийн систем учраас нөөцийг үр ашиггүй ашиглах.
- Платформын хамаарал. Орон нутгийн компьютер дээр ажилладаг зүйл үйлдвэрлэлийн сервер дээр ажиллахгүй байж болно.
- Виртуал машинд суурилсан шийдлийг удаан, нөөц их шаарддаг масштабтай болгох.
Виртуал машин дээр ажиллаж байгаа статик файлуудад үйлчлэх Nginx вэб сервер
Хэрэв ижил төстэй асуудлыг шийдэхийн тулд контейнер ашигладаг бол виртуал машинтай харьцуулахад дараахь давуу талуудыг тэмдэглэж болно.
- Нөөцийг үр ашигтай ашиглах: Docker ашиглан үйлдлийн системтэй ажиллах.
- Платформ бие даасан. Хөгжүүлэгчийн компьютер дээрээ ажиллуулж болох контейнер хаана ч ажиллах болно.
- Зургийн давхаргыг ашиглах замаар хөнгөн байршуулалт.
Контейнер дотор ажиллаж байгаа статик файлуудад үйлчлэх Nginx вэб сервер
Бид зөвхөн виртуал машин болон контейнеруудыг цөөн хэдэн зүйлээр харьцуулсан боловч энэ нь чингэлэгийн давуу талыг мэдрэхэд хангалттай юм.
▍React програмд зориулсан контейнер дүрсийг бүтээх
Docker контейнерын үндсэн блок нь файл юм Dockerfile
. Энэ файлын эхэнд савны үндсэн дүрсийн бичлэг хийгдсэн бөгөөд дараа нь тодорхой хэрэглээний хэрэгцээг хангахуйц савыг хэрхэн үүсгэхийг харуулсан дараалсан заавар байдаг.
Файлтай ажиллаж эхлэхээс өмнө Dockerfile
, React програмын файлуудыг Nginx серверт байршуулахад бэлтгэхийн тулд юу хийснийг санацгаая:
- React програмын багцыг бүтээх (
npm run build
). - Nginx серверийг эхлүүлж байна.
- Лавлах агуулгыг хуулж байна
build
төслийн хавтаснаасsa-frontend
серверийн хавтас рууnginx/html
.
Контейнер үүсгэх болон локал компьютер дээрээ гүйцэтгэсэн дээрх алхмуудын хоорондын уялдааг доороос харж болно.
▍SA-Frontend програмд зориулж Dockerfile-г бэлтгэж байна
Үүнд агуулагдах заавар Dockerfile
өргөдөл гаргах SA-Frontend
, зөвхөн хоёр багаас бүрдэнэ. Үнэн хэрэгтээ Nginx хөгжүүлэлтийн баг үндсэн програмыг бэлтгэсэн
- Зургийн үндэс нь Nginx дүрс байх ёстой.
- Фолдерын агуулга
sa-frontend/build
зургийн хавтас руу хуулах шаардлагатайnginx/html
.
Хэрэв та энэ тайлбараас файл руу очвол Dockerfile
, дараа нь иймэрхүү харагдах болно:
FROM nginx
COPY build /usr/share/nginx/html
Таны харж байгаагаар энд бүх зүйл маш энгийн бөгөөд файлын агуулга нь уншихад ойлгомжтой, ойлгомжтой болж хувирдаг. Энэ файл нь системийг зураг авахыг хэлдэг nginx
дотор нь байгаа бүх зүйлтэй хамт, лавлахын агуулгыг хуулж ав build
лавлах руу nginx/html
.
Эндээс танд фолдероос файл хуулах хэрэгтэйг би яаж мэдэх вэ гэсэн асуулт гарч ирж магадгүй юм build
, өөрөөр хэлбэл зам хаанаас ирсэн /usr/share/nginx/html
. Үнэндээ энд бас төвөгтэй зүйл байхгүй. Үнэн хэрэгтээ холбогдох мэдээллийг эндээс авах боломжтой
▍Зургийг бүтээж, хадгалах газарт байршуулах
Дууссан зурагтай ажиллахын өмнө бид үүнийг зургийн агуулах руу түлхэх хэрэгтэй. Үүнийг хийхийн тулд бид үнэгүй үүлэн дүрс байршуулах Docker Hub платформыг ашиглах болно. Ажлын энэ үе шатанд та дараахь зүйлийг хийх хэрэгтэй.
- Суулгах
Docker . - Docker Hub вэбсайтад бүртгүүлнэ үү.
- Терминал дээр дараах тушаалыг ажиллуулж бүртгэлдээ нэвтэрнэ үү.
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
Одоо та лавлах руу очихын тулд терминалыг ашиглах хэрэгтэй sa-frontend
тэнд дараах тушаалыг ажиллуулна уу:
docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend .
Энд болон бусад ижил төстэй командуудад $DOCKER_USER_ID
Docker Hub хэрэглэгчийн нэрээр солигдох ёстой. Жишээлбэл, тушаалын энэ хэсэг дараах байдалтай байж болно. rinormaloku/sentiment-analysis-frontend
.
Энэ тохиолдолд энэ командыг үүнээс хасах замаар богиносгож болно -f Dockerfile
, учир нь энэ файл нь бидний энэ тушаалыг гүйцэтгэж байгаа хавтсанд аль хэдийн байгаа.
Дууссан зургийг хадгалах газар руу илгээхийн тулд бидэнд дараах тушаал хэрэгтэй.
docker push $DOCKER_USER_ID/sentiment-analysis-frontend
Үүнийг бөглөсний дараа зургийг үүлэн хадгалах санд амжилттай байршуулсан эсэхийг ойлгохын тулд Docker Hub дээрх хадгалах газруудынхаа жагсаалтыг шалгана уу.
▍Савыг ажиллуулж байна
Одоо хэн ч гэсэн нэртэй зургийг татаж аваад ажиллуулж болно $DOCKER_USER_ID/sentiment-analysis-frontend
. Үүнийг хийхийн тулд та дараах тушаалуудын дарааллыг ажиллуулах хэрэгтэй.
docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
Одоо контейнер ажиллаж байна, бид өөрт хэрэгтэй бусад зургийг бүтээх замаар үргэлжлүүлэн ажиллах боломжтой. Гэхдээ үргэлжлүүлэхээсээ өмнө дизайныг ойлгоцгооё 80:80
, энэ нь зураг эхлүүлэх команд дээр гарч ирэх бөгөөд ойлгомжгүй мэт санагдаж магадгүй.
- Эхний тоо
80
— энэ бол хостын портын дугаар (өөрөөр хэлбэл дотоод компьютер). - Хоёр дахь тоо
80
хүсэлтийг дамжуулах ёстой контейнерийн порт юм.
Дараах жишээг авч үзье.
Порт дамжуулах
Систем нь портоос ирсэн хүсэлтийг дахин чиглүүлдэг <hostPort>
боомт руу <containerPort>
. Энэ нь порт руу нэвтрэх явдал юм 80
компьютер порт руу дахин чиглэгддэг 80
сав.
Боомтоос хойш 80
локал компьютер дээр нээгдсэн бол та энэ компьютерээс програм руу хандах боломжтой localhost:80
. Хэрэв таны систем Docker-ийг дэмждэггүй бол програмыг Docker виртуал машин дээр ажиллуулж болох бөгөөд хаяг нь иймэрхүү харагдах болно. <docker-machine ip>:80
. Docker виртуал машины IP хаягийг мэдэхийн тулд та тушаалыг ашиглаж болно docker-machine ip
.
Энэ үед урд талын програмын контейнерийг амжилттай ажиллуулсны дараа та түүний хуудсыг хөтөч дээр нээх боломжтой байх ёстой.
▍.dockerignore файл
Хэрэглээний зургийг цуглуулж байна SA-Frontend
, энэ үйл явц маш удаан болж байгааг бид анзаарсан. Энэ нь зураг бүтээх контекстийг Docker дэмон руу илгээх ёстой учраас ийм зүйл тохиолддог. Бүтээлийн контекстийг төлөөлөх лавлах нь командын сүүлчийн аргумент гэж тодорхойлогддог docker build
. Манай тохиолдолд энэ командын төгсгөлд цэг байдаг. Энэ нь барилгын контекстэд дараах бүтцийг оруулахад хүргэдэг:
sa-frontend:
| .dockerignore
| Dockerfile
| package.json
| README.md
+---build
+---node_modules
+---public
---src
Гэхдээ энд байгаа бүх хавтаснуудаас бидэнд зөвхөн хавтас л хэрэгтэй build
. Өөр юу ч ачаалах нь цаг гарз. Та Docker-д аль санг үл тоомсорлохыг хэлж өгснөөр бүтээцийг хурдасгаж болно. Үүнийг хийхийн тулд бидэнд файл хэрэгтэй .dockerignore
. Та, хэрэв та файлыг мэддэг бол .gitignore
, энэ файлын бүтэц нь танил мэт санагдаж магадгүй. Энэ нь зураг бүтээх систем үл тоомсорлож болох сангуудын жагсаалтыг гаргадаг. Манай тохиолдолд энэ файлын агуулга дараах байдалтай байна.
node_modules
src
public
файл .dockerignore
файлтай нэг хавтсанд байх ёстой Dockerfile
. Одоо зургийг бүтээхэд хэдхэн секунд зарцуулагдана.
Одоо Java програмын зураг дээр ажиллацгаая.
▍Java програмд зориулсан контейнер дүрсийг бүтээх
Контейнерийн дүрсийг бүтээхэд хэрэгтэй бүх зүйлээ та аль хэдийн сурчихсан байна. Тийм ч учраас энэ хэсэг маш богино байх болно.
Файлыг нээнэ үү Dockerfile
төслийн хавтсанд байгаа sa-webapp
. Хэрэв та энэ файлын текстийг уншвал дотор нь түлхүүр үгсээс эхлээд зөвхөн хоёр шинэ бүтэц харагдах болно ENV
и EXPOSE
:
ENV SA_LOGIC_API_URL http://localhost:5000
…
EXPOSE 8080
Түлхүүр үг ENV
Docker контейнер доторх орчны хувьсагчдыг зарлах боломжийг танд олгоно. Ялангуяа манай тохиолдолд энэ нь текстийн шинжилгээ хийдэг програмын API-д хандах URL-г зааж өгөх боломжийг олгодог.
Түлхүүр үг EXPOSE
Docker-д порт нээхийг хэлэх боломжийг танд олгоно. Бид програмыг ажиллуулах явцад энэ портыг ашиглах болно. Эндээс та үүнийг анзаарч болно Dockerfile
өргөдөл гаргах SA-Frontend
тийм тушаал байхгүй. Энэ нь зөвхөн баримт бичгийн зориулалттай, өөрөөр хэлбэл, энэ барилга нь уншихад зориулагдсан болно Dockerfile
.
Зургийг бүтээж, хадгалах газар руу түлхэх нь өмнөх жишээн дээрхтэй яг адилхан харагдаж байна. Хэрэв та өөрийн чадвардаа бүрэн итгэлтэй биш байгаа бол холбогдох тушаалуудыг файлаас олж болно README.md
хавтсанд sa-webapp
.
▍Python програмд зориулсан контейнер дүрсийг бүтээх
Хэрэв та файлын агуулгыг харвал Dockerfile
хавтсанд sa-logic
, тэгвэл та тэндээс өөртөө шинэ зүйл олохгүй. Зургийг бүтээх, хадгалах газар руу илгээх командууд нь танд аль хэдийн танил болсон байх ёстой, гэхдээ манай бусад програмуудын нэгэн адил тэдгээрийг файлаас олж болно. README.md
хавтсанд sa-logic
.
▍ Контейнерт суулгасан програмуудыг турших
Та туршиж үзээгүй зүйлдээ итгэж болох уу? Би ч чадахгүй. Бид савнуудаа туршиж үзье.
- Програмын савыг ажиллуулцгаая
sa-logic
порт дээр сонсохоор тохируулна уу5050
:docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
- Програмын савыг ажиллуулцгаая
sa-webapp
порт дээр сонсохоор тохируулна уу8080
. Нэмж дурдахад, бид Python програм Java програмын хүсэлтийг сонсох портыг орчны хувьсагчийг дахин хуваарилах хэрэгтэй.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
Docker контейнер эсвэл виртуал машины IP хаягийг хэрхэн олж мэдэхийг хүсвэл файлыг үзнэ үү
Програмын савыг ажиллуулцгаая sa-frontend
:
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
Одоо бүх зүйл хөтөч дээрх хаяг руу очиход бэлэн боллоо localhost:80
мөн програмыг туршиж үзээрэй.
Хэрэв та портоо сольсон бол гэдгийг анхаарна уу sa-webapp
, эсвэл хэрэв та Docker виртуал машин ажиллуулж байгаа бол файлыг засварлах шаардлагатай болно App.js
хавтаснаас sa-frontend
аргын IP хаяг эсвэл портын дугаарыг өөрчлөх замаар analyzeSentence()
, хуучирсан мэдээллийн оронд одоогийн мэдээллийг орлуулах. Үүний дараа та зургийг дахин угсарч, ашиглах хэрэгтэй.
Бидний хэрэглээний диаграм одоо иймэрхүү харагдаж байна.
Бичил үйлчилгээ нь саванд ажилладаг
Дүгнэлт: яагаад бидэнд Кубернетес кластер хэрэгтэй байна вэ?
Бид дөнгөж сая файлуудыг шалгасан Dockerfile
, хэрхэн дүрс бүтээж, тэдгээрийг Docker репозитор руу түлхэх талаар ярилцав. Нэмж дурдахад бид файлыг ашиглан зургийн угсралтыг хэрхэн хурдасгах талаар сурсан .dockerignore
. Үүний үр дүнд манай микро үйлчилгээнүүд одоо Docker контейнерт ажилладаг. Энд танд яагаад Кубернетес хэрэгтэй байгаа талаар бүрэн үндэслэлтэй асуулт гарч ирж магадгүй юм. Энэ материалын хоёр дахь хэсгийг энэ асуултад хариулахад зориулах болно. Энэ хооронд дараах асуултыг анхаарч үзээрэй.
Текст дүн шинжилгээ хийх манай вэб програм дэлхий даяар алдартай болсон гэж бодъё. Түүнд минут тутамд сая сая хүсэлт ирдэг. Энэ нь бичил үйлчилгээ гэсэн үг юм sa-webapp
и sa-logic
асар их ачаалалтай байх болно. Бичил үйлчилгээ ажиллуулж буй контейнеруудыг хэрхэн томруулах вэ?
Эх сурвалж: www.habr.com