@@ -18,20 +18,102 @@ finement, passent par l'étape 7 et aller au delà.
Ayant peu d'expérience avec Docker, je me suis appuyé sur la
[[https://people.irisa.fr/Anthony.Baire/docker-tutorial.pdf][présentation d'Anthony Baire]] pour préparer cette séquence.
# * Table des matières :TOC:
# - [[#automatiser-lexécution-dun-notebook][Automatiser l'exécution d'un notebook]]
# - [[#identifier-les-dépendances][Identifier les dépendances]]
# - [[#sassure-que-docker-est-bien-installé][S'assure que docker est bien installé]]
# - [[#récupérer-un-environnement-de-base][Récupérer un environnement de base]]
# - [[#exécuter-une-commande-dans-un-conteneur][Exécuter une commande dans un conteneur]]
# - [[#docker-en-interactif][Docker en interactif]]
# - [[#automatiser-la-construction-dun-environnement][Automatiser la construction d'un environnement]]
# - [[#tester-que-votre-code-sexécute-correctement-ailleurs-que-sur-votre-machine][Tester que votre code s'exécute correctement ailleurs que sur votre machine.]]
# - [[#améliorer-le-test][Améliorer le test]]
# - [[#aller-plus-loin][Aller plus loin]]
* Autre progression
* Objectifs et Problématique
** Problématiques:
- Alice a son propre environnemnet, Bob a le sien. Le code/notebook
qu'Alice exécute ne s'exécute pas sur la machine de Bob et
réciproquement.
- Bob ne peut pas mettre à jour sa machine (pas les droits, risque
de casser autre chose, pas le même système d'exploitation, etc.)
- Le code d'Alice s'exécute bien chez Charles mais il ne donne pas
le même résultat.
- Ce code fonctionnait sur d'anciennes versions mais sur des versions
récentes ce n'est plus le cas.
** Objectifs
- Savoir travailler dans un conteneur (*Docker*) pour isoler son travail du reste
de sa machine
- Savoir créer un conteneur pour figer un environnement et le partager
(*Packaging* + *DockerFile*)
- Mettre en place un test pour s'assurer de sa robustesse (*Continuous
Integration*) en déportant son exécution dans des environnements
controllés
* Table des matières :TOC:
- [[#objectifs-et-problématique][Objectifs et Problématique]]
- [[#problématiques][Problématiques:]]
- [[#objectifs][Objectifs]]
- [[#progression][Progression]]
- [[#automatiser-lexécution-dun-notebook][Automatiser l'exécution d'un notebook]]
- [[#identifier-les-dépendances][Identifier les dépendances]]
- [[#sassurer-que-docker-est-bien-installé][S'assurer que docker est bien installé]]
- [[#récupérer-une-image-de-base][Récupérer une image de base]]
- [[#exécuter-une-commande-dans-un-conteneur][Exécuter une commande dans un conteneur]]
- [[#docker-en-interactif][Docker en interactif]]
- [[#installer-tous-les-paquets-dont-on-a-besoin][Installer tous les paquets dont on a besoin]]
- [[#gérer-ses-conteneurs-et-figer-un-environnement][Gérer ses conteneurs et figer un environnement]]
- [[#exécuter-notre-notebook-dans-ce-nouvel-environnemnt][Exécuter notre notebook dans ce nouvel environnemnt]]
- [[#conclusion][Conclusion]]
- [[#automatiser-la-construction-dun-environnement-et-le-partager][Automatiser la construction d'un environnement et le partager.]]
- [[#automatiser-la-construction-de-son-environnement][Automatiser la construction de son environnement]]
- [[#mettre-son-image-à-disposition][Mettre son image à disposition]]
- [[#tester-que-votre-code-sexécute-correctement-ailleurs-que-sur-votre-machine][Tester que votre code s'exécute correctement ailleurs que sur votre machine.]]
- [[#création-dun-projet-test-et-mise-en-place-de-lintégration-continue][Création d'un projet test et mise en place de l'intégration continue]]
- [[#et-maintenant-jupyter-avec-notre-image-docker][Et maintenant, Jupyter avec notre image docker!]]
- [[#améliorer-le-test][Améliorer le test]]
- [[#aller-plus-loin][Aller plus loin]]
- [[#time-machine][Time machine]]
- [[#debian-stretch-with-packages-from-march-2018][Debian Stretch with packages from march 2018]]
- [[#ressources][Ressources]]
- [[#jupyter][Jupyter]]
- [[#rstudio][Rstudio]]
- [[#emacs][Emacs]]
- [[#docker-for-windows][Docker for windows]]
* Progression
1. Familiarisation avec le principe de conteneur.
- Premiers pas avec Docker
- S'assurer que docker est bien installé
- Récupérer une image de base
- Exécuter une commande dans un conteneur
- Utiliser docker en interactif (réaliser qu'il n'y a pas d'effet
de bord)
- Partager un répertoire avec un conteneur
- Utiliser docker pour travailler au jour le jour
- Lancement de Jupyter/Rstudio/Emacs
- (Exécuter un notebook dans un environnement sans interaction)
- Limitations:
- Instabilité de cet environnement (latest vs. un plus vieux)
- Que contient-il vraiment ?
- Besoin de choses en plus ? en moins ?
- Perméabilité si vous installez des choses dans cet
environnement (à moins de le figer)
- Bonne pratique: repérer le tag et bien le préciser
2. Créer son propre environnement, automatiser sa construction et le partage
- Récupérer une image de base
- Installer tous les paquets dont on a besoin
- Gérer ses conteneurs et figer un environnement
- Automatiser la construction de son environnement
- Mettre son image à disposition
- Limitations:
- On peut figer son environnement mais on n'a pas expliqué
comment le faire. Le dockerfile est un bon point de départ mais
s'il s'appuie sur des cibles "mouvantes", ça sera insuffisant
dans quelques temps.
- Bonne pratique: Indiquer la recette (le Dockerfile), les
versions exactes des logiciels utilisés pour permettre à
quelqu'un d'autre de facilement en faire une variation
- [Optionnel] Exemple de reconstruction d'un environnement tel
qu'on aurait pu le faire il y a un an et demi/deux ans.
3. Mettre en place un test et utiliser l'intégration continue pour
s'assurer de la robustesse d'un code.
Point de départ: un notebook
- Exécuter ce notebook dans un conteneur et mettre en place un test
(nbconvert, diff)
- Activer l'intégration continue pour que ce test soit exécuté à
chaque commit dans le conteneur de notre choix
- Rajouter un test pour repérer si des environnements plus à jour
cassent notre test
* Autre progression :noexport:
1. Automatiser l'exécution d'un notebook sur sa machine -> script. Pas
de contrôle du tout de l'environnement. *Où stoquer le résultat?*
*Comment indiquer si c'est OK ?*
...
...
@@ -232,7 +314,7 @@ différentes ou identiques.
conteneurs différents pour vérifier si votre programme fonctionne
toujours bien.
** S'assure que docker est bien installé
** S'assurer que docker est bien installé
Je suis sur une machine linux (une debian) et j'ai donc installé
docker via le paquet =docker.io=. J'ai aussi pris soin de me mettre dans
le groupe docker pour ne pas avoir à passer root à chaque fois. Voici