https://github.com/prigaux/notes/blob/main/migrate-debian-php-fpm-to-minimal-docker.md
/opt/dockers/do upgrade
(modifiables par l'utilisateur applicatif)
image
: par défautup1-$container_name
pour les conteneurs ayant un Dockerfilerw_vol
: (plusieurs lignes autorisées) répertoires montés en écriture (doivent être dans $base_dir)
(modifiables par l'utilisateur applicatif)
image
: par défautup1-$container_name
pour les conteneurs ayant un runOnce.dockerfilesubdir
: utilisé comme répertoire de travail. Par défautxxx
pour un $container_nameuser--xxx
ouxxx
cmd
: commande par défaut (si aucun paramètre)
use_http_proxy_*
:use_http_proxy_via=env
: configure les variables d'environnement http_proxy/https_proxy/no_proxyuse_http_proxy_for=java
: configure http.proxyHost/http.proxyPort/https.proxyHost/https.proxyPort/http.nonProxyHosts via JDK_JAVA_OPTIONSuse_http_proxy_for=maven
: configure http.proxyHost/http.proxyPort/https.proxyHost/https.proxyPort/http.nonProxyHosts via /usr/share/maven/conf/settings.xml
$opts
: options passés à docker run$base_dir
: autoriserw_vol
dans run.env$base_dir_template
: exemple$base_dir_template='$user_home/www'
. Autoriserw_vol
dans run.env$ro_vols
: répertoires montés en lecture seule :ro_vols=/webhome/foo
: monte /webhome/foo de l'hôte dans /webhome/foo dans le conteneurro_vols=/webhome/foo:/usr/local
: monte /webhome/foo de l'hôte dans /usr/local dans le conteneur
$rw_vols
: répertoires montés en lecture/écriture (avec ou sans:
comme$ro_vols
)$container_name
: utilisé pour calculer d'autres variables. Par défautxxx
pour un répertoire /opts/dockers/xxx$user
: utilisé pour calculer d'autres variables. Par défautxxx
pour un $container_namexxx--subdir
ouxxx
$logdir
: par défaut/var/log/$container_name
$run_user
: utilisateur de l'hôte qui fait tourner le conteneur. Par défaut$user
$run_group
: groupe de l'hôte qui fait tourner le conteneur. Par défaut$user
$network_driver
: paramètre passé à docker run. Par défauthost
$workdir
: paramètre passé à docker run
NB : il faut utiliser . ./.helpers/tomcat/_run.sh
dans run.sh
dans run.sh :
$port
: port http sur lequel tomcat doit écouter$webapps
: liste de répertoires à utiliser comme webapps$tomcat_logdir
: par défaut$logdir/tomcat
$manager_password
: active tomcat /manager et configure le mot de passe de l'utilisateurmanager
avec droits "manager-script,manager-gui"
dans run.env :
$maxPostSize
$maxParameterCount
: modifier les paramètres par défaut de Tomcat$maxActiveSessionsGoal
: permet de limiter le nombre de sessions. Si le nombre de sessions dépasse ce nombre, les vieilles sessions sont supprimées. A utiliser avec précaution$remoteIpInternalProxies
: par défaut autorise uniquement les frontaux localhost
Conventions :
- /webhome/toto/webapps/ : où déployer
- /var/log/toto/tomcat/ : contient les logs tomcat
- /var/lib/sessions-toto/ : contient les sessions pendant le redémarrage
Ajout d'une application
- créer un utilisateur local dans /webhome/toto ,
- créer /opt/dockers/toto/runOnce.env . Exemple minimal :
image=maven:3-eclipse-temurin-17-alpine
subdir=src
cmd=mvn prepare-package war:exploded
- compiler et déployer la webapp
- pour maven, le plus performant est
sudo /opt/dockers/do runOnce toto
(pour les projets compliqués, utilisez plutôt https://stackoverflow.com/a/11134940/3005203 ) avec dans pom.xml :<build> <finalName>../../webapps/ROOT</finalName>
<plugin> <artifactId>maven-war-plugin</artifactId> <version>3.4.0</version> <configuration><outdatedCheckPath>/</outdatedCheckPath></configuration> </plugin>
- pour maven, le plus performant est
- créer /opt/dockers/toto/run.sh . Exemple minimal :
#!/bin/sh
port=8480
webapps=/webhome/toto/webapps/*
. ./.helpers/tomcat/_run.sh
- créer /opt/dockers/toto/run.env . Exemple minimal :
image=tomcat:9-jre21
- exemple plus compliqué :
run.env
image=maven:3-eclipse-temurin-17-alpine
remoteIpInternalProxies="123[.]45[.]67[.]89"
run.sh
#!/bin/sh
port=8480
webapps=/webhome/toto/webapps/*
ro_vols="/etc/krb5.conf /usr/local/etc/ssl"
rw_vols="/var/cache/toto"
. ./.helpers/tomcat/_run.sh
- créer et lancer le conteneur
/opt/dockers/do run --logsf toto
Conventions :
- /webhome/toto/www/ : contient les fichiers PHP exécutable par FPM
- /webhome/toto/.run/fpm.sock : Unix Socket à fournir à apache2/nginx
- /var/lib/php/sessions-toto/ : contient les sessions
Ajout d'une application
- créer un utilisateur local dans /webhome/toto et mettre les fichiers dans /webhome/toto/www
- créer /opt/dockers/toto/Dockerfile, typiquement
FROM up1-php-fpm-8.2
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get install -y php-soap
- si besoin, créer /opt/dockers/toto/etc/fpm-pool-opts.conf . Exemple :
php_value[memory_limit] = 256M
et ajouter
COPY etc /etc/
dans /opt/dockers/toto/Dockerfile
- créer et lancer le conteneur
/opt/dockers/do build-run --logsf toto
Avec les options suivantes, il est possible de démarrer un mvn spring-boot:run
readonly après avoir fait mvn compile
préalablement (avec runOnce
) :
mvn --offline -Dmaven.resources.skip=true -Dmaven.test.skip=true -Dspring-boot.build-info.skip=true -Dmaven.antrun.skip=true spring-boot:run
Exemple complet :
- run.env
image=maven:3-eclipse-temurin-17-alpine
- run.sh
. .helpers/lib-run--set-vars.sh
dir=/webhome/toto/
ro_vols="$dir/.m2 $dir/src"
# do not use default ENTRYPOINT
opts="$opts --entrypoint="
_may_stop_and_rm
_docker_run mvn -f /webhome/toto/src/pom.xml --offline -Dmaven.resources.skip=true -Dmaven.test.skip=true -Dspring-boot.build-info.skip=true -Dmaven.antrun.skip=true spring-boot:run
S'inspirer de .helpers/php-fpm/example-php-fpm-8.2