🕒 : 3 h maximum

Prérequis:

TP0_Docker

PC linux ubuntu avec docker installé (TP0)

Administration linux

But:

Savoir utiliser docker pour fabriquer vos projets.

Présentation:

Qu’est-ce qu’Alpine Linux ?
Alpine Linux est une distribution Linux ultra-légère basée sur musl libc et BusyBox.

Caractéristique Valeur

Taille de l’image Docker ~5-7 MB
Taille de l’ISO ~133 MB
Noyau Linux
Gestionnaire de paquets APK (Alpine Package Keeper)
Libc musl (plus léger que glibc)
Init system OpenRC (pas systemd)

Avantages


✅ Avantages 📝 Explication
Ultra-léger Image Docker de 5 MB seulement
Rapide Démarrage en quelques millisecondes
Sécurisé Kernel durci, paquets signés
Simple Très peu de bloatware
Idéal pour Docker Parfait pour les conteneurs
Efficace Faible consommation mémoire

Docker Hub

Docker Hub est le plus grand registre d’images Docker au monde . C’est un service cloud qui permet de stocker, partager et distribuer des images de conteneurs .

Pour faire simple, Docker Hub joue un rôle similaire à GitHub pour le code, mais pour les images Docker. C’est l’endroit central où les développeurs du monde entier partagent leurs images prêtes à l’emploi.

exemple de recherche d’image docker:

docker search

