Da Dockerfile zuerst gelernt werden musste, um Docker-Compose zu lernen, möchte ich eine Dockerfile mit der Anwendung von Django erstellen, einem Framework von Python.
Als vorläufige Vorbereitung werden das Docker-Image und der Container leer gestartet.
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
$docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Dieses Mal werde ich die App verwenden, die mit Django erstellt wurde, das in [diesem Artikel] erstellt wurde (https://qiita.com/sugurutakahashi12345/items/d4377a16c0e42cf48287).
Um nur zu erklären, was Sie beachten müssen, damit Sie den Artikel nicht lesen müssen, wird die App mit dem folgenden Befehl gestartet.
$ python manage.py runserver
Es ist eine einfache App, die die folgende Hello World anzeigt, wenn Sie während der Ausführung der App auf http: // localhost: 8000 / hello
zugreifen.
Die Struktur ist wie unten gezeigt.
Es ist auch auf [GitHub] verfügbar (https://github.com/suguruTakahashi-1234/django-sample).
Dockerfile
$ tree
.
├── Dockerfile
├── requirements.txt
├── hello
│ └── (weggelassen)
├── helloWorldProject
│ └── (weggelassen)
├── README.md
├── db.sqlite3
└── manage.py
Dockerfile
und require.txt
sind die Dateien, die dieses Mal erstellt werden sollten, daher werde ich sie erklären.
Dieses Mal habe ich es wie folgt erstellt.
Dockerfile
# python:3.Stellen Sie das offizielle Bild von 8 als Basisbild ein
FROM python:3.8
#Arbeitsverzeichnis erstellen
RUN mkdir /code
#Arbeitsverzeichniseinstellungen
WORKDIR /code
#Kopieren Sie Assets im aktuellen Verzeichnis in das angegebene Verzeichnis im Container
ADD . /code
#Anforderungen mit pip.Fügen Sie das in txt angegebene Paket hinzu
RUN pip install -r requirements.txt
#Start (Akzeptieren Sie an Port 8002 des Containers)
CMD python3 manage.py runserver 0.0.0.0:8002
Der Inhalt dieser Datei lautet wie folgt.
--Erstellen Sie ein Arbeitsverzeichnis (/ code
) basierend auf dem offiziellen Bild von Python: 3.8
--Übertragen Sie alle aktuellen Quellen in diesen Container
Ich werde nicht erklären, wie man eine Docker-Datei schreibt.
Der Unterschied zwischen "RUN" und "CMD" war in [diesem Artikel] leicht zu verstehen (https://qiita.com/YusukeHigaki/items/044164837daa5e845d50).
(Einfach ausgedrückt ist RUN
ein Befehl, der während des Builds ausgeführt wird, und CMD
ist ein Befehl, der ausgeführt wird, wenn der Container gestartet wird.)
Module, die mit dem Befehl pip installiert wurden, wie in der Docker-Datei beschrieben, werden jetzt in require.txt
beschrieben.
Dieses Mal brauchen wir Django, also werden wir das schreiben.
requirements.txt
Django==3.1
Wenn es diesmal nur ein Modul gibt, muss es nicht zu einer externen Datei gemacht werden. Wenn jedoch mehrere Module installiert werden müssen, ist es einfacher zu verwalten, wenn es so beschrieben wird.
Nach dem Vorbereiten der Docker-Datei wird das Image erstellt, indem der Befehl docker build -t [zu erstellender Image-Name] [relativer Pfad zur Docker-Datei]
ausgeführt wird.
Dieses Mal werden wir ein Bild namens "Hallo Welt" erstellen.
$ docker build -t hello-world .
(Kürzung)
Successfully tagged hello-world:latest
$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest 6e2fc6616ab1 About a minute ago 922MB
python 3.8 6feb119dd186 5 days ago 882MB
Sie können sehen, dass das Bild "Hallo Welt" so erstellt wurde.
Übrigens wird auch das Bild von python: 3.8
gezogen und angezeigt.
Wenn Sie sich das Element "GRÖSSE" ansehen, ist "Hallo Welt" größer als "Python", sodass Sie sehen können, dass verschiedene Ergänzungen zum Originalbild vorgenommen wurden.
Nachdem wir das Bild erstellt haben, starten wir den Container.
$ docker container run -d -p 8001:8002 hello-world
$ docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ff92b40204f3 hello-world "/bin/sh -c 'python3…" About an hour ago Up About an hour 0.0.0.0:8001->8002/tcp funny_antonelli
Die zusätzlichen Informationen zu den Optionen des Befehls "Ausführen" lauten wie folgt.
---d
: Beginnen Sie im Hintergrund
---p
: Legen Sie den Anschluss des Containers frei
Da wir diesmal "8001: 8002" angegeben haben, bedeutet dies, dass der "Port 8001 des Hosts" und der "Port 8002 des Containers" miteinander verbunden sind.
(Ursprünglich werden die Ports 8001 und 8002 nicht verwendet, aber wir verwenden unterschiedliche Nummern, um die Portnummern des Hosts und Containers zu kennen.)
Wenn Sie "http: // localhost: 8001 / hello" besuchen, sollten Sie Folgendes sehen:
Durch Schreiben einer Dockerfile-Datei
"Jedes Mal, wenn Sie dieses Docker-Image abrufen und dann den Docker-Container-Ausführungsbefehl ausführen, müssen Sie sich bei diesem Container anmelden und diesen Befehl und diesen Befehl ~ (weggelassen) ausführen."
Verfahren wie
"Führen Sie den Docker build -t [Bildname] aus. Befehl in dem Verzeichnis, in dem sich die Docker-Datei befindet. 』\
Sie benötigen nur eine Zeile von.
In diesem Fall muss beispielsweise alles unter "FROM python: 3.8" in der Docker-Datei im Verfahrenshandbuch angezeigt werden.
--Erstellte eine Docker-Datei --Erstellt ein Bild aus einer Docker-Datei --Startete den Container aus dem erstellten Image und bestätigte das Verhalten
Recommended Posts