ç§ãã¡ã®ãªã¯ãšã¹ãã«å¿ããŠãHabr ã¯ãããäœæããŸãã
Kubernetes ãã®äžã«æåã®åºçç©ãæ²èŒã§ããããšãå¬ããæããŸãã 賌èªããïŒ
Kubernetes ã¯ç°¡åã§ãã ãã®æè¡ã¯èª°ã§ãã»ãã®æ°æéã§ãã¹ã¿ãŒã§ããã®ã«ããªãéè¡ã¯ãã®åéã§åãããã«ç§ã«å€é¡ã®ãéãæãã®ã§ãããã?
Kubernetes ããããªã«ããã«ç¿åŸã§ãããçåãããå Žåã¯ãèªåã§ãã£ãŠã¿ãããšããå§ãããŸãã ã€ãŸãããã®å
容ããã¹ã¿ãŒãããšãKubernetes ã¯ã©ã¹ã¿ãŒã§ãã€ã¯ããµãŒãã¹ã«åºã¥ããã¢ããªã±ãŒã·ã§ã³ãå®è¡ã§ããããã«ãªããŸãã ããã¯ç§ãä¿èšŒã§ããŸãããªããªããç§ãã¯ã©ã€ã¢ã³ãã« Kubernetes ã®äœ¿ãæ¹ãæããã®ã«ããã§äœ¿çšããŠããã®ãšåãæ¹æ³è«ã ããã§ãã ãã®ã¬ã€ãã¯ä»ã®ã¬ã€ããšäœãéãã®ã§ãããã? å®ã¯ããããããããã§ãã ãã®ããããããã®è³æã®ã»ãšãã©ã¯ãKubernetes ã®æŠå¿µã kubectl ã³ãã³ãã®æ©èœãªã©ãç°¡åãªèª¬æããå§ãŸããŸãã ãããã®èšäºã®èè
ã¯ãèªè
ãã¢ããªã±ãŒã·ã§ã³éçºããã€ã¯ããµãŒãã¹ãããã³ Docker ã³ã³ãããŒã«ç²ŸéããŠããããšãåæãšããŠããŸãã å¥ã®éã«è¡ããŸãã ãŸããã³ã³ãã¥ãŒã¿ãŒäžã§ãã€ã¯ããµãŒãã¹ã«åºã¥ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããæ¹æ³ã«ã€ããŠèª¬æããŸãã 次ã«ãåãã€ã¯ããµãŒãã¹ã®ã³ã³ãã㌠ã€ã¡ãŒãžã®æ§ç¯ãèŠãŠãããŸãã ãã®åŸãKubernetes ã«ã€ããŠç解ããKubernetes ã«ãã£ãŠç®¡çãããã¯ã©ã¹ã¿ãŒå
ã®ãã€ã¯ããµãŒãã¹ã«åºã¥ãã¢ããªã±ãŒã·ã§ã³ã®ãããã€ã¡ã³ããåæããŸãã
Kubernetes ãžã®æ®µéçãªã¢ãããŒãã䌎ããã®ã¢ãããŒãã¯ãå¹³åçãªäººã Kubernetes ã§ãã¹ãŠãã©ã®ããã«åçŽã«é 眮ãããŠããããç解ããããã«å¿ èŠãªãäœãèµ·ãã£ãŠãããã«ã€ããŠã®æ·±ãç解ãæäŸããŸãã Kubernetes ã¯ããããç¿åŸããã人ãã©ãã§ã©ã®ããã«äœ¿çšãããããç¥ã£ãŠããã°ã確ãã«åçŽãªãã¯ãããžãŒã§ãã
ããŠãæ©éãäœæ¥ã«åãæãããããããæ±ãã¢ããªã±ãŒã·ã§ã³ã«ã€ããŠè©±ããŸãããã
å®éšçã¢ããª
ç§ãã¡ã®ã¢ããªã±ãŒã·ã§ã³ã¯ XNUMX ã€ã®æ©èœã®ã¿ãå®è¡ããŸãã å ¥åãšã㊠XNUMX ã€ã®æãåãåãããã®åŸãããã¹ãåæããŒã«ã䜿çšããŠãã®æã®ææ åæãå®è¡ããç¹å®ã®ãªããžã§ã¯ãã«å¯Ÿããæã®äœæè ã®ææ çãªæ 床ã®è©äŸ¡ãååŸããŸãã
ãã®ã¢ããªã±ãŒã·ã§ã³ã®ã¡ã€ã³ ãŠã£ã³ããŠã¯æ¬¡ã®ããã«ãªããŸãã
ææ
åæ Web ã¢ããªã±ãŒã·ã§ã³
æè¡çãªèŠ³ç¹ããèŠããšãã¢ããªã±ãŒã·ã§ã³ã¯ XNUMX ã€ã®ãã€ã¯ããµãŒãã¹ã§æ§æãããŠããããããããç¹å®ã®äžé£ã®ã¿ã¹ã¯ã解決ããŸãã
- SA-Frontend ã¯ãReact éçãã¡ã€ã«ãæäŸãã Nginx Web ãµãŒããŒã§ãã
- SA-WebApp ã¯ãããã³ããšã³ãããã®ãªã¯ãšã¹ããåŠçãã Java ã§æžããã Web ã¢ããªã±ãŒã·ã§ã³ã§ãã
- SA-Logic ã¯ãããã¹ãææ åæãå®è¡ãã Python ã¢ããªã±ãŒã·ã§ã³ã§ãã
ãã€ã¯ããµãŒãã¹ã¯åç¬ã§ååšããããã§ã¯ãªãããšã«æ³šæããããšãéèŠã§ãã 圌ãã¯ãè·åã®åé¢ãã®èããå®è£ ããŠããŸãããåæã«çžäºã«å¯Ÿè©±ããå¿ èŠããããŸãã
ã¢ããªã±ãŒã·ã§ã³å
ã®ããŒã¿ã®æµã
äžã®å³ã§ã¯ãã¢ããªã±ãŒã·ã§ã³å ã®ããŒã¿ ãããŒã瀺ããã·ã¹ãã ã®çªå·ä»ãã¹ããŒãžã瀺ãããŠããŸãã ããããåé¡ããŠã¿ãŸããã:
- ãã©ãŠã¶ããµãŒããŒã«ãã¡ã€ã«ããªã¯ãšã¹ãããŸã
index.html
(ããã«ãããReact ã¢ã㪠ããã±ãŒãžãããŒããããŸã)ã - ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ãšå¯Ÿè©±ãããšãSpring ã«åºã¥ã Web ã¢ããªã±ãŒã·ã§ã³ãåŒã³åºãããŸãã
- Web ã¢ããªã±ãŒã·ã§ã³ã¯ãããã¹ãã解æãããªã¯ãšã¹ãã Python ã¢ããªã±ãŒã·ã§ã³ã«è»¢éããŸãã
- Python ã¢ããªã±ãŒã·ã§ã³ã¯ããã¹ãã®ææ ãåæããçµæããªã¯ãšã¹ããžã®å¿çãšããŠè¿ããŸãã
- Spring ã¢ããªã±ãŒã·ã§ã³ã¯å¿çã React ã¢ããªã±ãŒã·ã§ã³ã«éä¿¡ããŸã (次ã«ã解æãããããã¹ãã®çµæããŠãŒã¶ãŒã«è¡šç€ºãããŸã)ã
ããããã¹ãŠã®ã¢ããªã±ãŒã·ã§ã³ã®ã³ãŒãã¯æ¬¡ã®ãšããã§ãã
ããŒã«ã«ãã·ã³äžã§ã®ãã€ã¯ããµãŒãã¹ã«åºã¥ãã¢ããªã±ãŒã·ã§ã³ã®å®è¡
ã¢ããªã±ãŒã·ã§ã³ãåäœããã«ã¯ãXNUMX ã€ã®ãã€ã¯ããµãŒãã¹ããã¹ãŠéå§ããå¿ èŠããããŸãã ãã®äžã§æãåªããããã³ããšã³ã ã¢ããªã±ãŒã·ã§ã³ããå§ããŸãããã
âããŒã«ã«éçºçšã« React ãã»ããã¢ãããã
React ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããã«ã¯ãNode.js ãã¬ãŒã ã¯ãŒã¯ãš NPM ãã³ã³ãã¥ãŒã¿ãŒã«ã€ã³ã¹ããŒã«ããå¿
èŠããããŸãã ããããã¹ãŠã€ã³ã¹ããŒã«ããããã¿ãŒããã«ã䜿çšããŠãããžã§ã¯ã ãã©ã«ããŒã«ç§»åããŸãã sa-frontend
次ã®ã³ãã³ããå®è¡ããŸãã
npm install
ãã©ã«ãå
ã§ãã®ã³ãã³ããå®è¡ãããš node_modules
React ã¢ããªã±ãŒã·ã§ã³ã®äŸåé¢ä¿ãããŒãããããã®ã¬ã³ãŒãããã¡ã€ã«ã«ä¿åãããŸã package.json
ã åããã©ã«ããŒã«äŸåé¢ä¿ãããŠã³ããŒãããåŸã次ã®ã³ãã³ããå®è¡ããŸãã
npm start
ããã ãã§ãã React ã¢ããªãå®è¡äžã«ãªãããã©ãŠã¶ãŒã®ã¢ãã¬ã¹ã«ç§»åããŠã¢ã¯ã»ã¹ã§ããŸãã localhost:3000
ã 圌ã®ã³ãŒãã®äœããå€æŽããããšãã§ããŸãã ãããã®å€æŽã®å¹æã¯ãã©ãŠã¶ãŒã§ããã«ç¢ºèªã§ããŸãã ããã¯ãã¢ãžã¥ãŒã«ã®ããããããããã亀æã®ãããã§å¯èœã«ãªããŸãã ãã®ãããã§ãããã³ããšã³ãéçºã¯ã·ã³ãã«ã§æ¥œãããã®ã«ãªããŸãã
âå®çšŒåçšã« React ã¢ããªãæºåãã
å®éã« React ã¢ããªã䜿çšããã«ã¯ããããéçãã¡ã€ã«ã®ã»ããã«å€æããWeb ãµãŒããŒã䜿çšããŠã¯ã©ã€ã¢ã³ãã«æäŸããå¿ èŠããããŸãã
React ã¢ããªããã«ãããã«ã¯ãå床ã¿ãŒããã«ã䜿çšããŠããã©ã«ããŒã«ç§»åããŸãã sa-frontend
次ã®ã³ãã³ããå®è¡ããŸãã
npm run build
ããã«ããããããžã§ã¯ããã©ã«ããŒå
ã«ãã£ã¬ã¯ããªãäœæãããŸã build
ã ããã«ã¯ãReact ã¢ããªã±ãŒã·ã§ã³ãåäœããããã«å¿
èŠãªãã¹ãŠã®éçãã¡ã€ã«ãå«ãŸããŸãã
âNginx ã§éçãã¡ã€ã«ãæäŸãã
ãŸããNginx Web ãµãŒããŒãã€ã³ã¹ããŒã«ããŠå®è¡ããå¿
èŠããããŸãã 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 ã«åºã¥ã㊠Web ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããå¿
èŠããããŸãã
POST ãªã¯ãšã¹ããåãå
¥ããããšãã§ãã Spring ã¢ããªã±ãŒã·ã§ã³ãå¿
èŠã§ã
âSpring ã«åºã¥ãã Web ã¢ããªã±ãŒã·ã§ã³ã®ã»ããã¢ãã
Spring ã¢ããªã±ãŒã·ã§ã³ããããã€ããã«ã¯ãJDK8 ãš Mavenãããã³é©åã«æ§æãããç°å¢å€æ°ãå¿ èŠã§ãã ãããããã¹ãŠã€ã³ã¹ããŒã«ãããããããžã§ã¯ãã®äœæ¥ãç¶ããããšãã§ããŸãã
âã¢ããªã±ãŒã·ã§ã³ãjarãã¡ã€ã«ã«ããã±ãŒãžåãã
ã¿ãŒããã«ã䜿çšããŠãã©ã«ããŒã«ç§»åããŸã 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
ã ãããã¯äžç·ã«ãªã£ãŠãããã¹ãåæãå®è¡ãããã€ã¯ããµãŒãã¹ãåŒã³åºãããã®ã¢ãã¬ã¹ã圢æããŸãã
âããããã£å€ã®èšå®
Spring ã§ã¯ãããããã£å€ã®ããã©ã«ãã®ãœãŒã¹ã¯ãã¡ã€ã«ã§ã 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 Web ã¢ããªã±ãŒã·ã§ã³ã«äŒããŸãã
ç§ãã¡ã®ç掻ãè€éã«ããªãããã«ã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 ã¯ã©ã¹ã¿ãŒã§ã¢ããªã±ãŒã·ã§ã³ãå®è¡ããæºåãããããã«å¿ èŠã§ãã
Dockerã³ã³ãã
ã³ã³ãã㌠ã€ã¡ãŒãžã¯ãã¢ããªã±ãŒã·ã§ã³ãå«ã軜éã®èªå·±å®çµåã®å®è¡å¯èœããã±ãŒãžã§ããã¢ããªã±ãŒã·ã§ã³ã«ã¯ãã¢ããªã±ãŒã·ã§ã³ ã³ãŒããã©ã³ã¿ã€ã ç°å¢ãã·ã¹ãã ããŒã«ãšã©ã€ãã©ãªãèšå®ãªã©ãã¢ããªã±ãŒã·ã§ã³ã®å®è¡ã«å¿ èŠãªãã®ããã¹ãŠå«ãŸããŠããŸãã ã³ã³ããåãããããã°ã©ã 㯠Linux ç°å¢ãš Windows ç°å¢ã®äž¡æ¹ã§äœ¿çšã§ããã€ã³ãã©ã¹ãã©ã¯ãã£ã«é¢ä¿ãªãåžžã«åãããã«åäœããŸãã
ããã¯ãã³ã³ãããŒãæ¬çªãµãŒããŒãå«ãä»»æã®ã³ã³ãã¥ãŒã¿ãŒäžã§å®è¡ã§ããã©ã®ç°å¢ã§ããã³ã³ãããŒã«å«ãŸããã¢ããªã±ãŒã·ã§ã³ãåãããã«åäœããããšãæå³ããŸãã
ã³ã³ãããŒã®æ©èœã調ã¹ãã¢ããªã±ãŒã·ã§ã³ãå®è¡ããä»ã®æ¹æ³ãšæ¯èŒããããã«ãä»®æ³ãã·ã³ãšã³ã³ãããŒã䜿çšã㊠React ã¢ããªã±ãŒã·ã§ã³ãæäŸããäŸãèŠãŠã¿ãŸãããã
âä»®æ³ãã·ã³ã䜿çšãã React ã¢ããªã±ãŒã·ã§ã³ã®éçãã¡ã€ã«ã®æäŸ
ä»®æ³ãã·ã³ã䜿çšããŠéçãã¡ã€ã«ã®ã¡ã³ããã³ã¹ãçµç¹ããããšãããšã次ã®ãããªæ¬ ç¹ãçºçããŸãã
- åä»®æ³ãã·ã³ã¯å®å šãªãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã§ããããããªãœãŒã¹ãéå¹ççã«äœ¿çšãããŸãã
- ãã©ãããã©ãŒã ã®äŸåæ§ã äžéšã®ããŒã«ã« ã³ã³ãã¥ãŒã¿ã§åäœãããã®ã¯ãéçšãµãŒããŒã§ã¯åäœããªãå¯èœæ§ããããŸãã
- ä»®æ³ãã·ã³ ãœãªã¥ãŒã·ã§ã³ã®ã¹ã±ãŒãªã³ã°ãé ãããªãœãŒã¹ã倧éã«æ¶è²»ããã
ä»®æ³ãã·ã³ã§å®è¡ãããéçãã¡ã€ã«ãæäŸãã Nginx Web ãµãŒããŒ
åæ§ã®åé¡ã解決ããããã«ã³ã³ãããŒã䜿çšãããšãä»®æ³ãã·ã³ãšæ¯èŒããŠã次ã®å©ç¹ã«æ³šç®ã§ããŸãã
- ãªãœãŒã¹ã®å¹ççãªäœ¿çš: Docker ã䜿çšããŠãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ãæäœããŸãã
- ãã©ãããã©ãŒã ã®ç¬ç«æ§ã éçºè ãèªåã®ã³ã³ãã¥ãŒã¿ãŒäžã§å®è¡ã§ããã³ã³ãããŒã¯ãã©ãã§ãå®è¡ã§ããŸãã
- ã€ã¡ãŒãž ã¬ã€ã€ãŒã䜿çšãã軜éã®å±éã
ã³ã³ããå
ã§å®è¡ãããéçãã¡ã€ã«ãæäŸãã Nginx Web ãµãŒããŒ
ããã§ã¯ä»®æ³ãã·ã³ãšã³ã³ãããŒãããã€ãã®ç¹ã§æ¯èŒããã ãã§ãããã³ã³ãããŒã®åŒ·ã¿ãç解ããã«ã¯ããã§ãååã§ãã
âReact ã¢ããªã®ã³ã³ãã ã€ã¡ãŒãžã®æ§ç¯
Docker ã³ã³ããã®åºæ¬çãªæ§æèŠçŽ ã¯ãã¡ã€ã«ã§ãã Dockerfile
ã ãã®ãã¡ã€ã«ã®å
é ã«ã¯ã³ã³ããã®åºæ¬ã€ã¡ãŒãžãèšé²ããã次ã«ã¢ããªã±ãŒã·ã§ã³ã®ããŒãºãæºããã³ã³ããã®äœææ¹æ³ã瀺ãäžé£ã®æ瀺ãå«ãŸããŸãã
ãã¡ã€ã«ã®æäœãå§ããåã« Dockerfile
ãReact ã¢ããªã±ãŒã·ã§ã³ã®ãã¡ã€ã«ã Nginx ãµãŒããŒã«ã¢ããããŒãããããã«æºåããããã«è¡ã£ãããšãæãåºããŠãã ããã
- React ã¢ã㪠ããã±ãŒãžã®æ§ç¯ (
npm run build
). - NginxãµãŒããŒãèµ·åããŸãã
- ãã£ã¬ã¯ããªã®å
容ãã³ããŒãã
build
ãããžã§ã¯ããã©ã«ããŒããsa-frontend
ãµãŒããŒãã©ã«ããŒã«nginx/html
.
以äžã«ãã³ã³ãããŒã®äœæãšããŒã«ã« ã³ã³ãã¥ãŒã¿ãŒäžã§å®è¡ãããäžèšã®ã¢ã¯ã·ã§ã³ãšã®é¡äŒŒç¹ã瀺ããŸãã
âSA ããã³ããšã³ã ã¢ããªã±ãŒã·ã§ã³çšã® Dockerfile ã®æºå
å«ãŸããæ瀺 Dockerfile
ç³è«çš SA-Frontend
ããã£ã XNUMX ã€ã®ã³ãã³ãã§æ§æãããŸãã å®éã®ãšããã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 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
ãã¹ã (ã€ãŸããããŒã«ã« ã³ã³ãã¥ãŒã¿ãŒ) ã®ããŒãçªå·ã§ãã - XNUMX çªç®ã®çªå·
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
ã ãã®ãã¡ã€ã«ã®ããã¹ããèªããšãããŒã¯ãŒãã§å§ãŸãæ°ããæ§é ã XNUMX ã€ã ãèŠã€ãããŸãã 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 VM ã® IP ã¢ãã¬ã¹ã確èªããæ¹æ³ã«ã€ããŠã¯ã次ã®ãã¡ã€ã«ãåç
§ããŠãã ããã
ã¢ããªã±ãŒã·ã§ã³ã³ã³ãããèµ·åããŸããã 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 ã³ã³ãããŒã§å®è¡ãããããã«ãªããŸããã ããã§ããªã Kubernetes ãå¿
èŠãªã®ãã«ã€ããŠå®å
šã«æ£åœãªè³ªåããããããããŸããã ãã®è³ªåã«å¯Ÿããçãã¯ããã®è³æã® XNUMX çªç®ã®éšåã§èª¬æããŸãã ãããŸã§ã®éã次ã®è³ªåã«ã€ããŠèããŠã¿ãŸãããã
ç§ãã¡ã®ããã¹ãåæ Web ã¢ããªã±ãŒã·ã§ã³ãäžçäžã§äººæ°ã«ãªã£ããšä»®å®ããŸãããã 圌ã®ããšã«ã¯æ¯åäœçŸäžãã®ãªã¯ãšã¹ããå±ããŸãã ããã¯ããã€ã¯ããµãŒãã¹ã sa-webapp
О sa-logic
å€å€§ãªã¹ãã¬ã¹ã«ãããããããšã«ãªãã ãã€ã¯ããµãŒãã¹ãå®è¡ããã³ã³ãããŒãã¹ã±ãŒãªã³ã°ããã«ã¯ã©ãããã°ããã§ãã?
åºæïŒ habr.com