[PYTHON] Memorandum zum Erstellen von Bluemix NLTK-, MeCab- und Watson-API-Containern

Erstellen Sie einen IBM Container (Docker-Container), der die für die IBM Watson API und Python-basierte Verarbeitung natürlicher japanischer Sprache erforderlichen Tools enthält, und registrieren Sie ihn im IBM Bluemix-Repository, damit er wiederverwendet werden kann. Da es sich natürlich um einen Container für die Entwicklungsumgebung handelt, werden wir Möglichkeiten entwickeln, um den Container kontinuierlich laufen zu lassen.

Erstellen einer Docker-Container-Build-Umgebung

Erstellen Sie den Docker-Zielcontainer in Ihrer eigenen PC-Umgebung und registrieren Sie ihn im Bluemix-Container-Repository. Da Docker von Ubuntu Linux als zu erstellende Umgebung praktisch ist, erstellen Sie zunächst eine Umgebung, in der Ubuntu Linux mit Vagrant in Ihrer eigenen PC-Umgebung ausgeführt wird. Hier denke ich, dass der folgende Link hilfreich sein wird, um die Umgebung von Vagrant vorzubereiten.

Sobald Sie eine Vagrant-Umgebung haben, starten Sie Ihren gefälschten Ubuntu Linux-Computer und installieren Sie Docker.io.

Installieren Sie dann den Befehl Cloud Foundry cf und den Befehl Bluemix bx und melden Sie sich bei Ihrem Bluemix-Konto an. Natürlich ist ein Bluemix-Konto ein Muss. Die folgenden Links helfen Ihnen, diese Voraussetzungen zu erfüllen.

Abrufen und Bearbeiten von Dockerfile-Vorlagen

Als japanisches Verarbeitungswerkzeug ist in Python erstelltes NLTK praktisch, daher erstellen wir einen Container, der das neueste Python ausführen kann. Da das offizielle Image von Docker in der neuesten Umgebung von Python als Vorlage für Dockerfile verwendet wird, klonen Sie die Dockerfile unter Ubuntu von Vagrant mit dem folgenden Befehl. Es gibt alle Vorlagen der Python 2.7-Serie und der 3er-Serie in dieser Vorlage, aber dieses Mal verwende ich Python 2.7.

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

Wechseln Sie in das Python 2.7-Verzeichnis und bearbeiten Sie die Docker-Datei.

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

Die zu bearbeitenden Teile sind unten aufgeführt. Fügen Sie sie daher der ursprünglichen Docker-Datei hinzu.

     1	FROM buildpack-deps:jessie
     2	ADD ./app /app
     3	
 <Ausgelassen>
    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/*

Die Erläuterung der zusätzlichen Teile ist unten aufgeführt.

    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

Ich werde die folgenden Korrekturen auflisten.

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

Führen Sie abschließend den Befehl aus, um sleep in einer Endlosschleife auszuführen, damit der Container nicht endet.

Einfallsreichtum für die kontinuierliche Containerausführung

Eine Beschreibung von ADD ./app/app oben. Erstellen Sie das App-Verzeichnis im Ordner 2.7, erstellen Sie die folgenden Dateien und geben Sie dem Ausführungsrecht chmod + x loop_wait.

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

Durch Ausführen dieser Datei von der CMD in der letzten Zeile 82 der Docker-Datei wird der Container weiter ausgeführt.

Container bauen und beim Bluemix Ribozitri registrieren

Bauen Sie den Behälter in Ihrer Umgebung. Führen Sie den folgenden Befehl am Speicherort der Dockerfile-Datei und im App-Verzeichnis aus. Installieren Sie die erforderlichen Pakete im Container, sammeln Sie die Dateien, kompilieren Sie Python 2.7.13 und erstellen Sie den Container. Der Bau dieses Containers kann bis zu 10 Minuten dauern.

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

Wenn der Build abgeschlossen ist, wird die folgende Meldung angezeigt, damit Sie den Erfolg des Builds erkennen können.

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

Rufen Sie dann den Namen des Bluemix-Repositorys ab. Der Befehl cf ist das Cloud-Foundry-CLI-Tool, auf dem Bluemix basiert, und das nachfolgende ic ist ein Unterbefehl, der auf das Docker-Plug-In verweist.

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

Kennzeichnen Sie Ihren lokalen Container mit dem Bluemix-Repository.

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

Registrieren Sie den erstellten Container mit dem folgenden Befehl im Bluemix-Repository.

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

Mit dem folgenden Befehl können Sie den registrierten gemeinsamen Container von Bluemix und Ihren eigenen registrierten Container riskieren. Sie können sehen, dass der Python-Container in der letzten Zeile registriert ist.

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
 <Ausgelassen>
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

In diesem Zustand sollte der obige Container angezeigt werden, wenn Sie sich den Katalog im Bluemix-Portal ansehen. Unten rechts sehen Sie einen lila Behälter namens Python. スクリーンショット 2017-02-18 10.42.43.png

Container starten und anmelden

Sie können den Container auch über den Portalbildschirm des Webs starten, aber Sie können den Container auch mit dem folgenden CLI-Befehl starten.

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

Das erste Mal dauert es ungefähr 1 Minute, um den Container zu bauen. Während des Builds können Sie feststellen, dass es mit dem folgenden Befehl cf ic ps erstellt wird.

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

Sie können dies auch über das Bluemix-Portal überprüfen. Gebäudezustand des Containers スクリーンショット 2017-02-18 11.08.15.png

Erstellen Sie den vollständigen Status スクリーンショット 2017-02-18 11.11.17.png

Bildschirm mit den Containerdetails スクリーンショット 2017-02-18 11.17.51.png

Melden Sie sich beim Container an

Mit dem folgenden Befehl können Sie sich beim Container anmelden und Befehle über die Shell ausführen.

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

Andere Docker-Befehle

Verwenden Sie stop, um den Container anzuhalten.

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

Verwenden Sie rm, um den Container zu löschen.

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

Verwenden Sie rmi, um das Bild des Containers zu löschen.

root@ubuntu-xenial:~/python/2.7# cf ic images
REPOSITORY                                    TAG                 IMAGE ID            CREATED             SIZE
 <Ausgelassen>
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

Verwenden Sie den Docker-Befehl, um das zum Erstellen in der lokalen Umgebung verwendete Image zu löschen.

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 erstellen

Stellen Sie sicher, dass MeCab installiert ist

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

Bestätigung der Einführung von NLTK of 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

Memorandum zum Erstellen von Bluemix NLTK-, MeCab- und Watson-API-Containern
Revit API-Memorandum