Vous devez concevoir une architecture permettant à un drone de devenir autonome. Vous aurez besoin d’un module pour la détection de la piste et d’un module de tracking pour les autres objets. À chaque instant la position du drone est renseignée dans une base de données.

Question

À quelle architecture pensez-vous ? Quels outils de conteneurisation allez-vous utiliser ?

Solution

Pour gagner en compartimentation, il est conseillé d’utiliser des micro-services. Vous pourrez avoir un micro-service pour détecter la piste, un micro-service pour détecter les objets, et un autre micro-service pour héberger la base de données.

Vous pourriez écrire trois « dockerfile » et créer trois images. Vous pourriez ensuite créer un réseau et lancer chacun des containeurs de façon à ce qu’ils soient sur ce réseau. Le code maître pourra alors interagir avec ces services.

Vous pouvez opter aussi pour une solution beaucoup plus flexible et maintenable : l'usage de « docker-compose ». Automatiquement, les services pourront communiquer entre eux grâce à leur nom de service. Vous pourrez augmenter un ou plusieurs services de manière beaucoup plus simple.

Vous devez créer un fichier « docker-compose.yml » permettant de déployer un environnement composé d’une base de données « Mysql » et d’un serveur « Apache PHP ».

Question

Rédigez le fichier correspondant, en prenant en considération les points suivants :

  • Utilisez l’image « mysql :5.7 » pour créer le conteneur « db ».

  • Utilisez l’image « php :7.0-apache » pour créer le conteneur « webapp ».

  • Assurez-vous que les services redémarrent automatiquement en cas de problème.

  • Persistez le contenu des répertoires « /var/lib/mysql » du conteneur « db ».

  • Persistez le contenu des répertoires « /var/www/html » et « /var/log/apache2 » du conteneur « webapp ».

Solution

1
version: '3.3' 
2
services: 
3
db: 
4
image: mysql:5.7 
5
volumes: 
6
- db_data:/var/lib/mysql 
7
restart: always 
8
environment: 
9
MYSQL_ROOT_PASSWORD: R00tP4ssw0rd 
10
MYSQL_DATABASE: app_name 
11
MYSQL_USER: db_user 
12
MYSQL_PASSWORD: 4pp_n4meP4sswrd0! 
13
webapp: 
14
image: php:7.0-apache 
15
volumes: 
16
- app_data:/var/www/html 
17
- app_logs:/var/logs/apache2 
18
restart: always 
19
links: 
20
- db:newdb 
21
volumes: 
22
db_data: 
23
app_data:
24
app_logs:

Dans le fichier « yaml » de la solution, l’argument « Link » a été utilisé. Cet argument permet de créer un alias « newdb » que le service « webapp » utilise pour communiquer avec le service « db ». L’emploi de links n’est pas nécessaire parce que « webapp » utilise l’alias par défaut « db » pour communiquer.