[PYTHON] Bluemix NLTK, MeCab, Mémorandum de construction de conteneur API Watson

Créez un conteneur IBM (conteneur Docker) qui contient les outils requis pour l'API IBM Watson et le traitement du langage naturel japonais basé sur Python, et enregistrez-le dans le référentiel IBM Bluemix afin qu'il puisse être réutilisé. Puisqu'il s'agit d'un conteneur pour l'environnement de développement, nous allons bien sûr concevoir des moyens de maintenir le conteneur en fonctionnement continu.

Créer un environnement de construction de conteneur Docker

Construisez le conteneur Docker cible dans votre propre environnement PC et enregistrez-le dans le référentiel de conteneurs Bluemix. Puisque Docker d'Ubuntu Linux est pratique comme environnement à construire, créez d'abord un environnement dans lequel Ubuntu Linux s'exécute avec Vagrant dans votre propre environnement PC. Ici, le lien suivant sera utile pour savoir comment préparer l'environnement Vagrant.

Une fois que vous avez un environnement Vagrant, démarrez votre fausse machine Ubuntu Linux et installez Docker.io.

Ensuite, installez la commande Cloud Foundry cf et la commande Bluemix bx et connectez-vous à votre compte Bluemix. Bien sûr, obtenir un compte Bluemix est un must. Les liens suivants vous aideront à remplir ces conditions préalables.

Obtenir et modifier des modèles Dockerfile

En tant qu'outil de traitement japonais, NLTK made in Python est pratique, nous allons donc créer un conteneur qui peut exécuter le dernier Python. Comme l'image officielle de Docker est utilisée comme modèle de Dockerfile dans le dernier environnement de Python, clonez le Dockerfile sur Ubuntu de Vagrant avec la commande suivante. Il y a tous les modèles de la série Python 2.7 et de la série 3 dans ce modèle, mais cette fois j'utilise Python 2.7.

root@ubuntu-xenial:~/docker# git clone https://github.com/docker-library/python

Accédez au répertoire Python 2.7 et modifiez le Dockerfile.

root@ubuntu-xenial:~/docker/python# ls
2.7  3.6                          Dockerfile-slim.template               README.md
3.3  Dockerfile-alpine.template   Dockerfile-windowsservercore.template  update.sh
3.4  Dockerfile-debian.template   generate-stackbrew-library.sh
3.5  Dockerfile-onbuild.template  LICENSE
root@ubuntu-xenial:~/docker/python# cd 2.7
root@ubuntu-xenial:~/docker/python/2.7# ls
alpine  Dockerfile  onbuild  slim  wheezy  windows

