2.4.1.1 : Pour Ubuntu
	
Nous allons voir dans cette section comment écrire la recette de l'image 
docker. Le fichier 
docker/Dockerfile :
Tout d'abord, nous devons dire à 
docker quel image nous voulons prendre comme base pour construire la notre. Si rien n'est précisé, l'image sera prise sur 
docker hub :
Il est possible de demander la dernière image disponible avec 
ubuntu:latest, mais il est préférable de la spécifier pour garantir que les différentes installations fonctionneront dans le futur.
Ensuite, on dit à 
docker que l'on veut un terminal 
bash :
	
		
			| 1
2
 | 
SHELL ["/bin/bash","-c"] | 
	
Les images 
Ubuntu qui proviennent de 
docker hub sont quelques peu capricieuses depuis la version 
20.04 car il faut leur spécifier l'heure et la zone temporelle :
	
		
			| 1
2
3
4
5
6
 | 
ENV TZ=Europe/Paris
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN touch /etc/apt/apt.conf.d/99verify-peer.conf 
&& echo >>/etc/apt/apt.conf.d/99verify-peer.conf "Acquire { https::Verify-Peer false }" | 
	
Une autre petite spécification des images 
Ubuntu de 
docker hub est que l'on doit informer le gestionnaire de configuration 
debconf que l'on n'aura aucune intéraction pendant l'installation de notre image (donc pas de 
yes ou 
no à entrer)
	
		
			| 1
2
3
 | 
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
ARG DEBIAN_FRONTEND=noninteractive | 
	
La dernière spécificité des images 
Ubuntu de 
docker hub est que l'on doit mettre à jour la liste de paquets avant d'installer le moindre programme :
	
		
			| 1
2
 | 
RUN apt-get -y update | 
	
Maintenant, nous pouvons commencer à installer nos programmes. Et nous devons commencer par 
apt-utils :
	
		
			| 1
2
 | 
RUN apt-get install -y apt-utils | 
	
Ensuite, 
wget qui permet de télécharger des fichiers  :
	
		
			| 1
 | 
RUN apt-get install -y wget | 
	
Installons nos outils de compilation, 
gcc et 
g++ pour le C et le C++, 
cmake pour gérer le projet, 
make pour gérer la compilation et 
git pour gérer les versions de projet (pas forcément le notre) :
	
		
			| 1
 | 
RUN apt-get install -y gcc g++ cmake make git | 
	
Pour générer la documentation, nous utiliserons 
doxygen et 
graphviz pour construire des graphes :
	
		
			| 1
 | 
RUN apt-get install -y doxygen graphviz | 
	
L'évaluation de la couverture des tests sera effectuer par 
gcovr :
	
		
			| 1
2
 | 
RUN apt-get install -y gcovr | 
	
La dernière chose que nous devons faire est de nettoyer l'image des fichiers temporaires utilisés par l'
apt-get (il est important de le faire quelque soit l'OS utilisé afin d'obtenir une image plus petite) :
	
		
			| 1
 | 
RUN apt-get -y clean autoremove | 
	
Le fichier 
Dockerfile complet :
	
		
			| 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 | 
FROM ubuntu:20.04
SHELL ["/bin/bash","-c"]
ENV TZ=Europe/Paris
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN touch /etc/apt/apt.conf.d/99verify-peer.conf 
&& echo >>/etc/apt/apt.conf.d/99verify-peer.conf "Acquire { https::Verify-Peer false }"
RUN echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
ARG DEBIAN_FRONTEND=noninteractive
RUN apt-get -y update
RUN apt-get install -y apt-utils
RUN apt-get install -y wget
RUN apt-get install -y gcc g++ cmake make git
RUN apt-get install -y doxygen graphviz
RUN apt-get install -y gcovr
RUN apt-get -y clean autoremove | 
	
Vous pouvez le télécharger 
ici.