[PYTHON] Pour ceux d'entre vous qui ne savent pas comment définir un mot de passe avec Jupyter sur Docker

introduction

Je veux essayer l'apprentissage automatique → Tensorflow, non? Je veux l'essayer de manière interactive sur le Web → Jupyter, non? Je veux construire une infrastructure facilement → Docker, non? Alors je l'ai essayé, mais je suis resté coincé dans où définir le mot de passe, donc j'écrirai la solution

Lecteur supposé

Ceux qui postulent à ce qui suit

――Je suis ingénieur infrastructure, mais je veux essayer l'apprentissage automatique --Docker je l'ai touché récemment, mais je ne connais pas les détails --Python je le touche un peu, mais je ne sais pas grand chose --Jupyter Est-ce que ça va? Je ne sais pas

Raisons d'utiliser Docker

En gros, j'aimerais l'essayer avec mon MacBook Air, mais je n'ai évidemment pas assez de ressources. Donc, si vous voulez le faire fermement, la meilleure solution est sur le cloud comme AWS ou GCP. Je veux le frapper localement, puis l'amener dans le cloud, donc la chose la plus simple et la plus populaire est Docker. Construire un Jupyter est un problème, il est donc très facile d'utiliser un conteneur qui contient tout. (Si vous essayez de le mettre dans Ansible ou Chef, il restera bloqué de différentes manières ...)

Obtenir une image

Tout d'abord, récupérez l'image. Il existe différents types d'images Jupyter ci-dessous, alors choisissez-en une en fonction de votre objectif. https://github.com/jupyter/docker-stacks

Je veux utiliser tensorflow cette fois, je vais donc utiliser ce qui suit. https://github.com/jupyter/docker-stacks/tree/master/tensorflow-notebook

docker pull tirons

$ docker pull jupyter/tensorflow-notebook
Unable to find image 'jupyter/tensorflow-notebook:latest' locally
latest: Pulling from jupyter/tensorflow-notebook
75a822cd7888: Pulling fs layer 
f74dd7a42a1f: Pulling fs layer 
7b03c47d9699: Pull complete 
ecef67eb4d88: Pull complete 
bd6c8cee2aa9: Pull complete 
8ecf884c467a: Pull complete 
7dc68d7c7ffd: Pull complete 
3369a456e292: Pull complete 
e626c4a34300: Pull complete 
619d5c673fb7: Pull complete 
eff746881b74: Pull complete 
fae5187ea9e1: Pull complete 
e1fd76e4adb2: Pull complete 
b5d2ba91f6a5: Pull complete 
5804e217f19f: Pull complete 
7719a427e59f: Pull complete 
33ea9d473883: Pull complete 
d28a865b24f6: Pull complete 
7e2fa13ce090: Pull complete 
15b63cba13fd: Pull complete 
adcb147a9782: Pull complete 
ce56ab01574f: Pull complete 
aa6a6ae0b01e: Pull complete 
2c54a9d73fcd: Pull complete 
47c2872f3870: Pull complete 
Digest: sha256:dd7b9e81c167647a87300043f21e3b37eee6d463815b86db9976c299cd4cc046
Status: Downloaded newer image for jupyter/tensorflow-notebook:latest
101e77006b40935607969dbad87e4540719ec55e66168d507f0ea8bb04ffe713

point important

Vous pouvez obtenir une erreur comme indiqué ci-dessous.

$ docker pull jupyter/tensorflow-notebook
Unable to find image 'jupyter/tensorflow-notebook:latest' locally
latest: Pulling from jupyter/tensorflow-notebook
75a822cd7888: Pulling fs layer 
f74dd7a42a1f: Pulling fs layer 
f74dd7a42a1f: Pull complete 
ecef67eb4d88: Download complete 
bd6c8cee2aa9: Download complete 
8ecf884c467a: Download complete 
7dc68d7c7ffd: Download complete 
3369a456e292: Download complete 
e626c4a34300: Download complete 
619d5c673fb7: Download complete 
eff746881b74: Download complete 
fae5187ea9e1: Download complete 
e1fd76e4adb2: Download complete 
b5d2ba91f6a5: Downloading 96.62 MB/660.8 MB
5804e217f19f: Download complete 
7719a427e59f: Downloading 126.5 MB/281.6 MB
33ea9d473883: Download complete 
d28a865b24f6: Downloading 314.1 MB/314.1 MB
7e2fa13ce090: Waiting 
15b63cba13fd: Waiting 
adcb147a9782: Waiting 
ce56ab01574f: Waiting 
aa6a6ae0b01e: Waiting 
2c54a9d73fcd: Waiting 
47c2872f3870: Waiting 
docker: write /var/lib/docker/tmp/GetImageBlob222925529: no space left on device.
See 'docker run --help'.

