Skip to content

improve Dockerfile build sequence#3274

Open
pifou25 wants to merge 2 commits into
jeedom:developfrom
pifou25:feat/dockerfile_copy_develop
Open

improve Dockerfile build sequence#3274
pifou25 wants to merge 2 commits into
jeedom:developfrom
pifou25:feat/dockerfile_copy_develop

Conversation

@pifou25
Copy link
Copy Markdown
Contributor

@pifou25 pifou25 commented Apr 19, 2026

Description

Pour éviter de recopier les sources lorsque ce n'est pas nécessaire, au démarrage du conteneur: le step (6) dans Dockerfile COPY . ${WEBSERVER_HOME} fait déjà la copie des fichiers dans le répertoire courant.
Pourtant je l'ai quand même laissé post-install dans le init.sh pour un cas particulier :

docker run -p 80:80 -v /home/pifou/jeedom:/var/www/html --rm --name jeedom_server jeedom
Avec l'option -v je map le répertoire de l'host sur celui du container. Du coup ça permet de persister Jeedom sur l'host, et ça marche lors de l'arrêt / mise à jour / relance du container, on ne perd rien. Mais au 1er lancement, si mon rep /home/pifou/jeedom est vide sur l'host, il est vide aussi dans le container, malgré que je pensais y avoir copié les sources (lors du build). Dans ce cas uniquement, on doit recopier les sources au démarrage du conteneur.
C'est ce que je ne comprends pas dans la doc, normalement si le rep est vide on devrait y retrouver les données du container:
https://docs.docker.com/engine/storage/volumes/#mounting-a-volume-over-existing-data

Le fichier .dockerignore permet à l'instruction COPY . de savoir ce qu'il faut ignorer - ne pas copier dans l'image.

Le step 10 (install composer) se fait aussi au build de l'image, pas au démarrage de l'application. Donc dans le Dockerfile également.

Suggested changelog entry

  • Ne pas écraser notre répertoire source Jeedom lors d'une mise à jour de l'image Docker.

@pifou25 pifou25 mentioned this pull request Apr 19, 2026
11 tasks
@pifou25 pifou25 closed this Apr 19, 2026
@pifou25 pifou25 reopened this Apr 19, 2026
echo 'download again Jeedom'
/root/install.sh -s 6 -v ${VERSION} -w ${WEBSERVER_HOME}
# jeedom installation : install composer
/root/install.sh -s 10 -v ${VERSION} -w ${WEBSERVER_HOME} -i docker
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Petit souci de robustesse ici : step 10 appelle ${WEBSERVER_HOME}/resources/install_composer.sh pour installer composer, puis composer install. Ça suppose que step 6 juste avant a bien déballé le tarball avec ce script dedans. Si le wget de step 6 échoue partiellement (GitHub ralenti, réseau flaky au premier démarrage du conteneur), step 10 va tenter d'installer composer sur un répertoire incomplet et planter silencieusement — le conteneur continuera à démarrer avec un Jeedom cassé.

Je proposerais juste d'ajouter un check de retour entre les deux :

	# do not re-install jeedom
	if [ ! -f ${WEBSERVER_HOME}/core/config/common.config.sample.php ]; then
		echo 'download again Jeedom'
		if ! /root/install.sh -s 6 -v ${VERSION} -w ${WEBSERVER_HOME}; then
			echo "ERROR: step 6 failed, aborting"
			exit 1
		fi
		# jeedom installation : install composer
		if ! /root/install.sh -s 10 -v ${VERSION} -w ${WEBSERVER_HOME} -i docker; then
			echo "ERROR: step 10 failed, aborting"
			exit 1
		fi
	fi

Comme ça si quelque chose foire, l'utilisateur voit le message dans les logs Docker au lieu d'avoir un conteneur qui tourne mais ne marche pas.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Je ne suis pas sur, pour le coup, j'ai pas compris la notion de "échoue partiellement" : si le step est en erreur, ça n'interrompt pas le script ? Dans ce cas, on devrait ajouter ce genre d'option sur le script ?

#!/bin/bash
set -euo pipefail

Comment thread install/OS_specific/Docker/init.sh
Co-authored-by: kwizer15 <kwizer15@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants