Docker-Grundlagen

Warum Docker verwenden

"Um den Umweltbau zu vereinfachen" Mit einem Docker können Sie problemlos eine Umgebung erstellen, z. B. Pakete, Bibliotheken, Konstruktionsumgebungskonstruktionen, Ausführungsumgebungskonstruktionen usw.

Wenn Sie Python usw. auf dem Host ablegen, ist es schwierig, es einfach zu deinstallieren, oder es kommt zu einem Konflikt mit anderen Paketen. Durch Erstellen der Umgebung im Container anstelle des Hosts und Verwerfen des Containers im Fehlerfall kann er an einem Ort erstellt werden, an dem der Host überhaupt nicht betroffen ist.

Sie können die Umgebung viele Male erstellen und löschen, solange Sie die Umgebungskonstruktionsmethode in die Docker-Datei schreiben. Sie können auch genau dieselbe Umgebung erstellen, indem Sie die Docker-Datei oder das Image an eine andere Person weitergeben.

Da die Umgebung an einem Ort erstellt wurde, der nichts mit dem Host zu tun hat, gibt es keine spezifischen Fehler für diese Person.

Kein Hafenarbeiter

  1. Laden Sie das Installationsprogramm herunter
  2. Starten Sie das Installationsprogramm
  3. Ich erhalte eine Fehlermeldung
  4. Fehlerbehebung
  5. Starten Sie das Installationsprogramm ...

Eine Fehlerbehebung ist selten erfolgreich

mit Docker

  1. Starten Sie den Container

Es ist gerade vorbei.

Funktionen von Docker

Containerunabhängigkeit

Selbst wenn Sie zwei Container aus demselben Docker-Image einrichten, sind die Dateisysteme jedes Containers unabhängig. Das Arbeiten in einem Container wirkt sich nicht auf andere Container oder Hosts aus.

Vorkenntnisse zum Erlernen von Docker

Schale

bash, zsh, sh ・ ・ ・

Die Anwendung zum Ausführen der Shell ist das Terminal. Die Shell ist ein Werkzeug zum Herstellen einer Verbindung zum Kernel

Umgebungsvariable

Variablen, die von Prozessen verwendet werden, die auf dem Betriebssystem ausgeführt werden, um Informationen auszutauschen

※Prozess (Terminal, Chrome-Browser ...)

Überprüfen von Shell-Umgebungsvariablen

Befehl "echo $ SHELL" $ ・ ・ ・ So etwas wie ein Marker für Umgebungsvariablen

So erstellen Sie Umgebungsvariablen

Befehl "export AGE = 20"

Grundbegriffe

Dockerfile ・ Docker-Bilddesignzeichnung ·Textdatei

Es wird beschrieben, wie Sie ein Docker-Image erstellen. Es ist leicht zu verstehen, da es beschreibt, welche Art von Container und welche Art von Docker-Image es sein wird

Docker image Was macht den Container Es gibt eine Funktion zum Verwalten von Versionen, die als Tags bezeichnet werden.

Das "Docker-Image" besteht aus mehreren "Bildebenen". Wenn der Docker-Container erstellt wird, wird dem "Docker-Image" eine neue "Bildebene" hinzugefügt.

Container

"Eine Reihe von Entwicklungsumgebungen, Ausführungsumgebungen usw."

Sie können mehrere Container auf Ihrem Computer oder Server platzieren. Installieren Sie die Entwicklungsumgebung, die Ausführungsumgebung, die erforderlichen Pakete und Bibliotheken im Container. Sie können dann im Container arbeiten, den Container zum Ausführen von Skripten und zum Ausführen von Code verwenden.

Wenn Sie einen Container erstellen, können Sie diesen Container in anderen Mitgliedern, in der Entwicklungsumgebung, in der Testumgebung und in der Produktionsumgebung verwenden.

Der Container besteht aus "Docker-Image". Sie können auch ein "Docker-Image" aus einem Container erstellen. Ein "Docker-Image" wird aus einer Textdatei namens "Docker-Datei" erstellt.

Docker hub Eine der Docker-Registrierungen Es gibt verschiedene Repositorys (Felder), und für jedes Repository wird ein Docker-Image-Typ verwaltet. (Mehrere Docker-Bilder mit unterschiedlichen Tags sind enthalten.)

Docker-Registrierung

Wo das "Docker-Image" gespeichert ist

Befehl

docker login Sie können auf den Docker-Hub zugreifen.

docker pull [image] Bringen Sie das Image lokal (Host, Ihr Computer) vom Docker-Hub