etudiant@ordi:~$ docker search "gcc"
NAME                DESCRIPTION                                     STARS     OFFICIAL
gcc                 The GNU Compiler Collection is a compiling s…   901       [OK]
stagex/gcc          The GNU Compiler Collection                     0
openeuler/gcc                                                       0
unikraft/gcc                                                        1
latelee/gcc         gcc 7                                           0
gorzechowski/gcc    gcc, g++, make, cmake                           0
zsoltm/gcc          GCC C / C++ on Jessie                           0
oliviera/gcc        gcc, g++, make and Python                       0
osexp2000/gcc       gcc g++ gdb make automake                       0
ndless/gcc          gcc, g++, make and Python                       1
tim03/gcc           docker image of gcc (c, c++)                    0
codeawayorg/gcc     C programming environment with GCC              0
iiiinnnnyyyy/gcc    gcc + g++ + git + cmake + lld + ninja           0
9081165252/gcc                                                      0
amd64/gcc           The GNU Compiler Collection is a compiling s…   2
pinpad/gcc          Image for C development (gcc, GNU make, git,…   0
arm32v7/gcc         The GNU Compiler Collection is a compiling s…   10
fedorov7/gcc        The small Docker image with C/C++ compiler (…   0
arm64v8/gcc         The GNU Compiler Collection is a compiling s…   14
tymonx/gcc          A Docker image with the GNU GCC C/C++ compil…   0
arm32v5/gcc         The GNU Compiler Collection is a compiling s…   1
s390x/gcc           The GNU Compiler Collection is a compiling s…   1
ppc64le/gcc         The GNU Compiler Collection is a compiling s…   2
tkausl/gcc          A gcc image I use to compile most of my proj…   0
infinitecoder/gcc   gcc images for c and c++ languages. Based on…   0
etudiant@ordi:~$

Démarrage de la première alpine

Dans notre TP nous voulons partir d’une machine propre sans aucune image docker ni aucun docker

vérifions qu’aucune image ne traine sur votre machine

etudiant@ordi:~$ docker images                                                                                                                                                                i Info →   U  In UseIMAGE   ID             DISK USAGE   CONTENT SIZE   EXTRA                  

si jamais une image reste il faut utiliser la commande docker rmi image vous sera utile

pour tester on va en charger l’image alpine !

image docker alpine

on va charger l’image alpine:latest du docker hub

etudiant@ordi:~$ docker pull alpine:latest
latest: Pulling from library/alpine
55afa1ecc21d: Pull complete
f5124fb579e2: Download complete
56dceff11b33: Download complete
Digest: sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest
etudiant@ordi:~$ docker images
                                                                                     i Info →   U  In Use
IMAGE           ID             DISK USAGE   CONTENT SIZE   EXTRA
alpine:latest   28bd5fe8b56d         13MB         3.93MB
etudiant@ordi:~$

docker pull

docker pull : charge (tire) l’image du dépot docker l’image alpine:latest , dernière version

effaçons ensuite l’image de l’outil docker

etudiant@ordi:~$ docker rmi alpine:latest
Untagged: alpine:latest
Deleted: sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b
etudiant@ordi:~$

c’est une petite image de 4 Méga octets

c’est bien l’intérêt de cette distribution !

maintenant nous en avons besoin !donc on charge l’image avec docker pull alpine:latest ou mieux !

docker run

nous allons charger l’image et la démarrer pour l’utiliser .

on va utiliser l’option -it (voir tp précédent) et l’option –rm qui permet d’effacer le docker quand on le quitte (pour exeperimentations)

etudiant@ordi:~$ docker run -it --rm alpine:latest
Unable to find image 'alpine:latest' locally
latest: Pulling from library/alpine
55afa1ecc21d: Pull complete
56dceff11b33: Download complete
f5124fb579e2: Download complete
Digest: sha256:28bd5fe8b56d1bd048e5babf5b10710ebe0bae67db86916198a6eec434943f8b
Status: Downloaded newer image for alpine:latest
/ #

nous sommes dans la machine ! exit ou ctrl d permet d’en sortir

/ # exit
etudiant@ordi:~$ docker images
                                                                                     i Info →   U  In Use
IMAGE           ID             DISK USAGE   CONTENT SIZE   EXTRA
alpine:latest   28bd5fe8b56d         13MB         3.93MB
etudiant@ordi:~$ docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
etudiant@ordi:~$ docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
etudiant@ordi:~$

on va relancer ce docker

docker run -it –rm

etudiant@ordi:~$ docker run -it --rm alpine:latest
/ # ls
bin    etc    lib    mnt    proc   run    srv    tmp    var
dev    home   media  opt    root   sbin   sys    usr
/ #

on va identifier son nom

docker –hostname

etudiant@ordi:~$ docker run -it --rm alpine:latest
/ # ls
bin    etc    lib    mnt    proc   run    srv    tmp    var
dev    home   media  opt    root   sbin   sys    usr
/ # hostname
ed0895e1b8a1
/ # cat /etc/hostname
ed0895e1b8a1
/ #exit

on va lui donner un nom avec l’option -h ou –hostname , pour ce faire on en sort avec exit ou ctrl d

etudiant@ordi:~$ docker run -it --rm -h alpine alpine:latest
/ # hostname
alpine
/ #exit

docker –workdir

on peut la lancer dans un dossier de travail précis (workdir) , ici je voudrai être dans /root

option: -w ou –workdir

etudiant@ordi:~$ docker run -it –rm -w /root -h alpine alpine:latest
~ # pwd
/root
~ #

attention on a mis l’option –rm (remove) et quand on quitte le docker on perd tout! c’est ce que nous voulons pour découvrir et éviter de surcharger notre docker.

etudiant@ordi:~$ docker run -it --rm --workdir /root -h alpine alpine:latest
~ # pwd
/root
~ # echo 'coucou le monde' > bonjour.txt
~ # cat bonjour.txt
coucou le monde
~ # exit
etudiant@ordi:~$ docker run -it --rm --workdir /root -h alpine alpine:latest
~ # ls
~ # # tout est perdu !! c'etait prévu !

la notion de volume en docker

un volume est un répertoire que l’on va partager du docker à la machine hôte , et qui sera lui persistant.

sur la machine hôte créer le répertoire mon_volume (dans TP1)

etudiant@ordi:~/Works/Docker/TP1$ mkdir mon_volume
etudiant@ordi:~/Works/Docker/TP1$ ls
mon_volume
etudiant@ordi:~/Works/Docker/TP1$ docker run -it --rm --workdir /root -h alpine -v mon_volume:/data alpine:latest
~ # ls /
bin    data   dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var
~ #

on découvre un répertoire /data à la racine

on s’y va pour créer notre bon vieux bonjour.txt

~ # cd /data/
/data # ls
/data # echo 'bonjour le monde' > bonjour.txt
/data # cat bonjour.txt
bonjour le monde
/data #

vous pouvez vérifier votre répertoire mon_volume… il est bien en commun sur les 2 machines , l’hôte et docker .

On en sort (on détruit bien le docker) (–rm) et on en refait un ou en profite pour se placer dans le workdir data , autant s’en servir.

/data # exit
etudiant@ordi:~/Works/Docker/TP1$ docker run -it --rm --workdir /data -h alpine -v mon_volume:/data alpine:latest
/data # ls
bonjour.txt
/data # cat bonjour.txt
bonjour le monde
/data #
épatant ca non ?