Dockerfile exemples - pifou25/docker-jeedom GitHub Wiki

Composer

Image pour composer sur PHP cli debian (workaround sur le bug présent avec alpine)

# PHP version required for bookworm is 8 minimum
ARG PHP=7.3
FROM php:${PHP}-cli as composer

# Latest release
COPY --from=composer/composer:latest-bin /composer /usr/bin/composer

RUN  apt-get update && \
  apt-get install --no-install-recommends --no-install-suggests -q -y \
  wget \
  zip unzip

WORKDIR /app
VOLUME /app

usage:

  • construire des images avec les versions PHP souhaitées: docker build --build-arg PHP=7.3 -t composer:7.3 . docker build --build-arg PHP=8.2 -t composer:8.2 .
  • supprimer l'installation précédente rm -rf vendor/ composer.lock
  • installer les dépendances ( upgrade + install) par exemple avec composer sous php7.3: docker run --rm -v $PWD:/app -w /app composer:7.3 composer update

symfony

Together with symfony, add composer, some pdo & mysql extension for php, and git & zip packages


FROM php

RUN apt-get -y update && apt-get -y install git unzip

COPY --from=composer:latest /usr/bin/composer /usr/local/bin/composer

RUN docker-php-ext-install pdo pdo_mysql && docker-php-ext-enable pdo_mysql

RUN curl -sS https://get.symfony.com/cli/installer | bash
RUN mv /root/.symfony5/bin/symfony /usr/local/bin/symfony

WORKDIR /app
VOLUME /app
RUN composer require dodo-it/entity-generator

Next, build the image / run the container:

docker build -t entity-generator .
docker run --rm -v $PWD/entities:/app/entities --network jeedom_network -e MYSQL_HOSTNAME=db -e MYSQL_DATABASE=jeedom -e MYSQL_USERNAME=jeedom -e MYSQL_PASSWORD=jeedom entity-generator

This will connect to the database on db hostname, (login/pwd = jeedom/jeedom) and generate all database entities.

Python

Image pour installer des dépendances (fichier requirements.txt) puis le script python

FROM python:3

WORKDIR /usr/src/app

COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt

COPY . .

CMD [ "python", "./example.py" ]

2e étape: build image et run :

$ docker build -t wideq-app .
$ docker run -it --rm --name wideq-app -v $PWD:/usr/src/app wideq-app

PHP + XDebug

Ajouter l'extension XDebug qui va bien dans le Dockerfile. Tester xdebug-3.0.4 et redis-5.3.4

RUN pecl install redis-5.1.1 \
	&& pecl install xdebug-2.8.1 \
	&& docker-php-ext-enable redis xdebug

@see https://matthewsetter.com/setup-step-debugging-php-xdebug3-docker/

https://davescripts.com/debugging-php-code-with-vscode-and-xdebug-on-a-docker-container

https://baptiste.bouchereau.pro/fr/tutoriel/d%C3%A9bugger-une-application-php-dockeris%C3%A9e-avec-xdebug-et-vscode/

Voir l'extention pour Chrome Xdebug Helper ...

Supervisor

Le superviseur permet de lancer et gérer à son tour plusieurs processus

  • apache - serveur HTTP & PHP
  • mysql - base de données
  • cron - plannificateur des tâches
  • atd - idem cron
  • fail2ban - sécurité (utilisé dans un container docker discutable)
  • un script d'initialisation

Supervisor peut s'installer par shell (apt install supervisor = 3.3.5 avec debian:10 mais 4.2.2 avec debian:11) ou python (pip3 install supervisor = 4.2.4 avec python3). Les fichiers de conf sont dans /etc/supervisor/conf.d par défaut.