Rework and complete linking part
This commit is contained in:
parent
fdb090a4bf
commit
0c51c5d6cf
@ -3,9 +3,29 @@
|
|||||||
Lier les conteneurs
|
Lier les conteneurs
|
||||||
===================
|
===================
|
||||||
|
|
||||||
Partager des fichiers est une chose, mais ce n'est pas une manière d'échanger
|
Lorsque l'on gère des services un peu plus complexes qu'un simple gestionnaire
|
||||||
de l'information instantanément : les sockets et le réseau restent plus adaptés
|
d'images, on a souvent besoin de faire communiquer plusieurs services
|
||||||
à ce genre d'échanges.
|
entre-eux.
|
||||||
|
|
||||||
|
Notre premier service, `youp0m`, utilisais le système de fichiers pour stocker
|
||||||
|
ses données, mais la plupart des applications réclament un serveur de base de
|
||||||
|
données.
|
||||||
|
|
||||||
|
Les bonnes pratiques nous dictent de ne pas placer plus d'un service par
|
||||||
|
conteneur : en effet, on peut vouloir mettre à jour l'applicatif sans pour
|
||||||
|
autant redémarrer sa base de données, etc. Nous allons donc voir dans cette
|
||||||
|
partie comment lier deux conteneurs.
|
||||||
|
|
||||||
|
|
||||||
|
## Mise en place du webservice
|
||||||
|
|
||||||
|
Nous allons utiliser l'interface d'administration des serveurs du FIC :
|
||||||
|
[`nemunaire/fic-admin`](https://hub.docker.com/r/nemunaire/fic-admin/).
|
||||||
|
|
||||||
|
En lançant le conteneur avec les mêmes options que `youp0m`, les journaux
|
||||||
|
indiquent que le service cherche à se connecter à une base de données. Il va
|
||||||
|
donc falloir lier notre interface d'administration à un conteneur MariaDB.
|
||||||
|
|
||||||
|
|
||||||
## Les pilotes réseau
|
## Les pilotes réseau
|
||||||
|
|
||||||
@ -51,7 +71,7 @@ directement accessible, sans avoir à utiliser l'option `-p` du `run`.
|
|||||||
|
|
||||||
### Créer un nouveau réseau `bridge`
|
### Créer un nouveau réseau `bridge`
|
||||||
|
|
||||||
Afin de contrôler quels échanges peuvent être réalisé entre les conteneurs, il
|
Afin de contrôler quels échanges peuvent être réalisés entre les conteneurs, il
|
||||||
est recommandé de créer des réseaux utilisateur.
|
est recommandé de créer des réseaux utilisateur.
|
||||||
|
|
||||||
La création d'un réseau se fait tout simplement au travers des sous-commandes
|
La création d'un réseau se fait tout simplement au travers des sous-commandes
|
||||||
@ -59,7 +79,7 @@ relatives aux objets Docker `network` :
|
|||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```
|
```
|
||||||
docker network create --driver bridge my_network
|
docker network create --driver bridge my_fic
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -73,66 +93,43 @@ docker network connect NETWORK CONTAINER
|
|||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
Lorsque plusieurs conteneurs ont rejoints un réseau utilisateur, ils peuvent
|
Lorsque plusieurs conteneurs ont rejoint un réseau utilisateur, ils peuvent
|
||||||
mutuellement se découvrir grâce à un système de résolution de nom basé sur leur
|
mutuellement se découvrir grâce à un système de résolution de nom basé sur leur
|
||||||
nom de conteneur.
|
nom de conteneur.
|
||||||
|
|
||||||
|
|
||||||
### Exercice
|
## Exercice
|
||||||
|
|
||||||
Lancez votre serveur web avec :
|
À vous maintenant de connecter une instance de `nemunaire/fic-admin` à sa base
|
||||||
|
de données.
|
||||||
|
|
||||||
|
Ne vous embêtez pas avec les mots de passes des services, initialisez la base
|
||||||
|
de données avec le nom d'utilisateur et le mot de passe par défaut. Vous les
|
||||||
|
obtiendrez en lisant l'aide :
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```
|
```
|
||||||
docker container run --name helloapp -d my_webserver
|
docker container run --rm -e MYSQL_HOST="tcp(mysql_cntr_name:3306)" nemunaire/fic-admin -help
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
Puis créez un réseau utilisateur, rejoignez-le et lancez un conteneur dans le
|
Notez la définition de la variable d'environnement `MYSQL_HOST`[^12factors],
|
||||||
même réseau utilisateur. Vous devriez être capable de lancer dans ce conteneur
|
celle-ci indique le nom du serveur vers lequel le service doit se connecter.
|
||||||
les commandes :
|
|
||||||
|
[^12factors]: Lecture intéressante : <https://12factor.net/>
|
||||||
|
|
||||||
|
Vous aurez besoin de créer un volume pour stocker la base de données, un réseau
|
||||||
|
dans lequel vous connecterez la base de données et le conteneur applicatif.
|
||||||
|
|
||||||
|
Vous devriez pouvoir déboguer le réseau, au sein d'un conteneur, par exemple en
|
||||||
|
utilisant :
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```
|
```
|
||||||
ping helloapp
|
42sh$ docker container exec -it ficadmin_cntr_name /bin/bash
|
||||||
curl http://helloapp/
|
(incntnr)# ping mysql_cntr_name
|
||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
Une fois le service `fic-admin` lancé, vous pouvez exposer le port 8081, sur
|
||||||
## Liaison à l'ancienne
|
lequel vous devriez voir l'interface d'admin : <http://localhost:8081/>.
|
||||||
|
|
||||||
Les réseaux utilisateurs sont la manière à privilégier lorsque l'on souhaite
|
|
||||||
que deux conteneurs puissent discuter entre-eux.
|
|
||||||
|
|
||||||
Avant que cela n'existe, une fonctionnalité de liaison existait. Moins
|
|
||||||
puissante que les réseaux et plus contraignante car elle nécessite de gérer
|
|
||||||
l'ordre dans lequel les conteneurs sont lancés, elle permet néanmoins de
|
|
||||||
partager en plus les variables d'environnements du conteneur lié.
|
|
||||||
|
|
||||||
Par exemple, pour lancer un conteneur `postgresql`, il faut lui préciser au
|
|
||||||
moins le mot de passe à utiliser via la variable d'environnement
|
|
||||||
`POSTGRES_PASSWORD`[^storepostgres] :
|
|
||||||
|
|
||||||
[^storepostgres]: l'ensemble des variables que peut prendre le conteneur est
|
|
||||||
disponible sur la page dédiée à l'image sur le *store* :
|
|
||||||
<https://store.docker.com/images/postgres>
|
|
||||||
|
|
||||||
<div lang="en-US">
|
|
||||||
```
|
|
||||||
docker container run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d postgres
|
|
||||||
```
|
|
||||||
</div>
|
|
||||||
|
|
||||||
Le lien permet de fournir à n'importe quel autre conteneur les mêmes variables
|
|
||||||
d'environnement. Cela évite d'avoir à recopier le mot de passe pour lancer un
|
|
||||||
conteneur qui en dépendrait. Comme par exemple dans le cas d'un serveur web qui
|
|
||||||
doit se connecter à une base de données : l'application doit être configurée
|
|
||||||
pour utiliser le mot de passe défini au lancement du conteneur de base de
|
|
||||||
données :
|
|
||||||
|
|
||||||
<div lang="en-US">
|
|
||||||
```
|
|
||||||
docker run -it --rm --link some-postgres:postgres postgres psql -h postgres -U postgres
|
|
||||||
```
|
|
||||||
</div>
|
|
||||||
|
Loading…
Reference in New Issue
Block a user