Ce pad a pour but de tenir compte de la réunion “introduction à Docker” réalisée le 15/11/2017

1) Qu'est ce que Docker ?

Docker est un logiciel libre permettant le déploiement de conteneurs. En d'autres termes c'est un outil qui peut empaqueter une application et ses dépendances dans un conteneur isolé, qui pourra être exécuté sur n'importe quel serveur.

Une image Docker est un package léger, autonome et exécutable d'un logiciel qui inclut tout ce qui est nécessaire pour l'exécuter avec Docker: code, environnement d'exécution, outils système, bibliothèques système, paramètres.

De la même manière que les machines virtuelles (OS complet) sont gérées avec “VirtualBox”, Docker permet de “virtualiser un ou des processus” ; ceux-ci seront donc isolés du système d'exploitation et seront donc plus légers et moins gourmands qu'une machine virtuelle complète.

2) Utilisation.

Pour lancer un conteneur, il faut utiliser une image docker. Une image docker contient les instructions nécessaires au bon fonctionnement du conteneur.

Les images docker sont générées grâce à un Dockerfile. Il existe de nombreux Dockerfile déjà existants. Il est plus pratique d'en récupérer un et d'ajouter ce dont on a besoin plutôt que de tout construire.

Dans ce fichier Dockerfile on retrouve :

  • Les commandes d'installation des paquets
  • Les différentes instructions pour installer framadate (dans notre cas)
  • Le script bash qui sera exécuté (ENTRYPOINT)

Le fichier désigné par ENTRYPOINT contient le script qui sera exécuté par le conteneur. Une fois ce script exécuté, le conteneur s'arrête. La commande 'exec apache2 -D foreground ' ne se terminant pas par elle-même, le conteneur ne se stoppe pas.

3) Commandes à utiliser :

  • Commande : docker build
 docker build -t <nom-image>:<tag> . 

ou

docker build -t <nom-image>:<tag> <chemin>

permet de construire le conteneur à partir du Dockerfile présent dans le dossier ou dans le dossier désigné par le chemin. exemple :

docker build -t framadate:test . 

Une option –no-cache est possible à la création de l'image pour ne pas utiliser le cache

  • Commande : docker images
docker images

affiche la liste des images docker

  • Commande : docker-compose up
docker-compose up -d <nom_conteneur> [-f <chemin_fichier_yml>]

permet de lancer plusieurs conteneurs en même temps (pratique pour les bases de données afin de ne pas tout perdre au reboot d'un conteneur) ( -d permet l'exécution en arrière plan, sinon il occuperait le terminal) s'appuie sur un fichier docker-compose.yml (dans le dossier courant si non précisé) qui sert pour la description de la config du docker (défini les variables que l'on passe en paramètre entre autre). C'est dans ce fichier qu'on retrouve le nom du conteneur à lancer (avec l'image associée)

  • Commande : docker ps
docker ps

affiche les conteneurs actifs

  • Commande : docker rm
docker rm -f <nom_conteneur>

supprime un conteneur

  • Commande : docker rmi
docker rmi -f <nom-image>:<tag>

supprime une image

  • Commande : docker run
docker run --name <nom_conteneur> <nom-image>:<tag> -e nom_var=val -e nom_val2 = val2 

lance un conteneur à a partir d'une image avec les paramètres spécifiés. Il est fastidieux de rentrer à la main tout les paramètres d'appel, on conseille de faire appel à docker-compose, qui permet de stocker l'ensemble des paramètres dans un fichier en fonction du conteneur.

  • Commande : docker logs
docker logs -f <nom_conteneur>

affiche les logs d'un conteneur

  • Commande : docker exec
docker exec -it <nom-image>:<tag> <commande>

exécute la commande passer en paramètre dans le conteneur : exemple

docker exec -it nom:tag bash

ouvre un terminal à l’intérieur du conteneur

4) exemple de code :

un exemple de fichier nécessaire pour build une image framadate se trouve sur le serveur picasoft sous /root/titouan/framadate_titouan (Dockerfile, entrypoint.sh,apache-framadate.conf)
(il faut se déplacer dans ce dossier pour build l'image, ou bien préciser le chemin vers le Dockerfile lors du build)
le fichier docker-compose.yml sur le serveur picasoft se trouve sous /DATA/docker
(il faut se déplacer dans ce dossier pour construire le conteneur)
pour les fichiers, faites “nano <nom du fichier>”,copier le fichier txt correspondant, sauvegarder avec CTRL+O, entrée pour valider le nom du fichier et quitter avec CTRL+X

si il y a déjà déjà un conteneur en route :
(la dernière ligne permet de nettoyer la base de donnée)

docker rm -f framadate-titouan framadate-db-titouan
docker rmi -f framadate:titouan
rm -rf /DATA/docker/framadate_titouan/db/data/* 

création de l'image puis du conteneur

docker build -t framadate:titouan .
docker-compose up -d framadate-titouan