[PYTHON] Ich habe Docker gestartet

Ich hörte, dass es praktisch wäre, alle von mir hergestellten Werkzeuge in einen Container zu packen, und beschloss daher, Docker zu verwenden, an dem ich mich schon lange interessiert hatte. Dieses Mal werde ich einen mit Python Flask erstellten Webserver in einen Container verwandeln, damit ich den Webserver einfach durch Starten und Stoppen des Containers verwalten kann.

Klicken Sie hier für die verwendete Umgebung

$ cat /etc/redhat-release 
Red Hat Enterprise Linux release 8.2 (Ootpa)
$ docker --version
Docker version 19.03.12, build 48a66213fe

Docker Bewertung

Lassen Sie uns zunächst kurz zusammenfassen, wie Docker verwendet wird (wie ein Container erstellt wird). Es gibt 4 Schritte, um einen Docker-Container zu erstellen.

  1. Ziehen Sie das Basisbild
  2. Erstellen Sie eine Docker-Datei
  3. Erstellen Sie das Docker-Image
  4. Erstellen und starten Sie den Docker-Container aus dem Image

Persönlich denke ich, dass das erste, was ich nicht wirklich verstehe, das Erstellen einer Docker-Datei ist. Der erste Schritt besteht also darin, ein einfaches Python-Skript im Container zu erstellen, und der zweite Schritt besteht darin, es zu verbessern, um den Flask-Webserver auszuführen.

Führen Sie das Python-Skript im Container aus

Der erste Schritt besteht darin, die nächste "myapp.py" im Container auszuführen.

myapp.py


print("hello Docker!")

Ziehen Sie das Basisbild

Bereiten Sie zunächst ein Image vor, das die Ausführungsumgebung für Python3 sein soll. Suchen Sie nach Bildern der Python3-Serie, die in Docker Hub registriert sind.

$ sudo docker search python3
NAME                                                                    DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
rackspacedot/python37                                                                                                   11                                      
sellpy/python3-jupyter-sklearn                                          python3-jupyter-sklearn                         5                                       [OK]
openwhisk/python3action                                                 Apache OpenWhisk runtime for Python 3 Actions   5                                       
sellpy/python3-jupyter-sklearn-java                                     python3-jupyter-sklearn-java                    2                                       [OK]
quoinedev/python3.6-pandas-alpine                                       Python 3.7 on alpine with numpy and pandas i…   2                                       
(Weggelassen)

Dieses Mal werden wir ackspacedot / python37 verwenden, das die meisten STERNE hat. Lassen Sie uns das ziehen.

$ sudo docker pull rackspacedot/python37

ackspacedot / python37 ist auch ein Docker-Image, sodass Sie es nach dem Ziehen mit Docker-Images überprüfen können.

$ sudo docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
rackspacedot/python37   latest              3d51361ee118        7 weeks ago         1.06GB

Wenn Sie dieses Bild haben, können Sie Python im Container verwenden. Es ist also in Ordnung, wenn Sie basierend darauf andere erforderliche Teile (z. B. die Platzierung von Skripten) hinzufügen.

Erstellen Sie eine Docker-Datei

Erstellen Sie dann eine Datei mit dem Namen "Dockerfile".

FROM rackspacedot/python37

WORKDIR /usr/local/script
COPY myapp.py .

CMD python myapp.py

Um es kurz zu erklären,

Die bisher vorbereiteten Dateien lauten wie folgt.

$ ls -l
total 8
-rw-r--r--. 1 user developer 146 Sep 11 16:39 Dockerfile
-rw-r--r--. 1 user developer 173 Sep 11 17:04 myapp.py

Starten Sie den Docker-Image-Build-Container

Nachdem wir eine Docker-Datei erstellt haben, erstellen wir das Image → Starten Sie den Container. Erstellen Sie zunächst das Image.

$ sudo docker build -t myapp:test .

Das -t name: tag legt den Namen und das Tag des Bildes fest (es kann sich vom Skriptnamen unterscheiden). . Gibt den Pfad des Verzeichnisses an, in dem sich die Docker-Datei befindet. Wenn Sie "Erfolgreich erstellter Hash-Wert" erhalten, wird das Bild generiert und Sie können es mit "Docker-Bildern" überprüfen.

$ sudo docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
myapp                   test                e577339515a7        10 seconds ago      1.06GB
rackspacedot/python37   latest              3d51361ee118        7 weeks ago         1.06GB

Nachdem das Bild erstellt wurde, erstellen und starten Sie den Container.

$ sudo docker run myapp:test
hello Docker!

Ich konnte das Python-Skript im Container erfolgreich ausführen. Der hier gestartete Container bleibt erhalten, sodass Sie ihn mit demselben Befehl erneut ausführen können. Sie können auch den mit "Docker ps -a" erstellten Container sehen.

