Rework and complete linking part
This commit is contained in:
parent
fdb090a4bf
commit
0c51c5d6cf
@ -3,9 +3,29 @@
|
||||
Lier les conteneurs
|
||||
===================
|
||||
|
||||
Partager des fichiers est une chose, mais ce n'est pas une manière d'échanger
|
||||
de l'information instantanément : les sockets et le réseau restent plus adaptés
|
||||
à ce genre d'échanges.
|
||||
Lorsque l'on gère des services un peu plus complexes qu'un simple gestionnaire
|
||||
d'images, on a souvent besoin de faire communiquer plusieurs services
|
||||
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
|
||||
|
||||
@ -51,7 +71,7 @@ directement accessible, sans avoir à utiliser l'option `-p` du `run`.
|
||||
|
||||
### 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.
|
||||
|
||||
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">
|
||||
```
|
||||
docker network create --driver bridge my_network
|
||||
docker network create --driver bridge my_fic
|
||||
```
|
||||
</div>
|
||||
|
||||
@ -73,66 +93,43 @@ docker network connect NETWORK CONTAINER
|
||||
```
|
||||
</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
|
||||
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">
|
||||
```
|
||||
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>
|
||||
|
||||
Puis créez un réseau utilisateur, rejoignez-le et lancez un conteneur dans le
|
||||
même réseau utilisateur. Vous devriez être capable de lancer dans ce conteneur
|
||||
les commandes :
|
||||
Notez la définition de la variable d'environnement `MYSQL_HOST`[^12factors],
|
||||
celle-ci indique le nom du serveur vers lequel le service doit se connecter.
|
||||
|
||||
[^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">
|
||||
```
|
||||
ping helloapp
|
||||
curl http://helloapp/
|
||||
42sh$ docker container exec -it ficadmin_cntr_name /bin/bash
|
||||
(incntnr)# ping mysql_cntr_name
|
||||
```
|
||||
</div>
|
||||
|
||||
|
||||
## Liaison à l'ancienne
|
||||
|
||||
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>
|
||||
Une fois le service `fic-admin` lancé, vous pouvez exposer le port 8081, sur
|
||||
lequel vous devriez voir l'interface d'admin : <http://localhost:8081/>.
|
||||
|
Loading…
Reference in New Issue
Block a user