Detaillierte Schritte zum Erstellen, Ausführen, Veröffentlichen und erstmaligen Abrufen eines Docker-Images

Detaillierte Schritte zum Erstellen, Ausführen, Veröffentlichen und erstmaligen Abrufen eines Docker-Images

1. Einleitung

Wenn Sie früher mit dem Schreiben von Python-Anwendungen beginnen wollten, bestand der erste Schritt darin, die Python-Laufzeitumgebung auf Ihrem Computer zu installieren. Die installierte Umgebung musste mit der Online-Umgebung übereinstimmen, was ziemlich mühsam war.

Mit Docker können Sie ohne Installation ein portables Image einer Python-Laufzeitumgebung aus dem offiziellen Docker-Verzeichnis oder anderen Repositories abrufen. Sie können Ihre Anwendung dann auf der Grundlage dieses Images entwickeln, wodurch sichergestellt wird, dass Ihre Anwendung, Abhängigkeiten und Laufzeit zusammen ausgeführt werden.

2. Erstellen Sie ein Python-Image

2.1. Um Ihr eigenes Image zu erstellen, müssen Sie zunächst eine Datei mit dem Namen „Dockerfile“ erstellen, um die erforderlichen Schritte zum Erstellen eines Images und Ausführen eines Containers zu definieren. Jede Anweisung in einer Docker-Datei erstellt eine Ebene im Image. Wenn Sie Ihr Docker-File ändern und das Image neu erstellen, werden nur die Ebenen neu erstellt, die geändert wurden. Dies ist einer der Gründe, warum Images im Vergleich zu anderen Virtualisierungstechnologien leicht, klein und schnell sind.

Erstellen Sie ein leeres Verzeichnis, erstellen Sie eine Datei mit dem Namen Dockerfile, kopieren Sie den folgenden Inhalt, fügen Sie ihn in die Datei ein und speichern Sie ihn.

# Verwenden Sie eine offizielle Python-Laufzeit als übergeordnetes Image
VON python:2.7-slim
# Stellen Sie das Arbeitsverzeichnis auf /app ein
ARBEITSVERZEICHNIS /app
# Kopieren Sie den aktuellen Verzeichnisinhalt in den Container unter /app
HINZUFÜGEN ./app
# Installieren Sie alle benötigten Pakete, die in requirements.txt angegeben sind
Führen Sie den Befehl pip install --trusted-host pypi.python.org -r requirements.txt aus.
# Port 80 für die Welt außerhalb dieses Containers verfügbar machen
AUSSETZEN 80
# Umgebungsvariable definieren
ENV NAME Welt
# Führen Sie app.py aus, wenn der Container gestartet wird
CMD ["python", "app.py"]

2.2 Erstellen Sie die Dateien requirements.txt und app.py im selben Verzeichnis wie die Dockerfile-Datei. Aufgrund des ADD-Befehls in der Dockerfile-Datei werden die beiden oben genannten Dateien zum endgültigen Image hinzugefügt. Aufgrund des EXPOSE-Befehls kann auf den Inhalt von app.py zugegriffen werden, indem Port 80 des Containers aufgerufen wird. Hinweis: Port 80 bezieht sich hier auf den vom Container freigegebenen Port, nicht auf den Port der tatsächlichen Maschine.
Anforderungen.txt

Flasche
Redis

app.py

aus Flasche importieren Flasche
von Redis importieren Redis, RedisError
Betriebssystem importieren
Socket importieren
# Mit Redis verbinden
redis = Redis(Host="redis", db=0, Socket-Verbindungstimeout=2, Socket-Timeout=2)
App = Flask(__name__)
@app.route("/")
def hallo():
  versuchen:
    Besuche = redis.incr("Zähler")
  außer RedisError:
    Besuche = "<i>Verbindung zu Redis nicht möglich, Zähler deaktiviert</i>"
  html = "<h3>Hallo {name}!</h3>" \
      "<b>Hostname:</b> {Hostname}<br/>" \
      "<b>Besuche:</b> {Besuche}"
  return html.format(name=os.getenv("NAME", "Welt"), hostname=socket.gethostname(), Besuche=Besuche)
wenn __name__ == "__main__":
  app.run(Host='0.0.0.0', Port=80)

2.3 Packen Sie unsere Anwendung in einen Spiegel und führen Sie sie im DockerFile-Verzeichnis aus. Dadurch wird ein Docker-Image erstellt, das wir mit -t taggen, damit das Image einen aussagekräftigen Namen hat.

Docker-Build -t freundliches Hallo

3. Ausführen des Images

Führen Sie die Anwendung aus, indem Sie mit -p den Port 4000 auf Ihrem Computer dem vom Container freigegebenen Port 80 zuordnen:

docker run -p 4000:80 freundliches Hallo 

Sie können auch den Curl-Befehl in der Shell verwenden, um denselben Inhalt anzuzeigen.

$ curl http://localhost:4000
<h3>Hallo Welt!</h3><b>Hostname:</b> 8fc990912a14<br/><b>Besuche:</b> <i>Verbindung zu Redis nicht möglich, Zähler deaktiviert</i>