Ausführen eines Flaschenservers in einem Container

Nachdem Sie nun Python-Skripte im Container ausführen können, erstellen wir als zweiten Schritt einen Server mit flask. Schreiben Sie myapp.py wie folgt um:

from flask import Flask

app = Flask("myapp")

@app.route("/")
def main():
    return "hello Docker!!"

if __name__ == "__main__":
    app.run(host="0.0.0.0", port=8080)

Vorerst habe ich die Anzahl von ! Auf 2 reduziert, damit Sie die Änderung sehen können. Lassen Sie uns dies als Webserver im Container verwenden.

Änderung der Docker-Datei

Da wir einen Kolben verwenden, müssen wir den Kolben im Behälter installieren. Da rampspacedot / python37 standardmäßig pip enthält, fügen Sie beim Erstellen des Images den Teil hinzu, der pip install zur Docker-Datei enthält.

FROM rackspacedot/python37

RUN pip install flask

RUN useradd docker
USER docker

WORKDIR /usr/local/script
COPY myapp.py .

CMD python myapp.py

Um die hinzugefügte Menge zu erklären,

Starten Sie den Docker-Image-Build-Container

Da die Datei neu geschrieben wurde, erstellen Sie das Image neu → starten Sie den Container. Zuallererst vom Wiederaufbau.

$ sudo docker build -t myapp .

Da wir das Tag dieses Mal weggelassen haben, wird das Tag "Neueste" automatisch zugewiesen. Lassen Sie uns mit "Docker-Bildern" überprüfen.

$ sudo docker images
REPOSITORY              TAG                 IMAGE ID            CREATED             SIZE
myapp                   latest              6c747be5d597        3 seconds ago       1.06GB
myapp                   test                e577339515a7        50 minutes ago      1.06GB
rackspacedot/python37   latest              3d51361ee118        7 weeks ago         1.06GB

Nun starten wir den Container. Da es sich um einen Webserver handelt, füge ich Optionen hinzu.

$ sudo docker run -d -p 8080:8080 myapp

Obwohl es sich um eine Portnummer handelt, wird sie als "-p Empfangsportnummer: Nummer auf der Containerseite" geschrieben. Die Empfangsportnummer kann eine beliebige Nummer sein, aber die Nummer auf der Containerseite sollte die Nummer sein, die in "myapp.py" im Container angegeben ist (in diesem Fall 8080).

Wenn es ohne Probleme startet, können Sie den laufenden Container mit "Docker ps" überprüfen.

$ sudo docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
00d1ab6fc24a        myapp               "/bin/sh -c 'python …"   3 seconds ago       Up 2 seconds        0.0.0.0:8080->8080/tcp   thirsty_mccarthy

Lassen Sie uns tatsächlich darauf zugreifen.

$ curl http://localhost:8080
hello Docker!!

Hört sich gut an. Damit ist die Containerisierung des Webservers abgeschlossen. Wenn Sie den Container stoppen möchten

$ sudo docker stop thirsty_mccarthy

Wenn Sie nach dem Stoppen neu starten möchten

$ sudo docker start thirsty_mccarthy

Geben Sie für "dursty_mccarthy" den Containernamen an (der in "NAME" angezeigt wird, wenn "Docker ps" ausgeführt wird). Wenn Sie es mit "Docker-Start" starten, wird es automatisch auf dem Port ausgeführt, der zum Zeitpunkt des "Docker-Laufs" angegeben wurde. Wenn Sie es in einen Container verwandeln, können Sie es sofort verschieben, indem Sie das Image erstellen → den Container starten, wenn Sie ihn in einer anderen Umgebung ausführen, was sehr praktisch ist.

Das ist alles für diese Zeit. Wenn Docker Compose mehrere Container mit einem einzigen Befehl ausführen kann, wird der Bereich weiter erweitert. Ich denke, ich werde dies auch untersuchen.

Recommended Posts

Ich habe Docker gestartet
Ich habe Python gestartet
Ich fing an zu analysieren
Ich habe PYNQ (2) -Overlay self-made- gestartet
Ich habe angefangen, aber es fängt nicht an!
Erste Schritte mit Docker Apache Hadoop
Ich habe den Inhalt des Docker-Volumes überprüft
Installieren Sie Docker
Ich habe versucht, mit Hy anzufangen
Ich habe mit Docker eine Anaconda-Umgebung erstellt!
Django + Docker
Ich habe über Docker recherchiert und werde es zusammenfassen
Python gestartet
Startete Node.js in einer virtuellen Umgebung
Was ich vor der Installation von Docker für Windows getan habe
Ich habe mit der maschinellen Vorverarbeitung von Python Data begonnen