Skip to content

Docker Compose

Guillaume edited this page Jul 11, 2023 · 3 revisions

Documentation officielle de Docker Compose.

Qu'est-ce que c'est ?

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.

Dans notre contexte

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.

Services utilisés

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.

Mise en réseau

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)

Images

Standards

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.

Personnalisée

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

Organisation

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.

Exécution

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.