Verwendung von Docker-Containern

Ein Docker-Container ist eine leichtgewichtige, portable, eigenständige Softwareumgebung, die zum Ausführen von Anwendungen verwendet wird.

Docker-Container packen die Anwendung und alle ihre Abhängigkeiten, einschließlich Bibliotheken, Konfigurationsdateien, Systemtools usw., in ein standardisiertes Paket, sodass die Anwendung überall einheitlich ausgeführt werden kann.

Container sind Virtualisierung auf Betriebssystemebene. Sie müssen kein vollständiges Betriebssystem ausführen, was Start und Betrieb effizienter macht.

Die Beziehung zwischen Images und Containern

  • Image:Eine statische Vorlage für Container, die alle Abhängigkeiten und Dateien enthält, die für die Ausführung der Anwendung erforderlich sind. Images sind unveränderlich.
  • Container:Eine laufende Instanz eines Images mit eigenem Dateisystem, Prozessen, Netzwerk usw., und sie ist dynamisch. Ein Container startet aus einem Image und bleibt während der Laufzeit veränderbar.


Docker-Client

Der Docker-Client ist ein Befehlszeilenwerkzeug, das mit dem Docker-Daemon interagiert.

Der Docker-Client ist sehr einfach; wir können direkt den Befehl docker eingeben, um alle Befehlsoptionen des Docker-Clients anzuzeigen.

example@example:~# docker

Sie können den Befehldocker command --helpverwenden, um besser zu verstehen, wie ein angegebener Docker-Befehl verwendet wird.

Wenn wir beispielsweise diedocker statsdetaillierte Verwendung der Befehle anzeigen möchten:

example@example:~# docker stats --help

Die folgenden sind gängige Docker-Client-Befehle:

BefehlFunktionenBeispiel
docker runEinen neuen Container starten und einen Befehl ausführendocker run -d ubuntu
docker psDerzeit laufende Container auflistendocker ps
docker ps -aAlle Container auflisten (einschließlich gestoppter Container)docker ps -a
docker buildVerwenden Sie ein Dockerfile, um das Image zu erstellen.docker build -t my-image .
docker imagesAlle lokal gespeicherten Images auflistendocker images
docker pullEin Image aus einer Docker-Registry ziehendocker pull ubuntu
docker pushEin Image in eine Docker-Registry pushendocker push my-image
docker execEinen Befehl in einem laufenden Container ausführendocker exec -it container_name bash
docker stopEinen oder mehrere Container stoppendocker stop container_name
docker startGestoppte Container startendocker start container_name
docker restartEinen Container neu startendocker restart container_name
docker rmEinen oder mehrere Container entfernendocker rm container_name
docker rmiEin oder mehrere Images entfernendocker rmi my-image
docker logsContainer-Logs anzeigendocker logs container_name
docker inspectDetaillierte Informationen über einen Container oder ein Image abrufendocker inspect container_name
docker exec -itDas interaktive Terminal eines Containers betretendocker exec -it container_name /bin/bash
docker network lsAlle Docker-Netzwerke auflistendocker network ls
docker volume lsAlle Docker-Volumes auflistendocker volume ls
docker-compose upEine Multi-Container-Anwendung starten (ausdocker-compose.ymlDatei)docker-compose up
docker-compose downDen Container stoppen und entfernen, der erstellt wurde vondocker-composeden Containern, Netzwerken usw., die gestartet werdendocker-compose down
docker infoDetaillierte Informationen über das Docker-System anzeigendocker info
docker versionVersionsinformationen für den Docker-Client und -Daemon anzeigendocker version
docker statsRessourcennutzung von Containern in Echtzeit anzeigendocker stats
docker loginBei der Docker-Registry anmeldendocker login
docker logoutVon der Docker-Registry abmeldendocker logout

Beschreibungen allgemeiner Optionen:

  • -d: Den Container im Hintergrund ausführen, zum Beispieldocker run -d ubuntu。
  • -it: Den Container in einem interaktiven Terminal ausführen, zum Beispieldocker exec -it container_name bash。
  • -t:Einem Image ein Tag zuweisen, zum Beispieldocker build -t my-image .。

Container-Verwendung

Image abrufen

Wenn wir das ubuntu-Image nicht lokal haben, können wir den Befehl docker pull verwenden, um das ubuntu-Image zu laden:

$ docker pull ubuntu

Container starten

Der folgende Befehl startet einen Container mit dem ubuntu-Image, mit dem Parameter, um den Container im Kommandozeilenmodus zu betreten:

$ docker run -it ubuntu /bin/bash

Parameter description:

  • -i:Interaktiver Betrieb.
  • -t: Terminal.
  • ubuntu: ubuntu-Image.
  • /bin/bash: Der Teil nach dem Image-Namen ist der Befehl. Hier wollen wir eine interaktive Shell, also verwenden wir /bin/bash.

