# Conteneur Docker pour traitement des Données OHP

## En bref 
Pour faire court : 

* Télécharger l'image `docker pull chottier/ohpstudent:2.0`
* Créer le conteneur et le démarrer `docker run -d -p 8910:8888 -v /repertoire/travail/ohp:/home/ohpstudent/work --name
ohpprocessim chottier/ohpstudent:2.0`
* Arrêter le conteneur `docker stop ohpprocessim`
* Redémarrer le conteneur `docker start ohpprocessim`

## Un point sur Docker

Docker est un système de virtualisation légère. Une machine virtuelle classique démarre un
système d'exploitation de manière complètement indépendante du système hôte. Docker, quant à
lui, n'est pas complètement séparé du système hôte, il utilise du système tout ce dont il a
besoin et ne rajoute que la différence entre le système hôte et ce qui est requis par le
conteneur. 

Docker fonctionne avec des images. Ces images sont trouvables sur [docker hub](https://hub.docker.com/).
À partir de ces images, on construit des conteneurs. Ce sont ces conteneurs qui "se comportent
comme des machines virtuelles".

Note : Il est tout a fait possible de construire plusieurs conteneurs à partir d'une même image.
Les images sont en fait des modèles.

## Installation de docker 

Docker fonctionne sur tous les systèmes d'exploitation (Mac OS X, Windows et Linux), référez-
vous à la documentation en lignes de [docker](https://www.docker.com/) concernant votre système
d'exploitation.

## Récupération de l'image docker

Vous pouvez récupérer l'image qui a été préparée grâce à la commande `docker pull chottier/ohpstudent:2.0` 
cela téléchargera la version 2.0 de l'image. D'autres versions pourront éventuellement être
livrées, pour les récupérer il suffira de changer le tag dans la commande précédente.  

On pourra vérifier que l'image est correctement téléchargée avec la commande `docker images`

```console
$> docker images
REPOSITORY            TAG                 IMAGE ID            CREATED             SIZE
chottier/ohpstudent   2.0                 af8517064048        43 hours ago        6.25GB
```


Note : Docker utilise des fichiers incrémentaux ainsi lors de la récupération de nouvelles
images, seule la différence avec les versions antérieures est téléchargée. 

## Création de votre conteneur et utilisation

L'utilisation de docker vous permet de partager des répertoires (des dossiers) du système hôte avec le
conteneur. Vous devrez donc créer un répertoire (qui pourra en contenir d'autre) dans lequel vous stockerez les images et les
spectres que vous acquerrez ainsi que l'ensemble des résultats de vos analyses scientifiques.
Dans la suite de ce document, on désignera ce répertoire par `/repertoire/travail/ohp`

Note : On utilise ici la nomenclature UNIX de séparation de fichier avec des `/`. 

### Initialisation et lancement

Une fois que l'image est obtenue, vous pouvez créer votre conteneur avec la commande (barbare ?) suivante 
`docker run -d -p 8910:8888 -v /repertoire/travail/ohp:/home/ohpstudent/work --name
ohpprocessim chottier/ohpstudent:2.0`.

Décomposons la commande : 
* `docker run` signifie que vous souhaitez initialiser un conteneur et le lancer. 
* `-d` pour le mode détacher, le conteneur fonctionnera en arrière plan.
* `-p 8910:8888` permet de connecter le port 8910 de votre machine (la machine hôte) au port
  8888 du conteneur. Vous êtes libre de choisir le port de votre machine (prenez toujours un
  nombre plus grand que 8000 !!!). Le port 8888 est obligatoire pour le conteneur. 
* `-v /repertoire/travail/ohp:/home/ohpstudent/work` permet de lié le  répertoire de votre
  machine au répertoire du conteneur
* `--name ohpprocessim` le nom du conteneur que vous créez et que vous réutiliserez
* `chottier/ohpstudent:2.0` le nom de l'image que vous utilisez pour créer votre conteneur

Une fois la commande exécutée, docker vous renvoie un identifiant signifiant que le conteneur
s'est convenablement lancé : 

```console
$> docker run -d -p 8910:8888 -v /repertoire/travail/ohp:/home/ohpstudent/work --name ohpprocessim chottier/ohpstudent:2.0
2181ab073aa345727da7078db5b0f83a6fe72f759e73888eea00f1637e3f2542
```

Vous pouvez vérifier que votre conteneur est fonctionnel grâce à la commande `docker ps -a`
qui liste tous les conteneurs disponibles et leurs statuts.

```console
$> docker ps -a 
CONTAINER ID   IMAGE                     COMMAND              CREATED         STATUS           PORTS                    NAMES
2181ab073aa3   chottier/ohpstudent:2.0   "jupyter-notebook"   3 minutes ago   Up 3 minutes     0.0.0.0:8910->8888/tcp   ohpprocessim
```

On y constate que notre conteneur est actif (STATUS : Up), et qu'il est bien branché sur le
port 8910 (PORTS `0.0.0.0:8910->8888/tcp`). 

### Utilisation du conteneur et de ses logiciels 

Une fois le conteneur actif, entrer `localhost:8910` dans la barre d'url de votre navigateur (Firefox, Chrome, Safari...),
un jupiter notebook s'ouvre. Le répertoire work est celui connecter à
`/repertoire/travail/ohp`. 

Dès lors vous pouvez utiliser le Jupyter-notebook comme à l'accoutumé. Y compris ouvrir un
terminal pour avoir accès au logiciels d'astromatic :
* sextractor
* scamp
* swarp
* psfex
* stiff

Vous aurez aussi accès au logiciel `solve-field` d'astrometry.net.

### arrêt et redémarrage 

Pour arrêter le conteneur, on invoque `docker stop ohpprocessim`. On peut vérifier sont statuts
avec 
```console
$> docker ps -a 
CONTAINER ID   IMAGE                     COMMAND              CREATED         STATUS                   PORTS   NAMES
2181ab073aa3   chottier/ohpstudent:2.0   "jupyter-notebook"   3 minutes ago   Exited (0) 3 seconds ago         ohpprocessim
```

Pour redémarrer le conteneur `docker start ohpprocessim` car le conteneur existe déjà.

### Gestion des images et des conteneurs

Pour supprimer une image utiliser `docker rmi nomImage`. Cette opération sera empêchée si cette
image a été utilisée pour créer un conteneur. 

Pour supprimer un conteneur `docker rm nomDuConteneur`. Attention tout les fichiers du conteneur
qui ne sont pas partager sur le disque de l'hôte (`/repertoire/travail/ohp` dans notre cas)
serons perdus. 

## List des commandes 

* Télécharger l'image `docker pull chottier/ohpstudent:2.0`
* Créer le conteneur et le démarrer `docker run -d -p 8910:8888 -v /repertoire/travail/ohp:/home/ohpstudent/work --name
ohpprocessim chottier/ohpstudent:2.0`
* Arrêter le conteneur `docker stop ohpprocessim`
* Redémarrer le conteneur `docker start ohpprocessim`
* Statuts des conteneurs `docker ps -a`
* Listes des images disponibles `docker images`
* Supprimer un conteneur `docker rm ohpprocessim`
* Supprimer une image `docker rmi chottier/ohpstudent`
