1.5 : Mise à disposition des utilisateurs d'un service informatique

  • 1.5.1 Déployer un service

Contexte

L'utilisation de symfony serve:start entraînait des temps de chargement de 10 à 20 secondes par page, ce qui rendait le développement peu efficace. Un environnement Docker a donc été mis en place pour améliorer les performances.


Structure de l'environnement Docker

Trois fichiers ont été créés :

  • Dockerfile : définit l'image de base et installe les dépendances nécessaires
  • docker-compose.yml : configure le service principal
  • docker-compose.override.yml : surcharge dédiée au développement

Dockerfile

FROM php:8.2-apache

RUN useradd -m exemple_user
RUN usermod -aG www-data exemple_user

RUN apt-get update && apt-get install -y \
    git \
    zip \
    unzip \
    libpng-dev \
    libzip-dev \
    curl \
    && rm -rf /var/lib/apt/lists/*

RUN docker-php-ext-install zip

RUN curl -1sLf 'https://dl.cloudsmith.io/public/symfony/stable/setup.deb.sh' | bash
RUN apt-get install -y symfony-cli
RUN echo 'alias sf="symfony console"' >> /home/exemple_user/.bashrc

RUN a2enmod rewrite
RUN mkdir -p /var/www/html/nomDuProjet

COPY . /var/www/html/nomDuProjet
COPY ./000-default.conf /etc/apache2/sites-available/
COPY ./php.ini /usr/local/etc/php/conf.d/app.ini

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer

USER exemple_user
WORKDIR /var/www/html/nomDuProjet

Docker-Compose

services:
  nomDuProjet:
    volumes:
      - .:/var/www/html/nomDuProjet
      - ./git-hook:/var/www/html/nomDuProjet/.git/hooks/
      - ~/.ssh:/home/exemple_user/.ssh
    restart: always
    ports:
      - 8080:80

Fonctionnement

Le fichier docker-compose.override.yml monte le projet en volume, ce qui permet de modifier le code directement sans avoir à rebuilder le conteneur à chaque modification.

Un volume SSH a également été ajouté pour permettre de pusher vers GitHub directement depuis le conteneur Docker.


Commandes utiles

Démarrer les conteneurs :

docker compose up --build -d

Vérifier les services et le nom des conteneurs :

docker compose ps

Ouvrir un shell dans le conteneur :

docker exec -it nomDuContainer bash

Arrêter et supprimer les conteneurs :

docker compose down