Um das Terminal zu beenden, geben Sie einfachexit ein:

root@ed09e4490c57:/# exit

Einen gestoppten Container starten

Die Befehle zum Anzeigen aller Container sind wie folgt:

$ docker ps -a

Klicken Sie auf das Bild, um eine größere Version anzuzeigen:

Verwenden Sie docker start, um einen gestoppten Container zu starten:

$ docker start b750bbbcfd88 

Im Hintergrund ausführen

In den meisten Szenarien möchten wir, dass der Docker-Dienst im Hintergrund läuft. Wir können-dden Ausführungsmodus des Containers angeben.

$ docker run -itd --name ubuntu-test ubuntu /bin/bash

Klicken Sie auf das Bild, um eine größere Version anzuzeigen:

Hinweis:hinzugefügt-dDer Parameter gelangt standardmäßig nicht in den Container; um in den Container zu gelangen, müssen Sie den Befehl docker execverwenden (Dies wird unten vorgestellt.)

Einen Container stoppen

Der Befehl zum Stoppen eines Containers lautet wie folgt:

$ docker stop <容器 ID>

Ein gestoppter Container kann mit docker restart neu gestartet werden:

$ docker restart <容器 ID>

Container betreten

Bei Verwendung von-dWenn Sie einen Container mit dem Parameter starten, läuft der Container im Hintergrund. Wenn Sie zu diesem Zeitpunkt in den Container wechseln müssen, können Sie den folgenden Befehl verwenden, um hineinzugelangen:

  • docker attach: Ermöglicht die Interaktion mit der Standardeingabe (stdin), der Standardausgabe (stdout) und der Standardfehlerausgabe (stderr) des Containers.

  • docker exec:Es wird empfohlen, den Befehl docker exec zu verwenden, da dieser Befehl das Container-Terminal beendet, den Container aber nicht stoppt.

attach-Befehl

Beispiel für die Verwendung des Befehls docker attach:

$ docker attach 1e560fca3906 

Hinweis:Wenn Sie aus diesem Container aussteigen, wird der Container gestoppt.

exec-Befehl

Beispiel für die Verwendung des Befehls docker exec:

docker exec -it 243c32535da7 /bin/bash

Hinweis:Wenn Sie aus diesem Container aussteigen, wird der Container nicht gestoppt, weshalb es empfohlen wird, dass alledocker exec verwenden。

Für weitere Parameterbeschreibungen verwenden Sie bittedocker exec --help, um sie mit dem Befehl anzuzeigen.

Container exportieren und importieren

Container exportieren

Wenn Sie einen lokalen Container exportieren möchten, können Sie den Befehldocker exportverwenden.

$ docker export 1e560fca3906 > ubuntu.tar

Exportieren Sie den Snapshot des Containers 1e560fca3906 in die lokale Datei ubuntu.tar.

Dadurch wird ein Snapshot des Containers in eine lokale Datei exportiert.

Einen Container-Snapshot importieren

Sie können docker import verwenden, um eine Container-Snapshot-Datei wieder als Image zu importieren. Das folgende Beispiel importiert die Snapshot-Datei ubuntu.tar in das Image test/ubuntu:v1:

$ cat docker/ubuntu.tar | docker import - test/ubuntu:v1

Darüber hinaus können Sie auch importieren, indem Sie eine URL oder ein Verzeichnis angeben, zum Beispiel:

$ docker import http://example.com/exampleimage.tgz example/imagerepo

Container löschen

Um einen Container zu löschen, verwenden Sie den Befehldocker rm:

$ docker rm -f 1e560fca3906

Der folgende Befehl kann alle Container im beendeten Zustand bereinigen.

$ docker container prune

Eine Webanwendung ausführen

Die Container, die wir zuvor ausgeführt haben, hatten keinen bestimmten Zweck.

Als Nächstes versuchen wir, mit Docker eine Webanwendung zu erstellen.

Wir werden eine Python-Flask-Anwendung in einem Docker-Container ausführen, um eine Webanwendung auszuführen.

example@example:~# docker pull training/webapp  # 载入镜像
example@example:~# docker run -d -P training/webapp python app.py

Parameter description:

  • -d:Führen Sie den Container im Hintergrund aus.

  • -P:Mappen Sie die im Container verwendeten Netzwerkports zufällig auf den von uns verwendeten Host.


Webanwendungscontainer anzeigen

Verwenden Sie docker ps, um die Container anzuzeigen, die wir ausführen:

example@example:~#  docker ps
CONTAINER ID        IMAGE               COMMAND             ...        PORTS                 
d3d5e39ed9d3        training/webapp     "python app.py"     ...        0.0.0.0:32769->5000/tcp

Hier haben wir zusätzliche Portinformationen.