Les parties à modifier sont répertoriées ci-dessous, alors ajoutez-les au Dockerfile d'origine.

     1	FROM buildpack-deps:jessie
     2	ADD ./app /app
     3	
 <Omis>
    10	
    11	# runtime dependencies
    12	RUN apt-get update && apt-get -y upgrade && apt-get install -y --no-install-recommends \
    13			tcl \
    14			tk \
    15			mecab \
    16			libmecab-dev \
    17			mecab-ipadic \
    18			mecab-ipadic-utf8 \
    19			mecab-utils \
    20			emacs-nox \
    21			nmon \
    22		&& rm -rf /var/lib/apt/lists/*

L'explication des pièces supplémentaires est indiquée ci-dessous.

    77	RUN pip install --no-cache-dir mecab-python
    78	RUN pip install --no-cache-dir watson-developer-cloud
    79	RUN pip install --no-cache-dir BeautifulSoup
    80	RUN pip install --no-cache-dir nltk

Je vais énumérer les corrections suivantes.

    80	RUN pip install --no-cache-dir nltk
    81	
    82	CMD ["bash", "/app/loop_wait"]

Enfin, exécutez la commande pour exécuter sleep dans une boucle infinie afin que le conteneur ne se termine pas.

Ingéniosité pour une exécution continue des conteneurs

Une description de ADD ./app/app ci-dessus. Créez le répertoire de l'application dans le dossier 2.7, créez les fichiers suivants et donnez le droit d'exécution chmod + x loop_wait.

!/bin/bash
while true; do sleep 60; done

En exécutant ce fichier à partir du CMD sur la dernière ligne 82 du Dockerfile, le conteneur continuera à s'exécuter.

Construire un conteneur et s'inscrire au ribodigry Bluemix

Construisez le contenant dans votre environnement vagabond. Exécutez la commande suivante à l'emplacement du fichier Dockerfile et du répertoire de l'application. Installez les packages requis dans le conteneur, collectez les fichiers, compilez Python 2.7.13 et construisez le conteneur. La création de ce conteneur peut prendre jusqu'à 10 minutes.

root@ubuntu-xenial:~/python/2.7# docker build -t mynode:python .

Lorsque la génération est terminée, le message suivant s'affiche, afin que vous puissiez connaître le succès de la génération.

Step 9 : RUN pip install --no-cache-dir virtualenv
 ---> Running in 3259e634ff72
Collecting virtualenv
  Downloading virtualenv-15.1.0-py2.py3-none-any.whl (1.8MB)
Installing collected packages: virtualenv
Successfully installed virtualenv-15.1.0
 ---> b95cc31c623c
Removing intermediate container 3259e634ff72
Step 10 : CMD python2
 ---> Running in 3fb0181e560c
 ---> 25903811171b
Removing intermediate container 3fb0181e560c
Successfully built 25903811171b

Ensuite, récupérez le nom du référentiel Bluemix. La commande cf est l'outil CLI de fonderie de cloud sur lequel Bluemix est basé, et l'ic suivant est une sous-commande qui pointe vers le plug-in Docker.

root@ubuntu-xenial:~/docker/python/2.7# cf ic namespace get
takara_node

Marquez votre conteneur local avec le référentiel Bluemix.

root@ubuntu-xenial:~/docker/python/2.7# docker tag mynode:python registry.ng.bluemix.net/takara_node/python

Enregistrez le conteneur construit dans le référentiel Bluemix avec la commande suivante.

root@ubuntu-xenial:~/docker/python/2.7# docker push registry.ng.bluemix.net/takara_node/python

Vous pouvez risquer le conteneur commun enregistré de Bluemix et votre propre conteneur enregistré avec la commande suivante. Vous pouvez voir que le conteneur python est enregistré dans la dernière ligne.

root@ubuntu-xenial:~/docker/python/2.7# cf ic images
REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
registry.ng.bluemix.net/ibmnode               latest              acec21732cb5        11 days ago         192.5 MB
registry.ng.bluemix.net/ibmnode               v4                  acec21732cb5        11 days ago         192.5 MB
 <Omis>
registry.ng.bluemix.net/ibmliberty            webProfile7         6b2b8341fa32        5 weeks ago         276 MB
registry.ng.bluemix.net/takara_node/mynode1   latest              721caef84790        12 days ago         190.9 MB
registry.ng.bluemix.net/takara_node/python    latest              17f60ad04c10        2 hours ago         334.4 MB

Dans cet état, si vous regardez le catalogue sur le portail Bluemix, vous devriez voir le conteneur ci-dessus. En bas à droite, vous verrez un conteneur violet appelé python. スクリーンショット 2017-02-18 10.42.43.png

Démarrage et connexion du conteneur

Vous pouvez également démarrer le conteneur à partir de l'écran du portail du Web, mais vous pouvez également démarrer le conteneur avec la commande CLI suivante.

root@ubuntu-xenial:~/python/2.7# cf ic run --name python -m 512 registry.ng.bluemix.net/takara_node/python:latest

La première fois, il faut environ 1 minute pour construire le conteneur. Lors de la construction, vous pouvez savoir qu'elle est en cours de construction avec la commande cf ic ps suivante.

root@ubuntu-xenial:~/python/2.7# cf ic ps
CONTAINER ID        IMAGE                                                COMMAND             CREATED             STATUS                    PORTS                          NAMES
edd1f16c-625        registry.ng.bluemix.net/takara_node/python:latest    ""                  15 seconds ago      Building 14 seconds ago                                  python

Vous pouvez également vérifier cela depuis le portail Bluemix. État de construction du conteneur スクリーンショット 2017-02-18 11.08.15.png

Construire l'état complet スクリーンショット 2017-02-18 11.11.17.png

Écran des détails du conteneur スクリーンショット 2017-02-18 11.17.51.png

Connectez-vous au conteneur

La commande suivante vous permettra de vous connecter au conteneur et d'exécuter des commandes depuis le shell.

root@ubuntu-xenial:~/docker/python/2.7# cf ic exec -it python /bin/bash
root@instance-003624a8:/# ps -ax                                                                                                                                
    PID TTY      STAT   TIME COMMAND
      1 ?        Ss     0:00 bash /app/loop_wait
     18 ?        Ss     0:00 /bin/bash
     24 ?        S      0:00 sleep 60
     25 ?        Ss     0:00 /bin/bash
     31 ?        R+     0:00 ps -ax

Autres commandes Docker

Utilisez stop pour arrêter le conteneur.

root@ubuntu-xenial:~/python/2.7# cf ic ps
CONTAINER ID        IMAGE                                                COMMAND             CREATED             STATUS                PORTS                          NAMES
cea800cf-862        registry.ng.bluemix.net/takara_node/python:latest    ""                  6 hours ago         Running 6 hours ago                                  python
26dba932-cc4        registry.ng.bluemix.net/takara_node/mynode1:latest   ""                  12 days ago         Running 12 days ago   169.46.19.213:3000->3000/tcp   mynode1
root@ubuntu-xenial:~/python/2.7# cf ic stop cea800cf-862
cea800cf-862

Utilisez rm pour supprimer le conteneur.

root@ubuntu-xenial:~/python/2.7# cf ic rm cea800cf-862
cea800cf-862

Utilisez rmi pour supprimer l'image du conteneur.

root@ubuntu-xenial:~/python/2.7# cf ic images
REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
 <Omis>
registry.ng.bluemix.net/takara_node/python    latest              8cd32e284563        7 hours ago         310.2 MB

root@ubuntu-xenial:~/python/2.7# cf ic rmi registry.ng.bluemix.net/takara_node/python 
Untagged: sha256:8cd32e2845639a3fad5bd6e26c7a57c3f69539cebbd846535bb99b634aa8b324

Pour supprimer l'image utilisée pour la construction dans l'environnement local, utilisez la commande docker.

root@ubuntu-xenial:~# docker images
REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
mynode                                        python              8cd32e284563        7 hours ago         852 MB
registry.ng.bluemix.net/takara_node/python    latest              8cd32e284563        7 hours ago         852 MB

root@ubuntu-xenial:~# docker rmi mynode:python
Untagged: mynode:python

root@ubuntu-xenial:~# docker rmi registry.ng.bluemix.net/takara_node/python:latest

Test de construction

Confirmez que MeCab est installé

root@instance-003624a8:/# mecab -v
mecab of 0.996

Confirmation de l'introduction de NLTK de Python

root@instance-003624a8:/# python
Python 2.7.13 (default, Feb 17 2017, 23:23:18) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import nltk
>>> nltk.download()
NLTK Downloader
---------------------------------------------------------------------------
    d) Download   l) List    u) Update   c) Config   h) Help   q) Quit
---------------------------------------------------------------------------
Downloader> 

Recommended Posts

Bluemix NLTK, MeCab, Mémorandum de construction de conteneur API Watson
Mémorandum d'API Revit