Drücken Sie Strg+C, um die Anwendung zu beenden

Lassen Sie uns nun die Anwendung im Hintergrund ausführen:

docker run -d -p 4000:80 freundliches Hallo

Alle Containerinformationen anzeigen

$ Docker-Container ls
CONTAINER-ID-BILDBEFEHL ERSTELLT
1fa4ab2cf395 freundliches Hallo "python app.py" vor 28 Sekunden

Verwenden Sie nun „Docker Container Stop“, um den Prozess unter Verwendung der CONTAINER-ID zu beenden, wie unten gezeigt:

Docker-Container stoppen 1fa4ab2cf395

4. Bild freigeben

4.1. Ich verwende das Docker-Register von Alibaba Cloud, das meiner Meinung nach schneller sein sollte. Zunächst benötigen Sie ein Alibaba Cloud-Konto. Melden Sie sich dann an, um ein neues Lager zu erstellen und den Namespace und andere Informationen festzulegen.

4.2 Melden Sie sich beim Docker-Register von Alibaba Cloud an. Für nachfolgende Vorgänge ist eine Anmeldung erforderlich.

sudo docker login --username=admin registry.cn-hangzhou.aliyuncs.com

4.3 Markieren Sie das Bild. Das Tag ist optional. Wenn nicht, ist der Standardwert „latest“.

Format:

Docker-Tag Image-Name Registry-URL/Namespace/Repository-Name:[Tag]

Zum Beispiel

Docker-Tag-freundlichHallo registry.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest

Anzeigen der Liste lokaler Spiegel

Docker-Image ls

4.4 Bild freigeben

Docker-Push-Registrierung.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest

4.5 Jetzt können Sie den folgenden Befehl auf jeder Maschine ausführen, um das Image auszuführen

docker run -p 4000:80 registry.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest

4.6 Ziehen Sie das Bild

Docker-Pull-Registrierung.cn-hangzhou.aliyuncs.com/shuzhou/demo1:latest

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Wenn Sie mehr darüber erfahren möchten, schauen Sie sich bitte die folgenden Links an

Das könnte Sie auch interessieren:
  • So veröffentlichen Sie Docker-Images im Docker Hub
  • So konfigurieren Sie Docker in IDEA2021.2, um das Springboot-Projekt abzubilden und mit einem Klick freizugeben
  • Analyse des Docker-Compose-Image-Release-Prozesses des Springboot-Projekts
  • So veröffentlichen Sie ein lokal erstelltes Docker-Image auf Dockerhub
  • So verwenden Sie Docker zum Veröffentlichen lokaler Bilder in der Alibaba Cloud

<<:  Mysql löscht doppelte Daten, um die kleinste ID-Lösung beizubehalten

>>:  Zwei Möglichkeiten zum Schreiben gespeicherter Prozeduren in MySQL mit und ohne Rückgabewerte

Artikel empfehlen

Sieben Möglichkeiten zur Implementierung der Array-Deduplizierung in JS

Inhaltsverzeichnis 1. Verwenden von Set()+Array.f...

Führen Sie die Schritte aus, um den Fehler 403 Forbidden in Nginx zu beheben.

Die Webseite zeigt 403 Forbidden an Nginx (Yum-In...

Schritte zur Annotation von Metadeklarationen

Schritte zur Annotation von Metadeklarationen: 1. ...

Der einfachste Weg, das MySQL-Root-Passwort zurückzusetzen

Meine MySQL-Version ist MySQL V5.7.9, bitte verwe...

Teilen Sie 8 MySQL-Fallstricke, die Sie erwähnen müssen

MySQL ist einfach zu installieren, schnell und ve...

Analyse des Problems des Datenverlusts durch erzwungene Aktualisierung von Vuex

vuex-persistenter Zustand Kernprinzip: Alle Vuex-...

Detaillierte Erklärung des JavaScript-Timer-Prinzips

Inhaltsverzeichnis 1. setTimeout()-Timer 2. Stopp...

Berechnung des Prozentwerts, wenn die CSS-Positionseigenschaft absolut ist

Wenn die Position absolut ist, wird der Prozentsa...

Erfahren Sie in fünf Minuten mehr über React Routing

Inhaltsverzeichnis Was ist Routing Grundlegende V...

Fallstudie zum Vue-Einkaufswagen

Inhaltsverzeichnis 1. Warenkorb-Beispiel 2. Code-...

Details zum Like-Operator in MySQL

1. Einleitung Beim Filtern unbekannter oder teilw...

Detaillierte Erläuterung der Nginx Reverse Proxy WebSocket-Konfiguration

Kürzlich habe ich bei der Arbeit an einem Projekt...

Detaillierte Erläuterung der Transaktionsisolierungsebenen der MySQL-Datenbank

Isolationsebene für Datenbanktransaktionen Es gib...

Detaillierte Erklärung der langsamen Remote-Verbindung von Navicat zu MySQL

Die endgültige Lösung ist im letzten Bild Wenn Si...