La cause est que l'image est d'environ 5G, il semble donc que la capacité soit insuffisante. Donc, si vous supprimez d'autres images, c'est OK (le style neuronal est trop grand)

$ docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
poppen/trusty-ansible-serverspec   latest              e84a5c7341fd        10 weeks ago        691 MB
flyinprogrammer/serverspec         latest              1b34b62345b3        12 weeks ago        154.4 MB
somatic/torch-fast-neural-style    latest              97645d9c69e8        3 months ago        7.323 GB
amazon/amazon-ecs-agent            latest              a76825ffa321        3 months ago        10.84 MB
elenaalexandrovna/opencv-python3   latest              910fcd0fa477        4 months ago        594.7 MB
trafferty/docker-ipython-opencv    latest              686f355ae522        19 months ago       8.676 GB
$ docker rmi a76825ffa321 910fcd0fa477 97645d9c69e8
Untagged: amazon/amazon-ecs-agent:latest
Untagged: amazon/amazon-ecs-agent@sha256:391a45a5b69a8d9fe1844310c4cf90e82e31cb167a93eb94d5a49b2b2456ad46
Deleted: sha256:a76825ffa321686b2df70a0be52fe5ecd52006a347cee5f07635b188655a5e86
...

Démarrez le conteneur d'acquisition de valeur de hachage

$ docker run -it --rm -p 8888:8888 jupyter/tensorflow-notebook
1b11efc02512ab60a26909ced181a16e01db57160607bb5c54c2acacae30a20b
$ docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                    NAMES
fb31e1a2fda1        jupyter/tensorflow-notebook   "tini -- start-notebo"   6 seconds ago       Up 1 seconds        0.0.0.0:8888->8888/tcp   thirsty_kilby

À ce rythme, même si vous accédez à http: // localhost: 8888, vous ne regarderez que l'écran de mot de passe.

Obtenir la valeur de hachage

Lancer bash dans un conteneur avec docker exec

$ docker exec -it fb31e1a2fda1 /bin/bash

Exécutez-le à partir de python, saisissez le mot de passe que vous souhaitez définir deux fois et obtenez la valeur de hachage du mot de passe. Dans l'exemple ci-dessous, la valeur de hachage est sha1: hogehoge: fugafuga.

< python -c 'from notebook.auth import passwd;print(passwd())'               
Enter password: 
Verify password: 
sha1:hogehoge:fugafuga
jovyan@fb31e1a2fda1:~/work$ exit
exit

Lorsqu'il est attaché

Si vous attachez le docker, il s'attachera à l'entrée / sortie standard de start-notebook.sh qui est exécutée au démarrage du conteneur, et vous ne pouvez pas taper de commandes python.

$ docker attach fb31e1a2fda1

★ Je ne peux exécuter aucune commande (en regardant simplement le journal)

ç^C[I 13:28:14.809 NotebookApp] Interrupted...
[I 13:28:14.810 NotebookApp] Shutting down kernels
$ 

Supprimer le conteneur

Supprimer ce conteneur car il n'est plus utilisé

$ docker ps
CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                     NAMES
fb31e1a2fda1        jupyter/tensorflow-notebook   "tini -- start-notebo"   10 minutes ago      Up 10 minutes       0.0.0.0:32768->8888/tcp   tender_snyder
$ docker stop fb31e1a2fda1
fb31e1a2fda1
$ docker rm fb31e1a2fda1
fb31e1a2fda1
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

Commencez

Enfin, démarrez le conteneur avec le mot de passe défini Mettez la valeur de hachage que vous avez obtenue précédemment, sha1: hogehoge: fugafuga, dans la valeur de l'option NotebookApp.password dans start-notebook.sh et exécutez-la.

docker run -d -p 8888:8888 jupyter/tensorflow-notebook start-notebook.sh --NotebookApp.password='sha1:hogehoge:fugafuga'

Vous pouvez maintenant accéder à http: // localhost: 8888 et saisir le mot de passe que vous avez défini ci-dessus pour vous connecter. Après cela, veuillez jouer avec MNIST.

De côté

Vous pouvez utiliser la commande openssl, non? J'ai fait ce qui suit, mais ça n'a pas fonctionné

$ echo [password] | openssl sha1

Je pensais que sha1 était sha1, mais pourquoi? Le format est-il différent?

référence

Recommended Posts

Pour ceux d'entre vous qui ne savent pas comment définir un mot de passe avec Jupyter sur Docker
Comment configurer un notebook Jupyter à la destination SSH (AWS EC2)
Rejoignez Azure avec Go ~ Pour ceux qui veulent démarrer et connaître Azure avec Go ~
Liste de contrôle pour éviter de transformer les éléments de array of numpy avec for
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Pour ceux qui veulent utiliser Jupyter Notebook dès 1 seconde car ils ne connaissent pas le mot de passe
Comment définir un dossier partagé avec le système d'exploitation hôte dans CentOS7 sur Virtual BOX
La première étape de l'apprentissage automatique ~ Pour ceux qui veulent essayer l'implémentation avec python ~
Comment organiser un séminaire pratique à l'aide de Jupyter à l'aide de Docker
Comment créer un environnement Django (python) sur Docker
Pour ceux qui veulent écrire Python avec vim
Un mémo sur la façon de surmonter le problème difficile de la capture d'effets avec l'IA
Comment configurer WSL2 sur Windows 10 et créer un environnement d'étude pour les commandes Linux
Comment connaître le nombre de GPU de python ~ Remarques sur l'utilisation du multitraitement avec pytorch ~
J'étais en charge de la maintenance du script Fabric, mais je ne sais pas.> <À ceux qui
Comment utiliser GitHub sur un serveur multi-personnes sans mot de passe
Pour ceux qui souhaitent démarrer l'apprentissage automatique avec TensorFlow2
Comment afficher une liste des versions installables avec pyenv
Comment enregistrer un package dans PyPI (à partir de septembre 2017)
[Apprentissage de Django avec la lame du diable] Comment obtenir un ensemble de requêtes pour une référence avant / arrière
Une procédure de création d'environnement moderne pour ceux qui veulent se lancer immédiatement avec Python
[Phrase courte] easygui pour ceux qui veulent utiliser une interface graphique simple avec Python très facilement
Vous qui voulez lancer Rails à la fois sur l'hôte et le client avec Docker Compose!
Étapes rapides pour créer un environnement d'apprentissage automatique à l'aide de Jupyter Notebook sur macOS Sierra avec anaconda
Pour vous qui regardez soudainement le journal tout en apprenant avec l'apprentissage automatique ~ Entraînement musculaire avec LightGBM ~
Comment configurer cron pour le scraping Python normal sur le serveur Sakura.
Comment définir un raccourci pour basculer entre pleine largeur et demi-largeur dans IBus
Un moyen simple de lancer Jupyter Notebook / Lab et de définir un mot de passe
Procédure d'inscription PyPI pour ceux qui veulent faire leurs débuts PyPI
Comment démarrer par lots un programme Python créé avec le notebook Jupyter
Notez ce que vous avez fait pour utiliser Flycheck avec Python
J'ai essayé de résumer brièvement la procédure de démarrage du développement de Django
Comment créer une étiquette (masque) pour la segmentation avec labelme (masque de segmentation sémantique)
Comment exécuter Jupyter et Spark sur Mac avec des paramètres minimaux
Comment utiliser Jupyter Notebook sans polluer votre environnement avec Docker
Je ne sais pas comment obtenir les paramètres de requête dans GAE / P
Comment utiliser Jupyter sur le frontal de Spacon ITO
Node.js: Comment tuer les descendants d'un processus démarré par child_process.fork ()
Recherche de quartier pour un ensemble de points (coordonnées géographiques) sur une sphère
Technique Python pour ceux qui veulent se débarrasser des débutants
Il est maintenant temps d'installer DB avec Docker! Installation de la base de données pour les débutants sur Docker
Un mémo pour ceux qui veulent une communication de socket rapide avec netcat
Comment trouver lorsque vous ne connaissez pas le répertoire d'installation Java
Commentaire d'impartialité et de cohérence pour ceux qui ne tombent pas amoureux
Comment exécuter le code pratique du livre "Making Profitable AI with Python" sur Google Colaboratory
Que faire si vous devez avoir défini une clé ssh mais qu'on vous demande un mot de passe
Comment supprimer un conteneur Docker
[Pour les débutants chez AtCoder] Parlez de la quantité de calcul que vous voulez connaître approximativement
[EC2] Comment faire une capture d'écran de votre smartphone avec du sélénium
[Petite histoire] Comment enregistrer des graphiques matplotlib dans un lot avec Jupyter
Pour ceux qui ne peuvent pas exécuter Keras ou TensorFlow sur GPU avec macOS Sierra
Comprendre comment afficher des images sur Jupyter (utilisation de imshow / matplotlib d'OpenCV)
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
J'ai écrit un diagramme de configuration du système avec des diagrammes sur Docker
Comment dessiner une ligne verticale sur une carte de chaleur dessinée avec Python Seaborn
Liens pour gérer les notebooks Jupyter sur Docker sur Ubuntu sur VirtualBox sur macOS avec SSH
Essayez de résoudre un problème défini de mathématiques au lycée avec Python
Résumé de la création d'un environnement LAMP + Wordpress avec Sakura VPS
Si vous ne savez pas comment dessiner le graphique que vous voulez avec matplotlib, il est pratique de regarder la galerie
Comment gérer "^ [[A ^ [[B ^ [[C ^ [[D"]] en appuyant sur la touche de direction lors de l'exécution de python sur mac