- Évaluation : formative
- Durée estimée : 2 heures
- Système d'exploitation : Ubuntu Client
- Environnement : docker
- Analyser les différents scénarios de déploiement proposés dans les documents de conception.
- Distinguer les services à installer sur les serveurs.
- Distinguer les services à installer sur le réseau.
- Déterminer les étapes à entreprendre pour installer et configurer les services réseau.
-
Sous Windows : lancez une console Ubuntu.
-
Sous Linux, lancer un terminal.
-
Vérifiez si le programme g++ est installé (g++ --help)
-
S'il n'est pas installé, l'installer (package g++)
Installation de g++
sudo apt update && sudo apt install g++ -y
Si vous avez des problèmes avec l'installation de g++ : https://stackoverflow.com/questions/66869441/unable-to-install-g-and-build-essentials-in-ubuntu-20-04.
-
Créez le fichier "premier-programme.cpp" avec le contenu suivant :
#include <iostream>
int main(int argc, char** argv) {
std::cout << "Bonjour à tous" << std::endl;
}
-
Pour compiler votre programme, utilisez la commande
g++ premier-programme.cpp -o premier-programme -static
. -
Créez dans le même répertoire que votre fichier "premier-programme" précédemment compilé, le fichier "Dockerfile" avec le contenu suivant :
FROM scratch COPY premier-programme / ENTRYPOINT ["/premier-programme"]
-
À partir du fichier et de la documentation, décrivez ce que fait le fichier Dockerfile
-
Tapez la commande
docker build --tag premier-programme:latest .
-
Vérifiez que l'image a bien été créée
-
Lancez un conteneur qui utilise votre image
docker container run --rm premier-programme
- Modifiez le programme précédent pour qu'il corresponde au listage suivant (n'oubliez pas de compiler de nouveau) :
#include <iostream>
int main(int argc, char** argv) {
std::cout << argv[1] << std::endl;
}
-
Modifiez votre Dockerfile afin que par défaut, le programme reçoive "!!Bonjour à tous !!" en paramètre.
Modification du Dockerfile
FROM scratch COPY premier-programme / ENTRYPOINT ["/premier-programme"] cmd [ "Bonjour à tous" ]
-
Reconstruisez votre image de conteneur
-
Essayez de lancer un nouveau conteneur en utilisant les mêmes lignes de commandes que précédemment.
-
Essayez de lancer un nouveau conteneur en utilisant en ajoutant à la fin la chaîne de caractères
"Un paramètre qui vient de l'extérieur du conteneur"
.
Remettre une capture d’écran de la dernière création et du dernier test de l'image.
Une image est construite à partir d’un fichier Dockerfile
: si vous voulez utiliser un autre nom de fichier, vous devez utiliser la commande :
docker build -f un_fichier_dockerfile
-
Consultez le Dockerfile de nginx : https://github.com/nginxinc/docker-nginx/blob/ef8e9912a2de9b51ce9d1f79a5c047eb48b05fc1/mainline/debian/Dockerfile
-
Consultez le site https://docs.docker.com/engine/reference/builder/ pour comprendre les commandes
FROM, ENV, RUN, EXPOSE, ENTRYPOINT, CMD
. Vous pouvez constater que nginx s'exécute à partir d'une image Debian minimale.Quelle est la différence entre ENTRYPOINT et CMD ?
Réponse
[The Difference Between CMD and ENTRYPOINT in Docker Images](https://www.howtogeek.com/devops/the-difference-between-cmd-and-entrypoint-in-docker-images/) -
Créez un répertoire de travail : par exemple
Docker
. -
Dézipper le fichier dockerfile-exemple.zip dans votre répertoire de travail.
-
Allez dans le répertoire
dockerfile-exemple
. Ouvrez le fichierDockerfile
. Le fichierindex.html
va nous servir « d’application » à intégrer dans notre serveur nginx. -
Voici ce que fait le
Dockerfile
:- Nous allons utiliser une image officielle (la commande
FROM
). On peut utiliser une image officielle comme image de départ, c’est même recommandé et ça rend notre tâche beaucoup plus simple. - Par la suite, nous allons nous placer dans le répertoire
/usr/share/nginx/html
(la commandeWORKDIR
, nous aurions également pu utiliser la commandeRUN
aveccd
). - Finalement, nous allons copier le fichier
index.html
de notre répertoire hôte dans le répertoire/usr/share/nginx/html
de notre conteneur : on n’inclut pas le chemin (path), car nous sommes déjà dans le répertoire. - On n'a pas à spécifier
EXPOSE
pour les ports ouCMD
car ils sont dans l'image initiale incluse avec la commandeFROM
. De là l’avantage d’utiliser une image existante.
- Nous allons utiliser une image officielle (la commande
-
Exécutez la commande pour construire votre image et exécuter un conteneur (le
-t
ajoute un tag à notre image, il y a un point à la fin).
docker image build -t monimage .
docker container run -p 8080:80 --rm monimage
- Ouvrez un navigateur à localhost:8080.
- Votre fichier index s’affiche-t-il ? (Si vous avez la page de nginx, vous pouvez essayer de rafraichir la page ou de vider l'historique de votre navigateur).
- Faites la commande
Ctrl-c
pour arrêter votre conteneur. - Vérifier les images de votre hôte pour voir que votre nouvelle image s’y trouve.
Les images et les conteneurs que vous utilisez prennent de l’espace sur votre disque, il faut donc quelques fois faire un peu de ménage.
Vous pouvez utiliser les commandes prune
pour nettoyer les images, les volumes, les espaces tampons et les conteneurs.
Par exemple, pour nettoyer les images « pendantes » :
docker image prune
Ou, pour tout nettoyer :
docker system prune
Pour nettoyer toutes les images non utilisées :
docker image prune -a
- Nettoyez les images non utilisées de votre système.
- Utilisez la commande suivante pour voir l'utilisation de l'espace par Docker :
docker system df
N'oubliez pas que chacune de ces commandes a des options que vous découvrez avec --help
.
Par contre, ayant un compte Docker gratuit vous êtes limité au nombre de téléchargements d’images que vous pouvez faire en 6 heures : https://docs.docker.com/docker-hub/download-rate-limit/. Vous devez donc bien balancer la gestion de votre espace local et le téléchargement de nouvelles images.
https://docs.docker.com/engine/reference/builder/
https://www.howtogeek.com/devops/the-difference-between-cmd-and-entrypoint-in-docker-images/
https://docs.docker.com/docker-hub/download-rate-limit/