docker run -it [image] bash Erstellen Sie einen Container aus dem Docker-Image

Beispiel) docker run -it ubuntu bash Machen Sie einen Container aus dem Bild von "Ubuntu".

-Was ist es

Es gibt zwei Optionen: -i und -t. -i
Option zum Öffnen des Kanals für die Eingabe. Der Eingangskanal ist ein Kanal namens stdin Wenn Sie einen Kanal namens stdin öffnen, gelangt das, was Sie über die Tastatur eingeben, zu Linux. Ein Kanal, der den Standardkanal des Containers vom Host aus öffnet. Wenn Sie das Ausführen von "-i" und Docker weglassen (Bash starten), werden die Informationen des Befehls, den Sie in den Container eingegeben haben, nicht übertragen.

-t Reinigen Sie das Ausgabeergebnis. (Mach es hübsch). Ein Befehl zum Anzeigen einer hübschen Ausgabe.

docker run hello-world Machen Sie einen Container aus dem Bild der "Hallo-Welt"

exit Raus aus dem Container

docker ps -a Überprüfen Sie den Status des Containers

docker images Zeigen Sie eine Liste der Bilder auf dem Host an

docker restart Stellen Sie den Behälter auf

docker exec -it [container] bash Führen Sie das angegebene Programm (Bash) für den Container aus

docker commit [container] [image] Wechseln Sie vom Container zum Bild (Neues Bild erstellen)

docker tag [source] [target] Kennzeichnen Sie das Bild mit einem neuen Namen. Das alte Bild bleibt erhalten und Sie können das neue Bild benennen.

[Quelle] ・ ・ ・ Aktueller Bildname [Ziel] image ・ ・ neuer Bildname

docker push [image] Zum Docker-Hub drücken

docker rmi [image] Lösche Bild rmi ・ ・ ・ Bild entfernen

docker create Machen Sie einen Behälter

docker start Führen Sie den Container aus

※run = create + start

docker run [image] [command] Standardbefehl überschreiben Wenn Sie nach "Docker-Ausführung" einen zusätzlichen Befehl eingeben, wird dieser Standardbefehl überschrieben und dieser [Befehl] ausgeführt.

docker rm

Container löschen Wenn der Container ausgeführt wird, kann er nicht gelöscht werden. (Stop mit Docker Stop)

docker system prune Löschen Sie alle verlassenen Container. Sie können auch nicht verwendete baumelnde Bilder (Bilder, die noch nichts verwendet haben) und Caches löschen.

docker run --name [container_name] [image] Angabe des Containernamens Sie können den Container benennen und starten. Wenn Sie den Container im Hintergrund laufen lassen möchten oder wenn Sie einen gemeinsam genutzten Server verwenden, richten verschiedene Personen den Container dort ein. Zu diesem Zeitpunkt benötigen Sie einen Namen. Wenn Sie von einem anderen Programm aus auf einen Container zugreifen oder einen Container verwenden, können Sie ihn sofort aufrufen, indem Sie ihm einen Namen geben.

docker run -d [image] "-D" ist der Fall, wenn der Container immer im Hintergrund ausgeführt wird. Wenn Sie es in einer Entwicklungsumgebung verwenden, müssen Sie den Container immer hinter den Kulissen starten. Verwenden Sie daher den Befehl "-d", um in den getrennten Modus zu wechseln. -d ・ ・ ・ abgetrennt

abgetrennter Modus

Starten Sie den Container und nehmen Sie ihn sofort wieder vom Host ab. Der Container bewegt sich hinter die Kulissen.

Freistehender Modus ⇆ Vordergrundmodus

Vordergrundmodus

Container ohne "-d" gestartet In einem Fall, in dem Sie den Container direkt eingeben oder den Container einmal einrichten, ein Programm starten und den Container sofort löschen

docker run --rm [image] Löschen Sie den Container, sobald Sie ihn verlassen.

dokcer build . Erstellen Sie ein Docker-Image aus einer Docker-Datei Wechseln Sie normalerweise in den Ordner, in dem sich die Docker-Datei befindet, geben Sie dann das aktuelle Verzeichnis an und erstellen Sie das Docker-Image.

docker build -t [name] [directory] Sie können das Docker-Image mit der Option -t benennen.

Dockerfile

・ Docker-Bilddesignzeichnung ·Textdatei

Es wird beschrieben, wie Sie ein Docker-Image erstellen. Es ist leicht zu verstehen, da es beschreibt, welche Art von Container und welche Art von Docker-Image es sein wird

