Commit aa511009 authored by Arnaud Legrand's avatar Arnaud Legrand

C'est la bonne! :) Y'a plus qu'à finir d'écrire la démo.

parent 18fb6283
...@@ -11,10 +11,6 @@ dépendances. L'intégration continue est un moyen d'y arriver mais je ...@@ -11,10 +11,6 @@ dépendances. L'intégration continue est un moyen d'y arriver mais je
dirais que notre objectif n'est pas d'en faire des experts de dirais que notre objectif n'est pas d'en faire des experts de
développement logiciel et de l'intégration continue. développement logiciel et de l'intégration continue.
Il est possible de s'arrêter à l'étape 3. Ceux qui veulent allez plus
loin vont jusqu'à l'étape 6. Et ceux qui veulent vraiment contrôler
finement, passent par l'étape 7 et aller au delà.
Ayant peu d'expérience avec Docker, je me suis appuyé sur la 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. [[https://people.irisa.fr/Anthony.Baire/docker-tutorial.pdf][présentation d'Anthony Baire]] pour préparer cette séquence.
...@@ -37,83 +33,75 @@ Ayant peu d'expérience avec Docker, je me suis appuyé sur la ...@@ -37,83 +33,75 @@ Ayant peu d'expérience avec Docker, je me suis appuyé sur la
- Mettre en place un test pour s'assurer de sa robustesse (*Continuous - Mettre en place un test pour s'assurer de sa robustesse (*Continuous
Integration*) en déportant son exécution dans des environnements Integration*) en déportant son exécution dans des environnements
controllés controllés
* Table des matières :TOC: * Table des matières et Progression :TOC:
- [[#objectifs-et-problématique][Objectifs et Problématique]] - [[#objectifs-et-problématique][Objectifs et Problématique]]
- [[#problématiques][Problématiques:]] - [[#problématiques][Problématiques:]]
- [[#objectifs][Objectifs]] - [[#objectifs][Objectifs]]
- [[#progression][Progression]] - [[#séquence-1-familiarisation-avec-le-principe-de-conteneur][Séquence 1: Familiarisation avec le principe de conteneur]]
- [[#automatiser-lexécution-dun-notebook][Automatiser l'exécution d'un notebook]] - [[#11-premiers-pas-avec-docker][1.1 Premiers pas avec Docker]]
- [[#identifier-les-dépendances][Identifier les dépendances]] - [[#12a-utiliser-docker-pour-travailler-au-jour-le-jour-jupyter][1.2(A) Utiliser docker pour travailler au jour le jour: Jupyter]]
- [[#sassurer-que-docker-est-bien-installé][S'assurer que docker est bien installé]] - [[#12b-utiliser-docker-pour-travailler-au-jour-le-jour-rstudio][1.2(B) Utiliser docker pour travailler au jour le jour: Rstudio]]
- [[#récupérer-une-image-de-base][Récupérer une image de base]] - [[#12c-utiliser-docker-pour-travailler-au-jour-le-jour-emacs][1.2(C) Utiliser docker pour travailler au jour le jour: Emacs]]
- [[#exécuter-une-commande-dans-un-conteneur][Exécuter une commande dans un conteneur]] - [[#13-limitations][1.3 Limitations]]
- [[#docker-en-interactif][Docker en interactif]] - [[#séquence-2-créer-son-propre-environnement-automatiser-sa-construction-et-le-partage][Séquence 2: Créer son propre environnement, automatiser sa construction et le partage]]
- [[#installer-tous-les-paquets-dont-on-a-besoin][Installer tous les paquets dont on a besoin]] - [[#21-récupérer-une-image-de-base][2.1 Récupérer une image de base]]
- [[#gérer-ses-conteneurs-et-figer-un-environnement][Gérer ses conteneurs et figer un environnement]] - [[#22-installer-tous-les-paquets-dont-on-a-besoin][2.2 Installer tous les paquets dont on a besoin]]
- [[#exécuter-notre-notebook-dans-ce-nouvel-environnemnt][Exécuter notre notebook dans ce nouvel environnemnt]] - [[#23-gérer-ses-conteneurs-et-figer-un-environnement][2.3 Gérer ses conteneurs et figer un environnement]]
- [[#conclusion][Conclusion]] - [[#24-automatiser-la-construction-de-son-environnement][2.4 Automatiser la construction de son environnement]]
- [[#automatiser-la-construction-dun-environnement-et-le-partager][Automatiser la construction d'un environnement et le partager.]] - [[#25-mettre-son-image-à-disposition][2.5 Mettre son image à disposition]]
- [[#automatiser-la-construction-de-son-environnement][Automatiser la construction de son environnement]] - [[#26-limitations][2.6 Limitations]]
- [[#mettre-son-image-à-disposition][Mettre son image à disposition]] - [[#27-exemple-de-reconstruction-dun-vieil-environnement-optionnel][2.7 Exemple de reconstruction d'un "vieil" environnement (Optionnel)]]
- [[#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.]] - [[#séquence-3-mettre-en-place-un-test-et-utiliser-lintégration-continue-pour-sassurer-de-la-robustesse-dun-code][Séquence 3: Mettre en place un test et utiliser l'intégration continue pour s'assurer de la robustesse d'un code]]
- [[#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]] - [[#31-exécuter-ce-notebook-dans-un-conteneur-et-mettre-en-place-un-test][3.1 Exécuter ce notebook dans un conteneur et mettre en place un test]]
- [[#et-maintenant-jupyter-avec-notre-image-docker][Et maintenant, Jupyter avec notre image docker!]] - [[#32-activer-lintégration-continue-pour-que-ce-test-soit-exécuté-à-chaque-commit-dans-le-conteneur-de-notre-choix][3.2 Activer l'intégration continue pour que ce test soit exécuté à chaque commit dans le conteneur de notre choix]]
- [[#améliorer-le-test][Améliorer le test]] - [[#33-rajouter-un-test-pour-repérer-si-des-environnements-plus-à-jour-cassent-notre-test][3.3 Rajouter un test pour repérer si des environnements plus à jour cassent notre test]]
- [[#aller-plus-loin][Aller plus loin]] - [[#34-limitations][3.4 Limitations]]
- [[#time-machine][Time machine]]
- [[#debian-stretch-with-packages-from-march-2018][Debian Stretch with packages from march 2018]] * Séquence 1: Familiarisation avec le principe de conteneur
- [[#ressources][Ressources]] ** 1.1 Premiers pas avec Docker
- [[#jupyter][Jupyter]] - S'assurer que docker est bien installé
- [[#rstudio][Rstudio]] - Récupérer une image de base
- [[#emacs][Emacs]] - Exécuter une commande dans un conteneur
- [[#docker-for-windows][Docker for windows]] - Utiliser docker en interactif (réaliser qu'il n'y a pas d'effet
* 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) de bord)
- Partager un répertoire avec un conteneur - Partager un répertoire avec un conteneur
- Utiliser docker pour travailler au jour le jour ** 1.2(A) Utiliser docker pour travailler au jour le jour: Jupyter
- Lancement de Jupyter/Rstudio/Emacs - (Exécuter un notebook dans un environnement sans interaction)
- (Exécuter un notebook dans un environnement sans interaction) ** 1.2(B) Utiliser docker pour travailler au jour le jour: Rstudio
- Limitations: ** 1.2(C) Utiliser docker pour travailler au jour le jour: Emacs
- Instabilité de cet environnement (latest vs. un plus vieux) ** 1.3 Limitations
- Que contient-il vraiment ? - Instabilité de cet environnement (latest vs. un plus vieux)
- Besoin de choses en plus ? en moins ? - Que contient-il vraiment ?
- Perméabilité si vous installez des choses dans cet - Besoin de choses en plus ? en moins ?
- Perméabilité si vous installez des choses dans cet
environnement (à moins de le figer) environnement (à moins de le figer)
- Bonne pratique: repérer le tag et bien le préciser - Bonne pratique: repérer le tag et bien le préciser
2. Créer son propre environnement, automatiser sa construction et le partage * Séquence 2: Créer son propre environnement, automatiser sa construction et le partage
- Récupérer une image de base ** 2.1 Récupérer une image de base
- Installer tous les paquets dont on a besoin ** 2.2 Installer tous les paquets dont on a besoin
- Gérer ses conteneurs et figer un environnement ** 2.3 Gérer ses conteneurs et figer un environnement
- Automatiser la construction de son environnement ** 2.4 Automatiser la construction de son environnement
- Mettre son image à disposition ** 2.5 Mettre son image à disposition
- Limitations: ** 2.6 Limitations
- On peut figer son environnement mais on n'a pas expliqué - On peut figer son environnement mais on n'a pas expliqué
comment le faire. Le dockerfile est un bon point de départ mais comment le faire. Le dockerfile est un bon point de départ mais
s'il s'appuie sur des cibles "mouvantes", ça sera insuffisant s'il s'appuie sur des cibles "mouvantes", ça sera insuffisant
dans quelques temps. dans quelques temps.
- Bonne pratique: Indiquer la recette (le Dockerfile), les - Bonne pratique: Indiquer la recette (le Dockerfile), les
versions exactes des logiciels utilisés pour permettre à versions exactes des logiciels utilisés pour permettre à
quelqu'un d'autre de facilement en faire une variation quelqu'un d'autre de facilement en faire une variation
- [Optionnel] Exemple de reconstruction d'un environnement tel ** 2.7 Exemple de reconstruction d'un "vieil" environnement (Optionnel)
qu'on aurait pu le faire il y a un an et demi/deux ans. (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équence 3: Mettre en place un test et utiliser l'intégration continue pour s'assurer de la robustesse d'un code
s'assurer de la robustesse d'un code. Point de départ: un notebook
** 3.1 Exécuter ce notebook dans un conteneur et mettre en place un test
Point de départ: un notebook - Utiliser nbconvert et diff
- Exécuter ce notebook dans un conteneur et mettre en place un test ** 3.2 Activer l'intégration continue pour que ce test soit exécuté à chaque commit dans le conteneur de notre choix
(nbconvert, diff) ** 3.3 Rajouter un test pour repérer si des environnements plus à jour cassent notre test
- Activer l'intégration continue pour que ce test soit exécuté à ** 3.4 Limitations
chaque commit dans le conteneur de notre choix - Qui a "raison" ? Comment savoir ce qui a causé la différence ?
- Rajouter un test pour repérer si des environnements plus à jour * Old notes :noexport:
cassent notre test ** Autre progression :noexport:
* Autre progression :noexport:
1. Automatiser l'exécution d'un notebook sur sa machine -> script. Pas 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?* de contrôle du tout de l'environnement. *Où stoquer le résultat?*
*Comment indiquer si c'est OK ?* *Comment indiquer si c'est OK ?*
...@@ -127,7 +115,7 @@ Ayant peu d'expérience avec Docker, je me suis appuyé sur la ...@@ -127,7 +115,7 @@ Ayant peu d'expérience avec Docker, je me suis appuyé sur la
recette ? recette ?
6. Reconstruire un environnement particulier? Une vieille debian par 6. Reconstruire un environnement particulier? Une vieille debian par
exemple ? exemple ?
* Automatiser l'exécution d'un notebook ** Automatiser l'exécution d'un notebook
Commençons par un notebook tout simple, celui de challenger, et Commençons par un notebook tout simple, celui de challenger, et
vérifions qu'il s'exécute bien sur "ma machine". Je commence par créer vérifions qu'il s'exécute bien sur "ma machine". Je commence par créer
un répertoire pour ce notebook. un répertoire pour ce notebook.
...@@ -291,7 +279,7 @@ et les valeurs de Log-Likelihood et de Deviance sont très ...@@ -291,7 +279,7 @@ et les valeurs de Log-Likelihood et de Deviance sont très
différentes. Que s'est-il passé ? A priori, ce sont des bibliothèques différentes. Que s'est-il passé ? A priori, ce sont des bibliothèques
python différentes qui ont été utilisées et qui expliquent ces python différentes qui ont été utilisées et qui expliquent ces
différences. Nous allons voir comment contrôler tout ceci. différences. Nous allons voir comment contrôler tout ceci.
* Identifier les dépendances ** Identifier les dépendances
Je vais vous montrer comment créer et manipuler une image et un Je vais vous montrer comment créer et manipuler une image et un
conteneur docker sur ma machine pas à pas. Vous n'aurez pas forcément conteneur docker sur ma machine pas à pas. Vous n'aurez pas forcément
à réaliser ce genre de choses par la suite sur votre machine mais il à réaliser ce genre de choses par la suite sur votre machine mais il
...@@ -314,7 +302,7 @@ différentes ou identiques. ...@@ -314,7 +302,7 @@ différentes ou identiques.
conteneurs différents pour vérifier si votre programme fonctionne conteneurs différents pour vérifier si votre programme fonctionne
toujours bien. toujours bien.
** S'assurer 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é 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 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 le groupe docker pour ne pas avoir à passer root à chaque fois. Voici
...@@ -347,7 +335,7 @@ Server: ...@@ -347,7 +335,7 @@ Server:
OS/Arch: linux/amd64 OS/Arch: linux/amd64
Experimental: false Experimental: false
#+end_example #+end_example
** Récupérer une image de base *** Récupérer une image de base
Nous pouvons commener. L'idée pour bien contrôler son environnement va Nous pouvons commener. L'idée pour bien contrôler son environnement va
être de partir d'un environnement minimaliste et dans lequel notre être de partir d'un environnement minimaliste et dans lequel notre
notebook aura d'ailleurs peu de chances de s'exécuter. Je partirai notebook aura d'ailleurs peu de chances de s'exécuter. Je partirai
...@@ -386,7 +374,7 @@ debian stable 40e13c3c9aab 12 day ...@@ -386,7 +374,7 @@ debian stable 40e13c3c9aab 12 day
Mon image apparaît. Elle fait 114MB et a été construite il y a 12 Mon image apparaît. Elle fait 114MB et a été construite il y a 12
jours. jours.
** Exécuter une commande dans un conteneur *** Exécuter une commande dans un conteneur
Grâce à la commande docker run, je vais pouvoir exécuter des commandes Grâce à la commande docker run, je vais pouvoir exécuter des commandes
dans le conteneur que je viens de télécharger. Par exemple, comme ceci. dans le conteneur que je viens de télécharger. Par exemple, comme ceci.
#+begin_src shell :session *shell* :results output :exports both #+begin_src shell :session *shell* :results output :exports both
...@@ -450,7 +438,7 @@ peu comme si un mini-système d'exploitation démarrait, exécutait cette ...@@ -450,7 +438,7 @@ peu comme si un mini-système d'exploitation démarrait, exécutait cette
commande et s'éteignait... C'est un peu pénible d'avoir à toujours commande et s'éteignait... C'est un peu pénible d'avoir à toujours
préfixer par =docker run=, donc une solution simple consiste à lancer préfixer par =docker run=, donc une solution simple consiste à lancer
docker en mode interactif. docker en mode interactif.
** Docker en interactif *** Docker en interactif
À partir de maintenant, il vous faudra bien faire attention à À partir de maintenant, il vous faudra bien faire attention à
distinguer les commandes qui sont lancées sur mon système de base de distinguer les commandes qui sont lancées sur mon système de base de
celles qui sont lancées dans notre conteneur docker. celles qui sont lancées dans notre conteneur docker.
...@@ -647,7 +635,7 @@ python3 --version ...@@ -647,7 +635,7 @@ python3 --version
#+RESULTS: #+RESULTS:
: Python 3.7.2rc1 : Python 3.7.2rc1
** Installer tous les paquets dont on a besoin *** Installer tous les paquets dont on a besoin
Bien, j'ai python3 mais ça ne suffira pas pour exécuter mon notebook. Il me Bien, j'ai python3 mais ça ne suffira pas pour exécuter mon notebook. Il me
faudra aussi bien sûr =jupyter= et différents paquets comme =matplotlib=, faudra aussi bien sûr =jupyter= et différents paquets comme =matplotlib=,
=pandas=, =numpy=, =statsmodels=... Courage, allons-y! =pandas=, =numpy=, =statsmodels=... Courage, allons-y!
...@@ -699,7 +687,7 @@ en train de s'exécuter et dans lequel python3 est bien installé mais ...@@ -699,7 +687,7 @@ en train de s'exécuter et dans lequel python3 est bien installé mais
ça n'est pas accessible en dehors. En fait, dès que je fermerai le ça n'est pas accessible en dehors. En fait, dès que je fermerai le
terminal où se trouve mon docker interactif, je risque de perdre tout terminal où se trouve mon docker interactif, je risque de perdre tout
ce que je viens d'installer. ce que je viens d'installer.
** Gérer ses conteneurs et figer un environnement *** Gérer ses conteneurs et figer un environnement
Il est temps que je vous montre comment manipuler ces conteneur. Tout Il est temps que je vous montre comment manipuler ces conteneur. Tout
d'abord, la commande =docker ps= me permet de savoir quels sont les d'abord, la commande =docker ps= me permet de savoir quels sont les
conteneurs en cours d'exécution (il n'y en a qu'un pour l'instant mais conteneurs en cours d'exécution (il n'y en a qu'un pour l'instant mais
...@@ -832,7 +820,7 @@ docker ps ...@@ -832,7 +820,7 @@ docker ps
#+RESULTS: #+RESULTS:
: CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES : CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
** Exécuter notre notebook dans ce nouvel environnemnt *** Exécuter notre notebook dans ce nouvel environnemnt
Le conteneur ayant son propre système de fichier, il va falloir Le conteneur ayant son propre système de fichier, il va falloir
trouver un moyen d'y importer notre notebook. Le plus simple consiste trouver un moyen d'y importer notre notebook. Le plus simple consiste
à monter notre répertoire courant dans le =/tmp= du conteneur. à monter notre répertoire courant dans le =/tmp= du conteneur.
...@@ -915,7 +903,7 @@ par remarquer que quelques lettres ont changé dans l'encodage des ...@@ -915,7 +903,7 @@ par remarquer que quelques lettres ont changé dans l'encodage des
images. Elles sont donc a différentes mais pas sûr que ça soit visible images. Elles sont donc a différentes mais pas sûr que ça soit visible
à l'oeil nu. à l'oeil nu.
** Conclusion *** Conclusion
Nous avons donc vu comment construire un environnement Nous avons donc vu comment construire un environnement
manuellement. Ce n'est pas très compliqué mais il faut être manuellement. Ce n'est pas très compliqué mais il faut être
soigneux. Ici tout s'est passé sans encombre mais la première fois, soigneux. Ici tout s'est passé sans encombre mais la première fois,
...@@ -932,7 +920,7 @@ environnemnet logiciel avec les bonnes dépendances pour pouvoir ...@@ -932,7 +920,7 @@ environnemnet logiciel avec les bonnes dépendances pour pouvoir
refaire mes calculs éventuellement sur de nouvelles données. C'est refaire mes calculs éventuellement sur de nouvelles données. C'est
pour cela que je partage le répertoire contenant mon notebook et mon pour cela que je partage le répertoire contenant mon notebook et mon
fichier csv. fichier csv.
** Update :noexport: *** Update :noexport:
Renaming the image to =debian_stable_jupyter_alpha=. Renaming the image to =debian_stable_jupyter_alpha=.
#+begin_src shell :results output :exports both #+begin_src shell :results output :exports both
...@@ -1033,7 +1021,7 @@ docker commit debian_mooc debian_stable_jupyter ...@@ -1033,7 +1021,7 @@ docker commit debian_mooc debian_stable_jupyter
#+RESULTS: #+RESULTS:
: sha256:2b001b2c02a66a7bf2ab2e7e3d234f3611bc7e6228e2f423ceb7d294cb6bd442 : sha256:2b001b2c02a66a7bf2ab2e7e3d234f3611bc7e6228e2f423ceb7d294cb6bd442
* Automatiser la construction d'un environnement et le partager. ** Automatiser la construction d'un environnement et le partager.
Vous remarquerez que dans tout ce qui a précédé, j'ai noté dans mon Vous remarquerez que dans tout ce qui a précédé, j'ai noté dans mon
journal de ce que j'ai effectué mais vous n'avez aucune garantie que journal de ce que j'ai effectué mais vous n'avez aucune garantie que
je n'ai rien oublié. De plus, si vous voulez refaire cet environnement je n'ai rien oublié. De plus, si vous voulez refaire cet environnement
...@@ -1047,7 +1035,7 @@ public à l'aide de la commande =docker push=. Vous allez voir que c'est ...@@ -1047,7 +1035,7 @@ public à l'aide de la commande =docker push=. Vous allez voir que c'est
bien plus simple que tout ce que je vous ai montré précedémment bien plus simple que tout ce que je vous ai montré précedémment
puisque tout est caché! puisque tout est caché!
** Automatiser la construction de son environnement *** Automatiser la construction de son environnement
Je commence par créer un répertoire dans lequel sera stoqué un Je commence par créer un répertoire dans lequel sera stoqué un
=[[file:mooc_docker_image/Dockerfile][Dockerfile]]=. =[[file:mooc_docker_image/Dockerfile][Dockerfile]]=.
...@@ -2690,7 +2678,7 @@ diff notebook_docker.ipynb notebook_docker_dockerfile.ipynb # | sed 's/^/>/' ...@@ -2690,7 +2678,7 @@ diff notebook_docker.ipynb notebook_docker_dockerfile.ipynb # | sed 's/^/>/'
: > "Time: 09:13:51 Pearson chi2: 0.236\n", : > "Time: 09:13:51 Pearson chi2: 0.236\n",
Ouf, cette fois-ci, il n'y a plus que la date qui ait changé. Ouf, cette fois-ci, il n'y a plus que la date qui ait changé.
** Mettre son image à disposition *** Mettre son image à disposition
Reste à publier mon image. Je me suis créé un compte sur dockerhub Reste à publier mon image. Je me suis créé un compte sur dockerhub
afin de pouvoir y publier des images (vous pouvez aussi vous afin de pouvoir y publier des images (vous pouvez aussi vous
authentifier via github). Une fois que vous aurez votre login et votre authentifier via github). Une fois que vous aurez votre login et votre
...@@ -2734,13 +2722,13 @@ de python et de jupyter. ...@@ -2734,13 +2722,13 @@ de python et de jupyter.
Vos collègues peuvent maintenant récupérer cette image sans problème Vos collègues peuvent maintenant récupérer cette image sans problème
et la réutiliser. et la réutiliser.
* Tester que votre code s'exécute correctement ailleurs que sur votre machine. ** Tester que votre code s'exécute correctement ailleurs que sur votre machine.
Je montrerais ensuite CI (sur la branche master) et comment utiliser Je montrerais ensuite CI (sur la branche master) et comment utiliser
ces commandes pour que l'image soit capable d'exécuter notre notebook. ces commandes pour que l'image soit capable d'exécuter notre notebook.
https://docs.gitlab.com/ee/ci/quick_start/ https://docs.gitlab.com/ee/ci/quick_start/
** Création d'un projet test et mise en place de l'intégration continue *** Création d'un projet test et mise en place de l'intégration continue
Je commence par créer un projet jouet sur gitlab, que je clone ensuite Je commence par créer un projet jouet sur gitlab, que je clone ensuite
sur mon disque. sur mon disque.
#+begin_src shell :results output :exports both #+begin_src shell :results output :exports both
...@@ -2794,7 +2782,7 @@ On peut ensuite aller sur la page des commits: ...@@ -2794,7 +2782,7 @@ On peut ensuite aller sur la page des commits:
- https://gitlab.inria.fr/learninglab/mooc-rr/test_jupyter/commit/b74a444042bf081cf72b12b932494702d11d0299/pipelines?ref=master - https://gitlab.inria.fr/learninglab/mooc-rr/test_jupyter/commit/b74a444042bf081cf72b12b932494702d11d0299/pipelines?ref=master
** Et maintenant, Jupyter avec notre image docker! *** Et maintenant, Jupyter avec notre image docker!
Copions notre notebook et ses données dans notre projet: Copions notre notebook et ses données dans notre projet:
#+begin_src shell :results output :exports both #+begin_src shell :results output :exports both
...@@ -2889,13 +2877,13 @@ Puis: https://gitlab.inria.fr/alegrand/test_jupyter/pipelines ...@@ -2889,13 +2877,13 @@ Puis: https://gitlab.inria.fr/alegrand/test_jupyter/pipelines
(Settings/CI-CD) (Settings/CI-CD)
- Shared runners are disabled for the INRIA Gitlab instance. - Shared runners are disabled for the INRIA Gitlab instance.
* Améliorer le test ** Améliorer le test
Je peux alors montrer (a) comment utiliser l'environnement figé pour Je peux alors montrer (a) comment utiliser l'environnement figé pour
s'assurer que nos propres modifications du notebook n'ont rien cassé s'assurer que nos propres modifications du notebook n'ont rien cassé
et (b) comment utiliser l'environnement qui se met à jour et (b) comment utiliser l'environnement qui se met à jour
régulièrement pour s'assurer que l'évolution de l'extérieur ne remet régulièrement pour s'assurer que l'évolution de l'extérieur ne remet
pas en cause nos résultats. pas en cause nos résultats.
* Aller plus loin ** Aller plus loin
7. Enfin, pour s'occuper du point (B) sans passer par un docker 7. Enfin, pour s'occuper du point (B) sans passer par un docker
build/push manuel, je montrerais comment (sur une debian, par build/push manuel, je montrerais comment (sur une debian, par
exemple) améliorer le dockerfile afin d'expliciter les numéros de exemple) améliorer le dockerfile afin d'expliciter les numéros de
...@@ -3284,7 +3272,7 @@ ii zlib1g:amd64 1:1.2.11.dfsg-1 amd64 compression ...@@ -3284,7 +3272,7 @@ ii zlib1g:amd64 1:1.2.11.dfsg-1 amd64 compression
#+begin_src shell :results output :exports both #+begin_src shell :results output :exports both
dpkg --get-selections # dpkg --set-selections dpkg --get-selections # dpkg --set-selections
#+end_src #+end_src
* Time machine ** Time machine
From https://www.debian.org/releases/: From https://www.debian.org/releases/:
...@@ -3293,7 +3281,7 @@ From https://www.debian.org/releases/: ...@@ -3293,7 +3281,7 @@ From https://www.debian.org/releases/:
- stable: buster (juillet 2019) - stable: buster (juillet 2019)
- testing: bullseye - testing: bullseye
- unstable: sid - unstable: sid
** oldoldstable (jessie) :noexport: *** oldoldstable (jessie) :noexport:
#+begin_src shell :session *docker* :results output :exports both #+begin_src shell :session *docker* :results output :exports both
docker run -t -i debian:oldoldstable-slim docker run -t -i debian:oldoldstable-slim
...@@ -3479,7 +3467,7 @@ Moralité: c'est l'horreur, vaut mieux oublier de partir d'une distrib ...@@ -3479,7 +3467,7 @@ Moralité: c'est l'horreur, vaut mieux oublier de partir d'une distrib
où les paquets n'étaient pas encore rentrés. Il faudrait itérativement où les paquets n'étaient pas encore rentrés. Il faudrait itérativement
repérer chacun des paquets, un numéro de version qui va bien et les repérer chacun des paquets, un numéro de version qui va bien et les
récuperer sur snapshot... récuperer sur snapshot...
** oldstable (stretch, V2 more controled) :noexport: *** oldstable (stretch, V2 more controled) :noexport:
#+begin_src shell :session *docker* :results output :exports both #+begin_src shell :session *docker* :results output :exports both
docker run -t -i debian:stretch-20190708-slim docker run -t -i debian:stretch-20190708-slim
...@@ -3621,7 +3609,7 @@ https://snapshot.debian.org/binary/python3-statsmodels/ ...@@ -3621,7 +3609,7 @@ https://snapshot.debian.org/binary/python3-statsmodels/
wget https://snapshot.debian.org/archive/debian/20170929T215212Z/pool/main/s/statsmodels/python3-statsmodels_0.8.0-4_all.deb wget https://snapshot.debian.org/archive/debian/20170929T215212Z/pool/main/s/statsmodels/python3-statsmodels_0.8.0-4_all.deb
python3-statsmodels-lib python3-statsmodels-lib
** Debian Stretch with packages from march 2018 *** Debian Stretch with packages from march 2018
#+begin_src shell :session *docker* :results output :exports both #+begin_src shell :session *docker* :results output :exports both
docker run -t -i debian:stretch-slim # or even better: stretch-20170606 docker run -t -i debian:stretch-slim # or even better: stretch-20170606
...@@ -4087,8 +4075,8 @@ docker commit 3e302c4c2ed7 debian_stretch_20180310_python3_statsmodels ...@@ -4087,8 +4075,8 @@ docker commit 3e302c4c2ed7 debian_stretch_20180310_python3_statsmodels
#+RESULTS: #+RESULTS:
: sha256:e86b1c50e7a8896bb44686f827a85d5375d192560e25ad2a1533cde7dfac8b1a : sha256:e86b1c50e7a8896bb44686f827a85d5375d192560e25ad2a1533cde7dfac8b1a
* Ressources ** Ressources
** Jupyter *** Jupyter
See See
- https://hub.docker.com/ - https://hub.docker.com/
- https://jupyter-docker-stacks.readthedocs.io/en/latest/index.html - https://jupyter-docker-stacks.readthedocs.io/en/latest/index.html
...@@ -4143,9 +4131,9 @@ docker run -p 8888:8888 jupyter/scipy-notebook:dc6ae8bd8209 # a 3 years old imag ...@@ -4143,9 +4131,9 @@ docker run -p 8888:8888 jupyter/scipy-notebook:dc6ae8bd8209 # a 3 years old imag
#+end_src #+end_src
Show Show
** Rstudio *** Rstudio
https://hub.docker.com/r/rocker/rstudio/ https://hub.docker.com/r/rocker/rstudio/
** Emacs *** Emacs
https://github.com/JAremko/docker-emacs https://github.com/JAremko/docker-emacs
https://hub.docker.com/r/jare/emacs https://hub.docker.com/r/jare/emacs
...@@ -4155,5 +4143,5 @@ docker run -ti -v /tmp/.X11-unix:/tmp/.X11-unix:ro -e DISPLAY="unix$DISPLAY" -e ...@@ -4155,5 +4143,5 @@ docker run -ti -v /tmp/.X11-unix:/tmp/.X11-unix:ro -e DISPLAY="unix$DISPLAY" -e
#+RESULTS: #+RESULTS:
** Docker for windows *** Docker for windows
https://docs.docker.com/docker-for-windows/ https://docs.docker.com/docker-for-windows/
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment