| 
					
				 | 
			
			
				@@ -1,2 +1,58 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 # dockerize-project 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+## Hook 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Per ogni servizio docker, vengono eseguiti i seguenti Hook: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- **prepare**: *eseguito prima della build e/o run dei container docker* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  - prepare.before 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  - prepare.before.`<env>` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  - prepare 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  - prepare.`<env>` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  - prepare.after 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  - prepare.after.`<env>` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+- **start**: *eseguito dopo il run dei container docker* 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  - start.before 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  - start.before.`<env>` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  - start 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  - start.`<env>` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  - start.after 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  - start.after.`<env>` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Ogni singolo hook prevede l'esistenza di un file `<hook>.js` all'interno della folder del servizio docker. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Alcuni esempi di modulo: 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// servizio/prepare.before.dev.js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+module.exports = ({ log, service, shell }) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  log("Questo è un esempio di prepare"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    shell("mkdir dir"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } catch (code) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    throw "Impossibile creare la directory"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+```js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+// servizio/start.after.dev.js 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+module.exports = ({ log, service, shell, exec }) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  log("Questo è un esempio di start"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  return Promise.resolve() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    .then(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return exec("npm i"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    .then(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return exec("npm update"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    .then(() => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      return exec("composer install"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    }); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+``` 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+La funzione `exec` è disponibile solo per l'hook `start` e consente di eseguire codice shell dentro il container già in esecuzione. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+La funzione `shell` consente di eseguire codice shell sulla macchina host. In caso di ritorno del programma shell diverso da 0, la funzione lancia un'eccezione. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+**NB**: è responsabilità del programmatore gestire eventuali errori derivanti dai comandi eseguiti nei propri script. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+Per impedire la prosecuzione del processo di avvio dei container docker, da dentro agli script di hook di tipo `prepare` è sufficiente lanciare una eccezione (`throw "Messaggio di errore"`) oppure restituire una rejected Promise (`return Promise.reject("Messaggio di errore")`) 
			 |