Geben Sie beim Erstellen einer Umgebung den Container einmal ein, erstellen Sie die Umgebung innerhalb des Containers und kennen Sie die erforderlichen Pakete. Schreiben Sie als Nächstes die Docker-Datei und den Docker-Build. Es wird der Fluss.

⭐️ Minimieren Sie die Anzahl der Ebenen im Docker-Image. ・ Es gibt drei Anweisungen zum Erstellen einer Docker-Ebene: RUN, COPY und ADD.

So schreiben Sie eine Docker-Datei

INSTRUCTION arguments

Schreiben Sie in Form von. Argumente ・ ・ ・ Argumente

ex)

FROM ubuntu:latest
RUN touch test

ex)

FROM ubuntu:latest
RUN apt-get update && apt-get install -y \
  curl\
  cvs\
  nginx
CMD ["/bin/bash"]

docker instruction FROM [image] Was bestimmt das Basis-Docker-Image (im Beispiel ist Ubuntu die Basis)?

Es ist gut, ein Bild mit den minimal erforderlichen Funktionen anzugeben. Es handelt sich häufig um ein Bild, das auf dem Docker-Hub platziert wird. In vielen Fällen wird das Docker-Image des Betriebssystems wie Ubuntu verwendet.

Run [command]

Docker-ANLEITUNG zum Ausführen von Linux-Befehlen

Führen Sie die Linux-Befehle aus, die zum Konfigurieren des Images erforderlich sind. Befehl ausführen (Bildebene erstellen) Erstellen Sie grundsätzlich ein Docker-Image mit der Docker-Anweisung von RUN.

Die grundlegende Schreibmethode ist das obige Beispiel, daher ist es gut, sich daran zu erinnern.

ubuntu verwaltet Pakete mit dem Befehl apt-get (oder apt). Es ist üblich, vor der Installation immer eine neue Liste zu erhalten.

apt-get update ・ ・ ・ Holen Sie sich die neueste Paketliste apt-get install [Paket] ・ ・ ・ Installiere [Paket]

"-Y" ... Antworten Sie bei der Installation des Pakets mit "Ja". Ordnen Sie die gewünschten Pakete in abc Reihenfolge.

"" ... Ein Zeilenumbruch wird auch als eine Zeile angesehen.

RUN erstellt eine Docker-Bildebene. Wenn Sie also mehrere RUNs ausführen, verfügen Sie über so viele Docker-Bildebenen wie vorhanden, und das Docker-Image wird größer. Um dies zu vermeiden, verbinden Sie die Befehle mit "&&" und reduzieren Sie die Anzahl der RUN-Zeilen so weit wie möglich.

CMD["executable", "param1", "param2"] Sie können den Standardbefehl für das Docker-Image angeben.

ausführbarer Befehl ・ ・ ・ Ausführbarer Befehl

Docker-Dateien enden normalerweise mit CMD.

Es muss nicht sein, aber es ist besser, es anzuziehen. Wenn Sie sich die Docker-Datei ansehen, sehen Sie schließlich, dass dieser Befehl standardmäßig funktioniert.

COPY [src][destination] Zur Erstellungszeit können die Dateien im Erstellungskontext in das Docker-Image aufgenommen werden. → Sie können einige Dateien oder Ordner vom Host an den Container übergeben.

src ・ ・ ・ Pfad der Hostdatei Ziel ・ ・ ・ Pfad der Datei, in der die Zieldatei im Container gespeichert ist

"COPY" und "ADD" sind ähnlich, aber im Grunde ist "COPY" in Ordnung.

ADD [src][destination] Zur Erstellungszeit können die Dateien im Erstellungskontext in das Docker-Image aufgenommen werden. → Sie können einige Dateien oder Ordner vom Host an den Container übergeben.

Wenn Sie die komprimierte TAR-Datei vom Docker erstellen, wird sie an das Docker-Image gesendet und entpackt.

ENTRYPOINT Sie können den Standardbefehl angeben, wenn das Docker ausgeführt wird. (Wie CMD)

"ENTRY POINT" kann beim Ausführen des Dockers nicht überschrieben werden. In "CMD" kann es beim Ausführen des Dockers überschrieben werden.

Wenn sich "ENTRY POINT" in der Docker-Datei befindet, ändert sich die Art und Weise, wie CMD geschrieben wird. Die Form von CMD gibt das in "ENTRYPOINT" angegebene Argument dieses Befehls an.

