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
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: R00tP4ssw0rd
MYSQL_DATABASE: app_name
MYSQL_USER: db_user
MYSQL_PASSWORD: 4pp_n4meP4sswrd0!
webapp:
image: php:7.0-apache
volumes:
- app_data:/var/www/html
- app_logs:/var/logs/apache2
restart: always
links:
- db:newdb
volumes:
db_data:
app_data:
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.