à notre demande, Habr a créé le hub Kubernetes et nous sommes heureux d'y publier la premiÚre publication. Abonnez-vous!
Kubernetes est facile. Pourquoi les banques me paient-elles beaucoup d'argent pour travailler dans ce domaine, alors que n'importe qui peut maĂźtriser cette technologie en quelques heures seulement?

Si vous doutez que Kubernetes puisse ĂȘtre appris si rapidement, je vous suggĂšre d'essayer de le faire vous-mĂȘme. A savoir, aprĂšs avoir maĂźtrisĂ© ce matĂ©riel, vous pourrez exĂ©cuter l'application basĂ©e sur des microservices dans le cluster Kubernetes. Je peux le garantir, car c'est prĂ©cisĂ©ment par la mĂ©thodologie utilisĂ©e ici que je forme Kubernetes Ă travailler avec nos clients. Qu'est-ce qui distingue ce manuel des autres? En fait - beaucoup de choses. Ainsi, la plupart de ces documents commencent par une explication de choses simples - les concepts de Kubernetes et les fonctionnalitĂ©s de l'Ă©quipe kubectl. Les auteurs de ces documents estiment que leur lecteur connaĂźt le dĂ©veloppement d'applications, les microservices et les conteneurs Docker. Nous irons dans l'autre sens. Voyons d'abord comment exĂ©cuter une application basĂ©e sur des microservices sur un ordinateur. ConsidĂ©rez ensuite l'assemblage d'images de conteneurs pour chaque microservice. AprĂšs cela, nous apprendrons Ă connaĂźtre Kubernetes et analyserons le dĂ©ploiement d'une application basĂ©e sur des microservices dans un cluster gĂ©rĂ© par Kubernetes.
Une telle approche, avec une approche progressive de Kubernetes, donnera la profondeur de la comprĂ©hension qui arrive Ă une personne ordinaire afin de comprendre Ă quel point tout est organisĂ© dans Kubernetes. Kubernetes est, bien sĂ»r, une technologie simple, Ă condition que quiconque veut l'apprendre sache oĂč et comment il est utilisĂ©.
Maintenant, sans plus tarder, mettons-nous au travail et parlons de l'application avec laquelle nous allons travailler.
Application expérimentale
Notre application ne remplira qu'une seule fonction. Il accepte, en entrée, une phrase, puis, en utilisant les moyens d'analyse de texte, effectue une analyse des sentiments de cette phrase, en recevant une estimation de l'attitude émotionnelle de l'auteur de la phrase envers un certain objet.
Voici Ă quoi ressemble la fenĂȘtre principale de cette application.
Application Web pour l'analyse du sentiment de texteD'un point de vue technique, l'application se compose de trois microservices, chacun résolvant un certain ensemble de tùches:
- SA-Frontend est un serveur Web Nginx qui sert des fichiers statiques React.
- SA-WebApp est une application Web basée sur Java qui traite les demandes du front-end.
- SA-Logic est une application Python qui effectue une analyse de sentiment de texte.
Il est important de noter que les microservices n'existent pas isolĂ©ment. Ils mettent en Ćuvre l'idĂ©e de "sĂ©paration des tĂąches", mais ils doivent cependant interagir les uns avec les autres.
Flux de données d'applicationDans le diagramme ci-dessus, vous pouvez voir les étapes numérotées du systÚme, illustrant les flux de données dans l'application. Analysons-les:
- Le navigateur demande le fichier
index.html
au serveur (qui, à son tour, télécharge le package d'application React). - L'utilisateur interagit avec l'application, ce qui provoque un appel à une application Web basée sur Spring.
- L'application Web redirige la demande d'analyse de texte vers l'application Python.
- L'application Python analyse la tonalité du texte et renvoie le résultat en réponse à la demande.
- L'application Spring envoie une réponse à l'application React (et elle montre à son tour le résultat de l'analyse de texte à l'utilisateur).
Le code de toutes ces applications se trouve
ici . Je vous recommande maintenant de copier ce rĂ©fĂ©rentiel pour vous-mĂȘme, car il y a beaucoup d'expĂ©riences intĂ©ressantes devant nous.
Démarrage d'une application basée sur un microservice sur un ordinateur local
Pour que l'application fonctionne, nous devons exécuter les trois microservices. Commençons par les plus mignons d'entre eux - avec l'application frontale.
âConfigurer React pour le dĂ©veloppement local
Pour exécuter l'application React, vous devez installer les plates-formes Node.js et NPM sur votre ordinateur. AprÚs avoir installé tout cela, passez par le terminal dans le dossier du projet
sa-frontend
et exécutez la commande suivante:
npm install
Grùce à l'exécution de cette commande, les dépendances de l'application React, dont les entrées se trouvent dans le fichier
package.json
, seront chargées dans le dossier
node_modules
. Une fois les dĂ©pendances tĂ©lĂ©chargĂ©es dans le mĂȘme dossier, exĂ©cutez la commande suivante:
npm start
Câest tout. Maintenant que l'application React est en cours d'exĂ©cution, vous pouvez y accĂ©der en accĂ©dant Ă l'adresse
localhost:3000
dans le navigateur. Vous pouvez changer quelque chose dans son code. Vous verrez immédiatement l'effet de ces changements dans le navigateur. Ceci est possible grùce au remplacement dit "à chaud" des modules. Grùce à cela, le développement frontal devient une tùche simple et agréable.
âPrĂ©paration d'une application React de sortie en production
Pour une utilisation réelle de l'application React, nous devons la convertir en un ensemble de fichiers statiques et les remettre aux clients utilisant un serveur Web.
Pour créer l'application React, à nouveau, à l'aide du terminal, accédez au dossier
sa-frontend
et exécutez la commande suivante:
npm run build
Cela créera un répertoire de
build
dans le dossier du projet. Il contiendra tous les fichiers statiques nécessaires au fonctionnement de l'application React.
âService de fichiers statiques Ă l'aide des outils Nginx
Vous devez d'abord installer et exécuter le serveur Web Nginx.
Ici, vous pouvez le télécharger et trouver les instructions d'installation et de démarrage. Ensuite, vous devez copier le contenu du dossier
sa-frontend/build
dossier
[your_nginx_installation_dir]/html
.
Avec cette approche, le fichier
index.html
généré lors de la construction de l'application React sera disponible dans
[your_nginx_installation_dir]/html/index.html
. Il s'agit du fichier que, par défaut, le serveur Nginx émet lors de son accÚs. Le serveur est configuré pour écouter sur le port
80
, mais vous pouvez le configurer selon vos besoins en modifiant le fichier
[your_nginx_installation_dir]/conf/nginx.conf
.
Ouvrez maintenant votre navigateur et accĂ©dez Ă
localhost:80
. Vous verrez la page d'application React.
Application React servie par le serveur NginxSi vous tapez quelque chose dans le champ
Type your sentence
maintenant et cliquez sur le bouton
Send
, rien ne se passera. Mais, si vous regardez la console, vous pouvez y voir des messages d'erreur. Afin de comprendre exactement oĂč ces erreurs se produisent, analysons le code de l'application.
âAnalyse du code de l'application frontale
App.js
regardé le code du fichier
App.js
, nous pouvons voir que cliquer sur le bouton
Send
appelle la méthode
analyzeSentence()
. Le code de cette mĂ©thode est donnĂ© ci-dessous. Dans le mĂȘme temps, faites attention au fait que pour chaque ligne pour laquelle il y a un commentaire du formulaire
#
, il y a une explication donnĂ©e sous le code. De la mĂȘme maniĂšre, nous analyserons d'autres morceaux de code.
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 Ă laquelle la requĂȘte POST est exĂ©cutĂ©e. Il est entendu que cette adresse contient une application qui attend de telles demandes.
2. L'organisme de demande envoyé à la demande. Voici un exemple de corps de demande:
{ sentence: "I like yogobella!" }
3. DÚs réception d'une réponse à la demande, l'état du composant est mis à jour. Cela provoque le rendu du composant. Si nous recevons des données (c'est-à -dire un objet JSON contenant les données entrées et le score de texte calculé), nous afficherons la composante
Polarity
, car les conditions correspondantes seront remplies. Voici comment nous décrivons le composant:
const polarityComponent = this.state.polarity !== undefined ? <Polarity sentence={this.state.sentence} polarity={this.state.polarity}/> : null;
Le code semble fonctionner assez bien. Qu'est-ce qui ne va pas ici, aprĂšs tout? Si vous supposez qu'Ă l'adresse oĂč l'application essaie d'envoyer une demande POST, il n'y a jusqu'Ă prĂ©sent rien qui puisse accepter et traiter cette demande, alors vous aurez absolument raison. Ă savoir, pour traiter les demandes arrivant Ă l'adresse
http://localhost:8080/sentiment
, nous devons exécuter une application Web basée sur Spring.
Nous avons besoin d'une application Spring qui peut accepter une demande POST.âConfigurez une application Web basĂ©e sur Spring
Pour déployer l'application Spring, vous aurez besoin de JDK8 et Maven et de variables d'environnement correctement configurées. AprÚs avoir installé tout cela, vous pouvez continuer à travailler sur notre projet.
âEmballage de l'application dans un fichier jar
Accédez, à l'aide du terminal, au dossier
sa-webapp
et entrez la commande suivante:
mvn install
AprÚs avoir exécuté cette commande, le répertoire
target
sera créé dans le dossier
sa-webapp
. Il y aura une application Java emballée dans un fichier jar représenté par
sentiment-analysis-web-0.0.1-SNAPSHOT.jar
.
âDĂ©marrez l'application Java
Accédez au dossier
target
et lancez l'application avec la commande suivante:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar
Une erreur se produira lors de l'exécution de cette commande. Afin de commencer à le réparer, nous pouvons analyser les informations d'exception dans les données de trace de pile:
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}"
Pour nous, la chose la plus importante ici est la mention de l'impossibilité de déterminer la signification de
sa.logic.api.url
. Analysons le code dans lequel l'erreur se produit.
â Analyse de code d'application Java
Voici l'extrait de code oĂč l'erreur se produit.
@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
a un champ saLogicApiUrl
. Sa valeur est définie par la propriété sa.logic.api.url
. - La chaĂźne
saLogicApiUrl
concaténée avec la valeur /analyse/sentiment
. Ensemble, ils forment une adresse pour accéder à un microservice qui effectue une analyse de texte.
âDĂ©finir la valeur de la propriĂ©tĂ©
Dans Spring, la source standard des valeurs de propriété est le fichier
application.properties
, qui se trouve dans
sa-webapp/src/main/resources
. Mais son utilisation n'est pas le seul moyen de définir des valeurs de propriété. Vous pouvez le faire avec une commande comme la suivante:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=WHAT.IS.THE.SA.LOGIC.API.URL
La valeur de cette propriété doit pointer vers l'adresse de notre application Python.
En le configurant, nous indiquons Ă l'application Web Spring oĂč elle doit aller pour exĂ©cuter les demandes d'analyse de texte.
Afin de ne pas compliquer nos vies, nous décidons que l'application Python sera disponible sur
localhost:5000
et essayons de ne pas l'oublier. Par conséquent, la commande pour lancer l'application Spring ressemblera à ceci:
java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000
Notre systÚme n'a pas d'application PythonIl ne nous reste plus qu'à démarrer l'application Python et le systÚme fonctionnera comme prévu.
âConfiguration d'une application Python
Pour exécuter une application Python, vous devez avoir installé Python 3 et Pip, et vous devez définir correctement les variables d'environnement appropriées.
âInstallation de dĂ©pendances
Accédez au dossier du projet
sa-logic/sa
et exécutez les commandes suivantes:
python -m pip install -r requirements.txt python -m textblob.download_corpora
âDĂ©marrez l'application
AprĂšs avoir installĂ© les dĂ©pendances, nous sommes prĂȘts Ă lancer l'application:
python sentiment_analysis.py
AprÚs avoir exécuté cette commande, nous serons informés des éléments suivants:
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Cela signifie que l'application est en cours d'exécution et attend les demandes sur
localhost:5000/
â Recherche de code
Considérez le code d'application Python pour comprendre comment il répond aux demandes:
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
- Initialisation d'un objet
Flask
. - DĂ©finition de l'adresse pour lui exĂ©cuter des requĂȘtes POST.
- Récupération de la propriété de
sentence
du corps de la requĂȘte. - Initialisation de l'objet
TextBlob
anonyme et obtention de la valeur de polarity
pour la premiĂšre phrase dans le corps de la requĂȘte (dans notre cas, c'est la seule phrase passĂ©e pour analyse). - Le retour de la rĂ©ponse, dans le corps duquel se trouve le texte de la proposition et l'indice de
polarity
calculé pour celle-ci. - Lancement de l'application Flask, qui sera disponible à l'adresse
0.0.0.0:5000
(vous pouvez également y accéder en utilisant un design du formulaire localhost:5000
).
Maintenant, les microservices qui composent l'application sont en cours d'exécution. Ils sont configurés pour interagir les uns avec les autres. Voici à quoi ressemble le diagramme d'application à ce stade du travail.
Tous les microservices qui composent l'application sont portés à un état sain.Maintenant, avant de continuer, ouvrez l'application React dans un navigateur et essayez d'analyser certaines suggestions en l'utilisant. Si tout est fait correctement, aprÚs avoir cliqué sur le bouton
Send
, vous verrez les résultats de l'analyse sous la zone de texte.
Dans la section suivante, nous expliquerons comment exécuter nos microservices dans des conteneurs Docker. Cela est nécessaire pour préparer le lancement de l'application dans le cluster Kubernetes.
Conteneurs Docker
Kubernetes est un systĂšme d'automatisation du dĂ©ploiement, de la mise Ă l'Ă©chelle et de la gestion des applications conteneurisĂ©es. Il est Ă©galement appelĂ© «orchestrateur de conteneurs». Si Kubernetes fonctionne avec des conteneurs, nous devons d'abord acquĂ©rir ces conteneurs avant d'utiliser ce systĂšme. Mais d'abord, parlons de ce que sont les conteneurs. Peut-ĂȘtre que la meilleure rĂ©ponse Ă la question de savoir de quoi il s'agit se trouve dans la
documentation de Docker:
Une image de conteneur est un package exĂ©cutable lĂ©ger et autonome contenant une application qui comprend tout ce dont vous avez besoin pour l'exĂ©cuter: code d'application, runtime, outils et bibliothĂšques systĂšme et paramĂštres. Les programmes conteneurisĂ©s peuvent ĂȘtre utilisĂ©s dans des environnements Linux et Windows, et ils fonctionneront toujours de la mĂȘme maniĂšre, quelle que soit l'infrastructure.Cela signifie que les conteneurs peuvent ĂȘtre exĂ©cutĂ©s sur n'importe quel ordinateur, y compris les serveurs de production, et dans n'importe quel environnement, les applications qu'ils contiennent fonctionneront de la mĂȘme maniĂšre.
Afin d'explorer les fonctionnalités des conteneurs et de les comparer avec d'autres façons de lancer des applications, considérez un exemple de service d'une application React à l'aide d'une machine virtuelle et d'un conteneur.
âServing React application static files using virtual machine
En essayant d'organiser la maintenance des fichiers statiques au moyen de machines virtuelles, nous rencontrerons les inconvénients suivants:
- Utilisation inefficace des ressources, car chaque machine virtuelle est un systĂšme d'exploitation Ă part entiĂšre.
- Dépend de la plateforme. Ce qui fonctionne sur un certain ordinateur local peut ne pas fonctionner sur un serveur de production.
- Mise à l'échelle lente et gourmande en ressources d'une solution basée sur une machine virtuelle.
Serveur Web Nginx static server s'exĂ©cutant sur une machine virtuelleSi les conteneurs sont utilisĂ©s pour rĂ©soudre un problĂšme similaire, alors, par rapport aux machines virtuelles, leurs forces suivantes peuvent ĂȘtre notĂ©es:
- Utilisation efficace des ressources: travailler avec le systĂšme d'exploitation Ă l'aide de Docker.
- IndĂ©pendance de la plateforme. Un conteneur qu'un dĂ©veloppeur peut exĂ©cuter sur son ordinateur fonctionnera n'importe oĂč.
- Déploiement léger grùce à l'utilisation de couches d'image.
Serveur Web Nginx static server s'exĂ©cutant dans un conteneurNous n'avons comparĂ© les machines virtuelles et les conteneurs que sur quelques points, mais mĂȘme cela suffit pour ressentir les points forts des conteneurs. En savoir plus sur les conteneurs Docker ici.
â Assemblage d'une image de conteneur pour une application React
Le bloc de construction principal du conteneur Docker est le
Dockerfile
. Au début de ce fichier, enregistrez l'image de base du conteneur, puis incluez une séquence d'instructions qui indique l'ordre dans lequel le conteneur sera créé et qui répondra aux besoins d'une certaine application.
Avant de
Dockerfile
Ă travailler avec le
Dockerfile
, rappelons-nous ce que nous avons fait afin de préparer les fichiers d'application React à télécharger sur le serveur Nginx:
- Créez un package d'application React (
npm run build
). - Démarrage du serveur Nginx.
- Copiez le contenu du répertoire de
build
du dossier du projet sa-frontend
dans le dossier du serveur nginx/html
.
Ci-dessous, vous pouvez voir les parallÚles entre la création du conteneur et les actions ci-dessus effectuées sur l'ordinateur local.
âPrĂ©paration d'un Dockerfile pour SA-Frontend
Les instructions qui seront contenues dans le
Dockerfile
pour l'application
SA-Frontend
consistent en seulement deux commandes. Le fait est que l'équipe de développement de Nginx a préparé une
image de base pour Nginx, que nous utiliserons pour créer notre image. Voici les deux étapes que nous devons décrire:
- La base de l'image dont vous avez besoin pour créer l'image de Nginx.
- Le contenu du dossier
sa-frontend/build
doit ĂȘtre copiĂ© dans le dossier image nginx/html
.
Si nous passons de cette description au
Dockerfile
, cela ressemblera Ă ceci:
FROM nginx COPY build /usr/share/nginx/html
Comme vous pouvez le voir, tout est trĂšs simple ici, tandis que le contenu du fichier est mĂȘme assez lisible et comprĂ©hensible. Ce fichier indique au systĂšme de prendre l'image
nginx
avec tout ce qu'il possÚde déjà et de copier le contenu du répertoire de
build
répertoire
nginx/html
.
Ici, vous pouvez avoir une question concernant d'oĂč je sais exactement oĂč copier les fichiers du dossier de
build
, c'est-Ă -dire d'oĂč vient le chemin
/usr/share/nginx/html
. En fait, et il n'y a rien de compliquĂ©. Le fait est que les informations pertinentes peuvent ĂȘtre trouvĂ©es dans la
description de l' image.
âConstruction d'une image et tĂ©lĂ©chargement vers le rĂ©fĂ©rentiel
Avant de pouvoir travailler avec l'image finie, nous devons l'envoyer au référentiel d'images. Pour ce faire, nous utiliserons la plateforme cloud gratuite pour l'hébergement des images Docker Hub. à ce stade du travail, vous devez effectuer les opérations suivantes:
- Installez Docker .
- Inscrivez-vous sur le site Web de Docker Hub.
- Connectez-vous au compte en exécutant la commande suivante dans le terminal:
docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"
Vous devez maintenant utiliser le terminal pour accéder au répertoire
sa-frontend
et y exécuter la commande suivante:
docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend .
Ci-aprĂšs dans des commandes similaires,
$DOCKER_USER_ID
doit ĂȘtre remplacĂ© par votre nom d'utilisateur sur le Docker Hub. Par exemple, cette partie de la commande pourrait ressembler Ă ceci:
rinormaloku/sentiment-analysis-frontend
.
Dans le mĂȘme temps, cette commande peut ĂȘtre raccourcie en supprimant
-f Dockerfile
, car ce fichier existe déjà dans le dossier dans lequel nous exécutons cette commande.
Afin d'envoyer l'image finie au référentiel, nous avons besoin de la commande suivante:
docker push $DOCKER_USER_ID/sentiment-analysis-frontend
AprÚs son exécution, vérifiez la liste de vos référentiels sur le Docker Hub afin de comprendre si l'image a été envoyée avec succÚs dans le cloud.
âDĂ©marrer le conteneur
Désormais, n'importe qui peut télécharger et exécuter une image connue sous le nom de
$DOCKER_USER_ID/sentiment-analysis-frontend
. Pour ce faire, vous devez exécuter la séquence de commandes suivante:
docker pull $DOCKER_USER_ID/sentiment-analysis-frontend docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend
Maintenant, le conteneur est lancé et nous pouvons continuer à travailler, créant les autres images dont nous avons besoin. Mais, avant de continuer,
80:80
construction
80:80
, qui se trouve dans la commande de lancement d'image et peut sembler incompréhensible.
- Le premier numéro
80
est le numéro de port hÎte (c'est-à -dire l'ordinateur local). - Le deuxiÚme numéro
80
est le port du conteneur vers lequel la demande doit ĂȘtre redirigĂ©e.
Considérez l'illustration suivante.
Transfert de portLe systĂšme redirige les demandes du port
<hostPort>
vers le port
<containerPort>
. Autrement dit, l'accĂšs au port
80
ordinateur est redirigé vers le port
80
conteneur.
Le port
80
ouvert sur l'ordinateur local, vous pouvez accéder à l'application à partir de cet ordinateur sur
localhost:80
. Si votre systĂšme ne prend pas en charge Docker, vous pouvez exĂ©cuter l'application sur la machine virtuelle Docker, dont l'adresse ressemblera Ă
<docker-machine ip>:80
. Afin de découvrir l'adresse IP de la machine virtuelle Docker, vous pouvez utiliser la commande
docker-machine ip
.
à ce stade, aprÚs avoir lancé avec succÚs le conteneur d'application frontale, vous devriez pouvoir ouvrir sa page dans un navigateur.
â Fichier .dockerignore
En collectant l'image de l'application
SA-Frontend
, nous avons pu remarquer que ce processus est extrĂȘmement lent. Cela se produit du fait que le contexte de gĂ©nĂ©ration de l'image doit ĂȘtre envoyĂ© au dĂ©mon Docker. Le rĂ©pertoire reprĂ©sentant le contexte de gĂ©nĂ©ration est spĂ©cifiĂ© par le dernier argument de la
docker build
. Dans notre cas, à la fin de cette commande est un point. Il en résulte que la structure suivante est incluse dans le contexte d'assemblage:
sa-frontend: | .dockerignore | Dockerfile | package.json | README.md +---build +---node_modules +---public \---src
Mais de tous les dossiers présents ici, nous n'avons besoin que du dossier de
build
. TĂ©lĂ©charger quoi que ce soit d'autre est une perte de temps. Les builds peuvent ĂȘtre accĂ©lĂ©rĂ©s en indiquant Ă Docker quels rĂ©pertoires ignorer. C'est pour cela que nous avons besoin d'un fichier
.dockerignore
. Si vous connaissez le fichier
.gitignore
, la structure de ce fichier vous semblera sûrement familiÚre. Il répertorie les répertoires que le systÚme d'assemblage d'images peut ignorer. Dans notre cas, le contenu de ce fichier ressemble à ceci:
node_modules src public
Le fichier
.dockerignore
doit se trouver dans le mĂȘme dossier que le
Dockerfile
. L'assemblage de l'image prendra maintenant quelques secondes.
Jetons maintenant un Ćil Ă l'application 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 â
README .
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()
, . .
.
: Kubernetes?
Dockerfile
, , Docker. , ,
.dockerignore
. Docker. , Kubernetes. . :
, - . . ,
sa-webapp
sa-logic
. , ?