Beispiel) ・ CMD ohne ENTRY POINT CMD ["ls", "--help", "argument", "argument", ...]

・ CMD mit ENTRY POINT ENTRYPOINT["ls"] CMD ["--help", "argument", "argument", ...]

ENV [key] [value] Umgebungsvariablen können in der Docker-Datei angegeben werden. Wird oft beim Durchqueren eines Pfades verwendet.

Umgebungsvariablen: Variablen, die von allen auf dem Betriebssystem ausgeführten Prozessen zum Austausch von Informationen verwendet werden. Schlüssel- und Wertekombination

ENV [key]=[value] Kann auch geschrieben werden

WORKDIR [absoluter Weg]

Sie können das Verzeichnis ändern, in dem die in der Docker-Datei beschriebene Docker-Anweisung ausgeführt wird.

In der Docker-Datei befindet sich der Speicherort, an dem jede Anweisung ausgeführt wird, direkt unter dem Stammverzeichnis. Selbst wenn Sie in der Docker-Datei mit dem Befehl cd mit RUN wechseln, wird der nächste Befehl mit RUN direkt unter dem Stamm ausgeführt. Dies kann jedoch unpraktisch sein. Geben Sie daher den absoluten Pfad mit "WORKDIR" an und führen Sie die nachfolgenden Anweisungen unter dem angegebenen Pfad aus.

Details zum Docker-Build-Befehl

Warum geben Sie diesen Ordner anstelle der Docker-Datei an, wenn Sie Docker Build ausführen?

Übergeben Sie beim Ausführen des Docker-Builds den angegebenen Ordner an den Docker-Daemon. Docker Damon erstellt ein Docker-Image basierend auf dem Ordner und der Docker-Datei.

Sie benötigen also einen Ordner sowie eine Docker-Datei.

Der zu erstellende Ordner heißt "Build-Kontext". In diesem Kontext erstellt der Docker-Daemon ein Docker-Image aus der Docker-Datei.

Kontext ・ ・ ・ Umwelt und Situation

Was ist ein Docker-Daemon?

・ Docker-Objekte verwalten. (Bedienen Sie tatsächlich das Container- und Docker-Image.) ・ Kommunizieren Sie mit anderen Docker-Tools wie Docker Compose.

Docker-Objekt ・ ・ ・ Container, Image, Netzwerk usw.

Die Docker-CLI-Befehle (z. B. "Docker Build" und "Docker Run") senden Befehle an den Docker-Daemon, der Docker-Objekte verwaltet.

Erstellen Sie Docker, während Sie den Cache verwenden

Wenn Sie bereits eine Docker-Ebene haben, müssen Sie diese nicht erneut erstellen. Teilen Sie RUN unter Beibehaltung der Docker-Datei in mehrere Unternehmen auf.

Wenn Sie ein neues Paket hinzufügen und es mit RUN in einem erstellen, wird eine neue Bildebene erstellt.

ex)

FROM ubuntu:latest
RUN apt-get update 
RUN apt-get install -y \← RUN teilen
  curl\
  cvs\
  git\← Hinzufügen
  nginx
CMD ["/bin/bash"]

docker build -f [docker file] [build context] Wenn sich im Build-Kontext keine Docker-Datei befindet oder wenn Sie eine andere Docker-Datei erstellt und von dev und test getrennt haben, verwenden Sie die Option "-f" und führen Sie einen Docker-Build durch, um eine bestimmte Docker-Datei anzugeben, und erstellen Sie dann einen Docker. es kann.

Wenn Sie in der Entwicklungsumgebung und der Testumgebung unterschiedliche Docker-Dateien haben, können Sie mit "-f" die Docker-Datei angeben und das Docker erstellen.

Der Name der Docker-Datei lautet 開発系ではDockerfile.dev Im Test Dockerfiel.test Der Dateiname hat häufig die Form.

Beziehung zwischen Host und Container

Dateisystemfreigabe

Das Dateisystem des Containers ist unabhängig vom Dateisystem des Hosts, aber die Option "-v" ermöglicht dem Container den Zugriff auf das Dateisystem des Hosts. Hängen Sie das Host-Dateisystem in den Container ein. Durch das Mounten des Dateisystems können Sie sich so verhalten, als ob sich das Host-Dateisystem im Container-Dateisystem befindet. (Tatsächlich befindet es sich nicht im Behälter. Wenn Sie es in den Behälter legen, ist es groß.)

In der Entwicklungsumgebung wird der Code häufig auf dem Host platziert und der Container wird bei der Ausführung des Codes verwendet.

