-
Notifications
You must be signed in to change notification settings - Fork 1
Docker Compose
Documentation officielle de Docker Compose.
Docker Compose est un outil d'orchestration de "conteneurs qui permet d'automatiser le déploiment, la gestion, la mise à l'échelle et la mise en réseau des containers".
Définition proposée par Redhat.
Nous avons choisi d'utiliser cette technologie d'orchestration plutôt qu'une autre (Kubernetes, OpenShift, AKS, EKS), puisque c'est une solution mature, facile à prendre main et qui offre beaucoup de personnalisation. De plus, puisque cet outil est proposé par l'éditeur officiel de Docker, l'outil est à jour et la documentation est complète.
Aussi, le Docker Compose est un fichier .yaml
donc facilement intelligible, modifiable et compris de l'ensemble des membres de notre groupe.
Ci-dessous la liste des services conteneurisés que nous utilisons.
Image | Rôle |
---|---|
traefik |
Load Balancing. |
adminer |
Interroger une base de données SQL via client web. |
python |
Utilisé pour une API Fast API. |
grafana |
Monitoring des containers et de l'host avec des dashboards personnalisés. |
nginx |
Sites web statics. |
postgresql |
Base de données PostgreSQL. |
prometheus |
Agent pour le monitoring grafana. |
redis |
Base de données SQL utilisé par Grafana. |
Docker Compose nous offre une mise en réseau flexible et facile à modifier. Nous avons décidé de séparer nos containers sous deux subnets :
-
frontend
: Qui concentre tous les services exposés (Traefik, API Fast API, Grafana). -
backend
: Qui concentre tous les services qui ne doivent être en aucun cas exposés (Base de données, Prometheus, Redis)
La plupart de nos images sont des images standards, sans aucune modifications. Nous utilisons par ailleurs les dernières versions disponibles sur la registry
Docker par défaut.
Pour les besoins de notre API Fast API, nous avons du personnaliser l'image python
.
FROM python
WORKDIR /code
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./app /code/app
CMD uvicorn app.main:app --host 0.0.0.0 --port 80
Certains de nos services s'appuient sur des dossiers/fichiers de ce repository
comme suit.
.
├── api # Image personnalisée et script Python.
├── grafana # Dashboards personnalisées Grafana.
├── prometheus # Fichiers de configuration prometheus.
├── sql # Script de création de la base de données PostgreSQL.
├── statics # Fichier statics HTML des NginX.
├── docker-compose.yml # Orchestration des containers via Docker Compose.
└── README.md # Readme.
Pour lancer tous nos containers, on utilise la commande docker-compose
.
$ cd containers # Change de répertoire de travail.
$ docker-compose up . # Lance notre docker-compose.
$ docker images # Liste les images téléchargées.
$ docker ps # Liste les containers qui tournent.