ααΆαααααΎααααααΎα Habr ααΆααααααΎαααααααααααα½αα
Kubernetes α αΎαααΎαααΈαααΆααααα»αααΆαααΆααααΆαααααα»αααααΎαααααΌααα αααα»αααΆα ααΆα!
Kubernetes ααΊααΆααααα½αα α ααα»α’αααΈααΆαααΆαααΆααΆααααααααΆααα±αααααα»αα αααΎαααΎααααΈααααΎααΆααα αααα»ααααααααα αααααααααααααΆααααΆααα’αΆα ααααΎααΆααα αΆαααα αα αααα·ααααΆααααααα»αααααααααααα»ααααΆααααα?
ααααα·αααΎα’αααααααααααΆ Kubernetes α’αΆα
αααααΆααααΆαααΆαααα αα αααα»αααααΎα±ααα’αααααααΆααΆαααααΎααΆααααααα½αα―αα ααΆααααααΆ αααααΆαααααΆααααααΆααααααΆααααα α’αααααΉαα’αΆα
ααααΎαααΆααααααα·ααΈαααααα’ααααΎααααΆααΈααααΌαα
αααα»αα
ααααα Kubernetes α αααα»αα’αΆα
ααΆααΆααΆα αααααααΆαααα·ααα
αααα»ααα·ααΈααΆαααααααΌα
ααααΆααααααα»αααααΎαα
ααΈααα ααααααα»αααααααα’αα·αα·ααααααααΎαααΈααααααααΎααΆαααΆαα½α Kubernetes α ααΎα’αααΈααααΎα±ααααΆαααααΆαααααα»αααΈα’αααααα? ααΆααα·αααΏαααΆα
αααΎαα ααΌα
αααα αααααΆααααΆαααααααΆαα
αααΎαα
αΆααααααΎααααααΆαααααααα’αααΈααΏαααΆαααα - ααααααα·ααααα Kubernetes αα·ααααααααα·αααααααΆααααααααΆ kubectl α α’ααααα·ααααααα’αααααααΆαααααααααααααΆα’αααα’αΆααααααα½ααααααΆαααΆαα½αααΆαα’αα·αααααααααααα·ααΈ ααααΆααααααΈααααΌ αα·ααα»αααΊααα Docker α ααΎαααΉααα
αα·ααΈαααααα ααΆααααΌα ααΌααα·ααΆαα’αααΈααααααααΎαααΆααααααα·ααΈαααααα’ααααΎ microservices αα
ααΎαα»αααααΌαααα αααααΆααααααΎαααΉααα·αα·αααααΎαααΆααααΆαααΌαααΆααα»αααΊααααααααΆααααααΆααΈααααΌααΈαα½ααα α αΎααααααΆααααΈααα ααΎαααΉαααααΆαα Kubernetes αα·ααα·ααΆαααΎααΆαααΆααα±ααααααΎααααΆαααααααα·ααΈαααααα’ααααΎ microservices αα
αααα»αα
αααααααααααααααααααα Kubernetesα
αα·ααΈααΆαααααααα ααΆαα½αααΉααα·ααΈααΆαααααααααα·α αααααα αααα Kubernetes ααΉααααααα±ααααααα ααααΆααααααΉαα’αααΈα’αααΈααααααα»αααΎαα‘αΎααααααα»αααααΆαααααααααΌαααΆα ααΎααααΈαααααΈαααααααα’αααΈαααααααααΆαααααΌαααΆααααα ααααΆαααΆαααααα αααα»α Kubernetes α Kubernetes αα·αβααΆβαα αα αααα·ααααΆβααΆααααβαα½αβαααβαααααβααΆβα’αααβααΆβαααβα ααβααααΆααβααααΆαβααΆβααΉαβααΈβααααααβαα·αβααααβαααβααΆβααααΌαβααΆαβααααΎα
α₯α‘αΌαααα ααααα·αααΆαααΆαααααΆαααααα α αΌαααΎααα ααααΎααΆα α αΎααα·ααΆαα’αααΈαααααα·ααΈαααααΎαααΉαααααΎααΆαααΆαα½αα
αααααα·ααΈαα·ααααα
αααααα·ααΈααααααΎαααΉαα’αα»αααααα»αααΆααααα½αααα»αααααα ααΆααααΌαα αααΆααααααΆααΆααααα αΌα αααααααα½α αααααΆααααΈααααααααααΎα§ααααααα·ααΆαα’ααααα ααΆααααΎααΆααα·ααΆαααααααα ααααΆααααααααααα αααααα½αααΆαααΆαααΆααααααααΈα’αΆαααααα·αα·ααΆα’αΆααααααααααα’ααααα·ααααααααααα ααααααααα»ααΆααααΆαααα½αα
αααααΆα’αααΈααααααα’α½α ααααΆαααααααααα·ααΈαααααΎααα α
αααααα·ααΈαααααΆααα·ααΆαα’αΆαααααα
ααΆααααααααα αα ααααα αααααα·ααΈααΆαααΈααααΌααααΆα ααα½αααΈ αααααΈαα½ααα’αΆα αααααααΆααααα αΆαα½αα ααα½αααααΆααα·α αα α
- SA-Frontend ααΊααΆαααΆαααΈααααααααΆα Nginx ααααααααΎα―αααΆααα·αα·αααα React α
- SA-WebApp ααΊααΆαααααα·ααΈααα ααααααααααααααααα»α Java ααααααααααααααααΎααΈαααααααΆααα»αα
- SA-Logic ααΊααΆαααααα·ααΈ Python αααααααΎααΆααα·ααΆαααααααα ααααΆα
ααΆααΆααΆαααααΆαααααα»αααΆαααααααααΆααααΆααααΆααΈααααΌαα·αααΆααα αααα»αααΆαα―ααααα αα½αααα’αα»αααααααα·ααα "ααΆααααα ααααΆααα·α αα " ααα»αααααα½ααααααα»αααααααα½αα αΆαααΆα αααααΌαααααΎα’ααααααααααααΆαα αα·ααα ααα
ααα αΌααα·αααααααα
αααα»ααααααα·ααΈ
αα αααα»αααααΆααααΆαααΆαααΎ α’αααα’αΆα ααΎαααΎαααααΆααααΆαααααααααααααα ααααααα αΆαααΈααα αΌααα·αααααααα αααα»ααααααα·ααΈα α αΌαααααααα½αααα α»αα
- αααααα·ααΈαα»αααααααΎαα»αα―αααΆαααΈαααΆαααΈααα
index.html
(ααααα αααα»αααααααα»ααααα αααααααα·ααΈ React) α - α’αααααααΎααααΆααααααΎα’ααααααααααΆαα½ααααααα·ααΈ ααααααααΆαα±ααααΆαααΆαα α αα ααΆαααααααα·ααΈαααααΆαααα’ααααΎ Spring α
- αααααα·ααΈαααααΆααααααΌαααααααααΎααΎααααΈαααα’ααααααα αααααα·ααΈ Python α
- αααααα·ααΈ Python αα·ααΆαα’αΆααααααααα’ααααα α αΎααααα‘ααααααααααΆααΆαααααΎααααα ααΉαααααΎα
- αααααα·ααΈ Spring ααααΎααΆαααααΎααααα ααΆαααααααα·ααΈ React (ααααααα αΆαααααααααα’ααααααααααΆαααααα ααΆααα’αααααααΎααααΆαα)α
ααΌααααααΆαααααααα·ααΈααΆααα’αααααα’αΆα
ααααΆα
αααα»αααααΎαααΆααααααα·ααΈαααααα’ααααΎααααΆααααΆαααΌα αα ααΎαααΆαααΈαααΌαααααΆα
ααΎααααΈα±αααααααα·ααΈααααΎαααΆα ααΎαααααΌαα αΆααααααΎαααααΆααααααΈααααΌααΆααααΈα α αΌαα αΆααααααΎαααΆαα½αααΉααα½αααααα’αΆααααα»α - αααααα·ααΈαααααααΆααα»αα
β αααα α React αααααΆααααΆαα’αα·ααααααααΌαααααΆα
ααΎααααΈααααΎαααΆααααααα·ααΈ React α’αααααααΌαααα‘αΎα Node.js framework αα·α 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 α
αααααα·ααΈ React αααααΎααααααΆαααΈααα Nginx
ααααα·αααΎα’αααα₯α‘αΌαααααααα
αΌαα’αααΈαα½ααα
αααα»αααΆα 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. URL αααααααΎ POST ααααΌαααΆαααααΎα‘αΎαα α’αΆααααααΆααααααααΌαααΆαααααααααΆααΆαααααα·ααΈααααααα»ααααα αΆαααααΎααααααα
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 α
ααΎαααααΌαααΆααααααα·ααΈ Spring αααα’αΆα
ααα½αααααααΎ POST
β ααΆαααα‘αΎααααααα·ααΈαααααΆαααα’ααααΎ Spring
ααΎααααΈααΆααα±ααααααΎααααΆαααααααα·ααΈ Spring α’αααααααΌαααΆα JDK8 αα·α Maven αα·αα’αααααα·ααααΆααααααΆαααααααααΆαααααΉαααααΌαα αααααΆααααΈα’αααααα‘αΎαααΆααα’ααααα α’αααα’αΆα ααααααααΎααΆαααΎααααααααααααΎαα
β ααΆαααα ααα αααααααα·ααΈαα αααα»αα―αααΆαααΆα
αα»ααα αααααααΎααααΆααΈααα
ααΆααααα―αααΆα sa-webapp
α αΎααααα
αΌαααΆααααααααΆααΆααααααα
mvn install
αααααΆααααΈααααα·ααααα·ααΆααααααααΆααααα
αααα»ααα sa-webapp
ααααΉαααααΌαααΆααααααΎα target
. αααααΊααΆααααααααααααααα·ααΈ Java ααΉαααΆαααΈααΆαααα
ααα
αααααα»αα―αααΆα jar ααααΆααααα―αααΆα 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();
}
}
- αα
αααα»α S
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 containersα αααααΊα αΆαααΆα αααΎααααΈαααα ααααααα·ααΈα±ααααααΎαααΆααα αααα»αα ααααα Kubernetes α
αα»α Docker
ααΌαααΆααα»αααΊαααααΊααΆαααα ααααααα·ααααα·αααααΆαααααααααααΆα αααα»αααααααα½αα―α αααααΆααααααα·ααΈ ααααα½ααααα αΌαα’αααΈαααααααααΆααααα αΆαααΆα ααααααΆααααααΎαααΆαααΆα ααΌααααααα·ααΈ ααα·ααΆααΆααααααααΎαααΆα α§ααααααααααααα αα·ααααααΆααα ααΆααααααα αααααα·ααΈαααααΆααα»αααΊαααα’αΆα ααααΎααααΆααααΆαααΆαααα αααα»αααα·ααααΆα Linux αα·α Windows α αΎαααΉαααααΎαααΆαααΌα ααααΆααΆαα·α αα ααααα·ααα·αααΈα αααααΆαα ααΆααααααααα
αααααΆααααααΆαα»αααΊαααα’αΆα ααααΎαααΆαααΎαα»αααααΌαααααΆαα½α αα½αααΆαααααΆαααΈαααααα·ααααα α αΎααα αααα»αααα·ααΆααΆαααΆαα½α αααααα·ααΈαααααΆααα αααα»ααα½αααΆααΉαααααΎαααΆαααΌα ααααΆαααα
ααΎααααΈααααααααααΈαααααααα·ααααααααα»αααΊααα α αΎααααααααααα½αααΆαα ααΉααα·ααΈααααααααααΎααααΈααααΎαααΆααααααα·ααΈ ααΌαααΎαα§ααΆα αααααααΆααααααΎαααααα·ααΈ React αααααααΎαααΆαααΈααα·αααα·α αα·ααα»αααΊαααα
β αααααΎα―αααΆααα·αα·αααααααααααα·ααΈ React αααααααΎαααΆαααΈααα·αααα·α
ααΆαααααΆααΆααααα αααΆαααααΆαα―αααΆααα·αα·αααααααααααΎαααΆαααΈααα·αααα·α ααΎαααΉααα½ααααααααΌααα»ααα·ααααα·ααΌα ααΆααααααα
- ααΆαααααΎααααΆααααααΆααα·αααΆαααααα·αααααΆα αααααΆααααΆαααΈααα·αααα·αααΈαα½ααααΊααΆααααααααααααα·ααααα·ααΆαααααααα
- ααΆαα’αΆααααααααααα·ααΆα α’αααΈβαααβααααΎαααΆαβααΎβαα»αααααΌαααβαααα»αβαααα»αβαα½αβα ααα½αβαααα ααβααΆβαα·αβααααΎαααΆαβαα βααΎβαααΆαααΈαβαααααΎβααα·αααααβααα
- ααΆαααααΎααΆαααααααΆαααΊα αα·αααΉαααα’ααααααΆααααααααααααΆααααΆαααΈααα·αααα·αα
αααΆαααΈααααααααΆα Nginx αααααΎα―αααΆααα·αα·ααααααααααα»αααααΎαααΆααααα»ααααΆαααΈααα·αααα·α
ααααα·αααΎαα»αααΊαααααααΌαααΆαααααΎααΎααααΈαααααααΆααααα αΆααααααααααΆααα ααΎααααααααααΆαα½ααααΆαααΈααα·αααα·α ααΆαααααΆααααΆααααααα’αΆα ααααΌαααΆαααααααααααΆααααΎαα
- ααΆαααααΎααααΆααααααΆαααααααααααααα·αααααΆαα ααααΎααΆαααΆαα½αααααααααααααα·ααααα·ααΆααααααααΎ Docker α
- α―αααΆαααααΆααααααα·ααΆα αα»αααΊααααααα’αααα’αα·ααααααα’αΆα ααααΎαααΆαααΎαα»αααααΌααααααααα½αααααααΆααααΉαααααΎαααΆααααααααΈααααααα
- ααΆαααΆαααααααΆαααααααααααΆαααΆααααααΆαααααΎααααΆαααααααΆααααΌαααΆαα
αααΆαααΈααααααααΆα Nginx αααααΎα―αααΆααα·αα·ααααααααααα»αααααΎαααΆααααα»ααα»αααΊααα
ααΎαααΆααααααααααααααΆαααΈααα·αααα·α αα·ααα»αααΊαααααΎα
ααα»α
αα½αα
ααα½αααα»ααααα ααα»ααααααΌααααΈααααΆαααααααααΆααααΎααααΈααα½αααΆαααΌαα’αΆαααααααααααΆααααΆαααααΆαααααα»αα
β ααΆααααααΎαααΌαααΆααα»αααΊααααααααΆαααααααα·ααΈ React
αααα»αα’ααΆαααΌαααααΆααααα»α Docker ααΊααΆα―αααΆα Dockerfile
. αα
ααΎαα―αααΆαααα ααΌαααΆαααΌαααααΆααααα»αααΊαααααααΌαααΆααααααααΆ αααααΆααααααααΆααααααΆαααααΆαααααΌαααΆααα½ααααα
αΌαααααααα αΆαααΈαααααααααΎααα»αααΊααααααααΉαααααααααααΌαααΆααααααααααα·ααΈα
αα»ααααααΎαα
αΆααααααΎαααααΎααΆαααΆαα½αα―αααΆα Dockerfile
α
αα
αΆαααΌαα’αααΈαααααΎαααΆαααααΎααΎααααΈαααα
αα―αααΆααααααααα·ααΈ React αααααΆαααααα»αα‘αΎααα
ααΆαααααΆαααΈααα Nginxα
- ααΆααααΆααααα
αααααααα·ααΈ React (
npm run build
). - α αΆααααααΎααααΆαααΈααα Nginx α
- ααΆαα
ααααααΆαα·ααΆααααα―αααΆα
build
ααΈααααααααsa-frontend
αα αααααΆαααΈαααnginx/html
.
ααΆααααααααα α’αααα’αΆα ααΎαααΎαααΆαααααααααΆαααΆαααΆααααααΎααα»αααΊααα αα·ααααααααΆαααΆαααΎαααααΆαα’αα»αααααα ααΎαα»αααααΌαααααΌαααααΆαα
β αααα»ααααα α Dockerfile αααααΆαααααααα·ααΈ SA-Frontend
ααα
ααααΈααααΆααααααααΌααααα
αΌααααα»α 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 α αα ααααΆααααΆαααααΆαααΆαααα α’αααααααΌαααααΎααΌα ααΆααααααα
- ααα‘αΎα
Dockers . - α α»αααααααα ααΎααα ααααα 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
. ααΎααααΈαααααααα’αΆααααααΆα IP αααααααΆαααΈααα·αααα·α Docker α’αααα’αΆα
ααααΎααΆααααααααΆ 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 α ααΆαα·ααααα
αααα»αααααΈααααααΎα ααΆα’αα»ααααΆαα±ααα’αααααααα URL ααΎααααΈα
αΌαααααΎ API αααααααα·ααΈαααααααΎααΆααα·ααΆαα’αααααα
ααΆααααααααΉα 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
ααΎααααΈααααααααααΈαααααααααααα’αΆααααααΆα IP αααααα»αααΊααα α¬ Docker VM ααΌαααΎαα―αααΆα
αααα
αΆααααααΎααα»ααααααα·ααΈ sa-frontend
:
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
α₯α‘αΌααααα’αααΈααααααααΆαααΊαα½α
ααΆααααΎααααΈαα»ααααα
αααα»ααααααα·ααΈαα»ααααα
ααΆααα’αΆααααααΆα localhost:80
αα·αααΆααααααααααα·ααΈα
ααΌαα
αααΆαααΆααααα·αααΎα’αααααααΆααααααΌαα
ααααααααΆαα sa-webapp
α¬ααααα·αααΎα’ααααααα»αααααΎαααΆα Docker VM α’αααααΉαααααΌαααααααα½αα―αααΆα App.js
ααΈαα sa-frontend
αααααααΆααααααΌαα’αΆααααααΆα IP α¬αααα
ααααααα»ααα·ααΈααΆααααα analyzeSentence()
αααααΆααααα½αααααααΆααα
αα
α»αααααααααα½αα±αααα·ααααααααααααααααΎα αααααΆααααΈαααα’αααααααΌααααααΌααααα»αααΌαααΆαα‘αΎααα·αα αΎαααααΎααΆα
αααααΊααΆα’αααΈαααααααΆααααΆααααααα·ααΈααααααΎαααΎααα ααΌα ααΆα₯α‘αΌααααα
ααααΆααΈααααΌααααΎαααΆααααα»ααα»α
ααα ααααΈααααααα α ααα»α’αααΈααΆαααΆααΎαααααΌαααΆαα ααααα Kubernetes?
ααΎαααΎααααα·αα·αααααΎαα―αααΆα Dockerfile
ααΆααα·ααΆαα’αααΈαααααααααΎαααΌαααΆα αα·ααα»ααα½αααΆαα
ααααΆαα Docker α ααΎαααΈαααααα ααΎαααΆααααααΈαααααααααΎαααααΏαααααΆααααα»αααΌαααΆααααααααΎα―αααΆα .dockerignore
. ααΆαααααα ααααΆααΈααααΌααααααΎαα₯α‘αΌαααααααα»αααααΎαααΆααα
αααα»α Docker containersα αα
ααΈααα α’ααααααα ααααΆααΆααααα½αααα ααα»ααααΆαααααα»αα’αααΈααΌαα ααα»αααααΎαααααΌαααΆα Kubernetes α α
ααααΎαα
αααααααα½ααααααΉαααααΌαααΆαα§αααα·αααααααααααΈααΈααααααααΆαααααα αααα»ααααααα ααΌααα·α
αΆαααΆαααα½αααΆααααααα
α
αΌααααααααΆαααααα·ααΈααα αααααααΆααα·ααΆαα’αααααααααααΎαααΆαααααΆααα
ααΆααΆαααααα·ααααΌααΆαααα·αααααα ααααΎααΆααααΆαααααααΆααααΆααααΆααΈα αααααΆααααααΆααααΆααΈααααΌ sa-webapp
ΠΈ sa-logic
ααΉααααα·ααα
αααααααΆαααΆαααΉααααααααααΎαα ααααααααΎααΆαααααααΆααα»ααααααααΎαααΆαααΈααααΌααααΆαααα?
ααααα: www.habr.com