PORTS
0.0.0.0:32769->5000/tcp

Docker hat Port 5000 geöffnet (den Standard-Python-Flask-Port) und ihn auf Host-Port 32769 gemappt.

An diesem Punkt können wir über einen Browser auf die WEB-Anwendung zugreifen.

Wir können auch den -p-Parameter verwenden, um verschiedene Ports festzulegen:

example@example:~$ docker run -d -p 5000:5000 training/webapp python app.py

docker psLaufende Container anzeigen

example@example:~#  docker ps
CONTAINER ID        IMAGE                             PORTS                     NAMES
bf08b7f2cd89        training/webapp     ...        0.0.0.0:5000->5000/tcp    wizardly_chandrasekhar
d3d5e39ed9d3        training/webapp     ...        0.0.0.0:32769->5000/tcp   xenodochial_hoov

Der interne Port 5000 des Containers ist auf Port 5000 auf unserem lokalen Host gemappt.


Netzwerkport-Verknüpfung

Durchdocker pskann der Befehl die Portzuordnungen des Containers anzeigen.dockerbietet außerdem eine weitere Abkürzung:docker port, verwenden Siedocker port, um den Host-Port anzuzeigen, auf den ein bestimmter Port eines angegebenen Containers (nach ID oder Name) abgebildet ist.

Der oben erstellte Webanwendungscontainer hat die IDbf08b7f2cd89mit dem Namenwizardly_chandrasekhar。

Ich kanndocker port bf08b7f2cd89oderdocker port wizardly_chandrasekharverwenden, um den Status der Portzuordnung des Containers anzuzeigen.

example@example:~$ docker port bf08b7f2cd89
5000/tcp -> 0.0.0.0:5000
example@example:~$ docker port wizardly_chandrasekhar
5000/tcp -> 0.0.0.0:5000

Die Protokolle der Webanwendung anzeigen

docker logs [ID oder Name] kann die Standardausgabe aus dem Containerinneren anzeigen.

example@example:~$ docker logs -f bf08b7f2cd89
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.239.1 - - [09/May/2016 16:30:37] "GET / HTTP/1.1" 200 -
192.168.239.1 - - [09/May/2016 16:30:37] "GET /favicon.ico HTTP/1.1" 404 -

-f:Lassen Siedocker logswie bei Verwendung vontail -f funktionieren.Ähnlich gibt es die Standardausgabe aus dem Containerinneren aus.

Aus dem Obigen können wir ersehen, dass die Anwendung Port 5000 verwendet und wir die Zugriffsprotokolle der Anwendung einsehen können.


Die Prozesse des Webanwendungscontainers anzeigen

Wir können auch docker top verwenden, um die im Container laufenden Prozesse anzuzeigen

example@example:~$ docker top wizardly_chandrasekhar
UID     PID         PPID          ...       TIME                CMD
root    23245       23228         ...       00:00:00            python app.py

Die Webanwendung inspizieren

Verwendungdocker inspectUm die zugrunde liegenden Informationen von Docker anzuzeigen. Es gibt eine JSON-Datei zurück, die die Konfigurations- und Statusinformationen des Docker-Containers aufzeichnet.

example@example:~$ docker inspect wizardly_chandrasekhar
[
    {
        "Id": "bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85",
        "Created": "2018-09-17T01:41:26.174228707Z",
        "Path": "python",
        "Args": [
            "app.py"
        ],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 23245,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2018-09-17T01:41:26.494185806Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
......

Webanwendungscontainer stoppen

example@example:~$ docker stop wizardly_chandrasekhar   
wizardly_chandrasekhar

Webanwendungscontainer neu starten

Für einen bereits gestoppten Container können wir den Befehl docker start verwenden, um ihn zu starten.

example@example:~$ docker start wizardly_chandrasekhar
wizardly_chandrasekhar

docker ps -l fragt den zuletzt erstellten Container ab:

#  docker ps -l 
CONTAINER ID        IMAGE                             PORTS                     NAMES
bf08b7f2cd89        training/webapp     ...        0.0.0.0:5000->5000/tcp    wizardly_chandrasekhar

Für laufende Container können wirdocker restartals Befehl zum Neustarten verwenden.


Webanwendungscontainer entfernen

Wir können den Befehl docker rm verwenden, um unnötige Container zu löschen.

example@example:~$ docker rm wizardly_chandrasekhar  
wizardly_chandrasekhar

Beim Löschen eines Containers muss sich der Container in einem gestoppten Zustand befinden, andernfalls wird der folgende Fehler gemeldet.

example@example:~$ docker rm wizardly_chandrasekhar
Error response from daemon: You cannot remove a running container bf08b7f2cd897b5964943134aa6d373e355c286db9b9885b1f60b6e8f82b2b85. Stop the container before attempting removal or force remove
Weitere Erweiterungen