Grundsätzlich ist es bei der Entwicklung üblich, Codeskripte und Daten auf dem Host und nicht im Container abzulegen.

docker run -v [host/path]:[container/path]

Zugriff auf Dateien

Führen Sie den Container mit Benutzer-ID und Gruppen-ID aus

Der Zugriff auf Dateien ist ein Problem, wenn der Container auf das Dateisystem des Hosts zugreifen kann. Durch Hinzufügen der Option "-u" können Sie einen Container einrichten, indem Sie die Benutzer-ID oder Gruppen-ID angeben. Infolgedessen werden die Berechtigungen der Hostbenutzer-ID und der Gruppen-ID unverändert auf den Container angewendet.

docker run -u (id -u):(id -g) (id -u): Benutzer-ID (id -g): Gruppen-ID $: Der Rückgabewert des Befehls wird in "-u" angegeben.

Verbinden Sie die Ports

Verbinden Sie den Host-Port mit dem Container-Port Port: Was der Prozess für die Datenkommunikation verwendet Die IP-Adresse und der Hostname sind die Gebäudeadresse, und der Port ist die Raumnummer.

Wenn Sie von außen auf den Webserver oder den Webdienst des Hosts zugreifen, können Sie auf den Webserver oder den Webdienst des Hosts zugreifen, indem Sie den Port zusätzlich zum Namen und der IP-Adresse des Hosts angeben. Wenn auf dem Container ein Webserver oder Webdienst ausgeführt wird, können Sie von außen auf den Port des Containers zugreifen, indem Sie den Port des Hosts und den Port des Containers verbinden (veröffentlichen).

docker run -p [host_port]:[container_port] docker run -p 8888:8888

Computerressourcenlimit

Wenn der Host mehrere Container enthält und ein Container den gesamten Speicher belegt, kann das gesamte System ausfallen. Um dies zu vermeiden, können Sie für jeden Container die Obergrenze für "CPU" und "Speicher" angeben.

docker run --cpus [#ofCPUs] --memory [byte]

[#ofCPUs] ・ ・ ・ Legen Sie die maximale CPU fest, auf die der Container zugreifen kann [Byte] ・ ・ ・ Legen Sie den maximalen Speicher fest, auf den der Container zugreifen kann

Containerdetails anzeigen

Informationen zum Docker-Container werden in einer Liste angezeigt.

docker inspect [container] | grep -i [something]

Der von Docker Inspect angezeigte Inhalt ist so groß, dass Sie nicht sofort auf die benötigten Informationen zugreifen können. Verwenden Sie grep -i [etwas], um nur die Dockr-Prüfung anzuzeigen, die sich auf die angegebene Zeichenfolge bezieht, z. B. "CPU", "Speicher" und "Umgebungsvariable (env)".

-i ・ ・ ・ ignorieren, Groß- / Kleinschreibung ignorieren

Schließlich

Dieser Artikel wurde basierend auf dem udemy docker-Kurs von Kame-san (https://twitter.com/usdatascientist?s=21) erstellt (https://www.udemy.com/share/103aTRAEMfeVhaTXoB/). ..

Kames Blog (https://datawokagaku.com/docker_lecture/)

Recommended Posts

Docker-Grundlagen
Docker
Docker-Überwachung - Erläuterung der Grundlagen der Grundlagen
Docker-Memo
Rails Grundlagen
Frühling × Docker
Ruby-Grundlagen
Über Docker
Docker Intellij
JPA-Grundlagen 1
ViewPager-Grundlagen
Java-Grundlagen
Java-Grundlagen
JavaScript-Grundlagen
Docker verstehen
Docker Memorandum
JPA-Grundlagen 2
Java-Grundlagen
RecyclerView-Grundlagen
Schienen CSV Basic
Docker-Tutorial (Memo)
Technisches Memorandum (Docker)
Docker + Laravel + Codeception
Freiheit auf Docker
Grundlagen des Rails-Routings
Docker-Betriebsnotiz
Grundlagen der Rails-Datenbank
Grundlagen des Rails Logger
Grundlagen der Java-Programmierung
Docker-Grundbefehl
Grundlagen von Ruby
Java JAR-Grundlagen
Objektorientierte (Java) Grundlagen
Docker-Studiennotizen
Docker-Befehlsübersicht
Schneller Docker / Nginx
vim (gitbush) Grundlagen
Kleiner Docker Container
Rails Docker-Teil 1-
Grundlagen regulärer Ausdrücke
Rails Docker ~ Teil 2 ~