Docker-Images, Container, Warehouses und Datenverwaltung

Verwendung von Docker- Images

Bild abrufen

Verwenden Sie den Docker-Pull-Befehl und den Docker-Suchbefehl, um im Remote-Warehouse nach freigegebenen Bildern zu suchen.

Container ausführen

Verwenden Sie den Befehl docker run [OPTIONS] IMAGE [COMMAND] [ARG...], z. B.: docker run --name ubuntu_test --rm -it ubuntu:test /bin/bash, wobei die Optionen wie folgt lauten:

  • --name gibt den Containernamen an.
  • --rm bedeutet, dass der Container gelöscht wird, nachdem er beendet wurde.
  • Die Option -t weist Docker an, ein Pseudoterminal zuzuweisen und es an die Standardeingabe des Containers zu binden.
  • -i hält die Standardeingabe des Containers geöffnet.

Bildinformationen anzeigen

Verwenden Sie den Docker-Images-Befehl, um die heruntergeladenen Bilder aufzulisten.

Der Befehl docker image --filter listet die angegebenen Parameter auf

Beispiel: Listen Sie den Warehouse-Namen, die ID und das Tag des Bildes auf , getrennt durch „ === „ .

docker images --format "{
   
   {.Repository}} === {
   
   {.ID}} === {
   
   {.Tag}}"   

Lösche Bild

Docker RMI [Bildbezeichnung oder ID], beachten Sie, dass Docker RM der Befehl zum Löschen des Containers ist, lassen Sie sich nicht verwirren.

Bild erstellen

Es gibt drei Methoden: Verwenden Sie den Docker-Commit-Befehl, um einen Container basierend auf einem vorhandenen Image zu erstellen, oder importieren Sie ihn basierend auf einer lokalen Vorlage. Basierend auf Dockerfile erstellt.

Docker-Commit

Speichern Sie die Speicherebene des Containers als Bild. Der Docker-Commit-Befehl führt dazu, dass das Image aufgebläht wird und in der tatsächlichen Umgebung nicht auf diese Weise verwendet wird.

Befehlssyntax:

docker commit [选项] <容器ID或容器名> [<仓库名>[:<标签>]]

Zu den Optionen gehören:

  • -a, --author=""Autoreninformationen
  • -m, --message=""Nachricht festschreiben
  • -p, --pause=true hält den Container beim Commit an

Import basierend auf lokaler Vorlage

Laden Sie zuerst die komprimierte Paketdatei der Betriebssystemvorlage herunter und importieren Sie dann Folgendes mit dem Docker-Importbefehl:

docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]

Angepasstes Image basierend auf Dockerfile

Dockerfile ist eine Textdatei, die Anweisungen (Anweisungen) enthält. Jede Anweisung erstellt eine Ebene, sodass der Inhalt jeder Anweisung beschreibt, wie die Ebene erstellt werden soll. Gehen Sie wie folgt vor:

1. Erstellen Sie in einem leeren Verzeichnis eine Datei Dockerfile mit folgendem Inhalt:

FROM golang
RUN mkdir -p /go/src/study      \
    && go env -w GO111MODULE=off
COPY study /go/src/study
WORKDIR /go/src/study/photoweb/
RUN go build /go/src/study/photoweb/photoweb.go

Die FROM- Anweisung gibt das Basisbild an. Wenn Scratch als Basisbild verwendet wird, bedeutet dies, dass es auf keinem Bild basiert.

Mit der RUN- Anweisung werden Befehlszeilenbefehle ausgeführt.

Die COPY- Anweisung kopiert lokale Dateien in das Image. Es ist zu beachten, dass die lokale Datei eine Datei im Image-Build-Kontext sein muss (angegeben durch den letzten Parameter des Docker-Build-Befehls). Im Allgemeinen werden die zu kopierenden Dateien kopiert das Verzeichnis, in dem sich die Docker-Datei befindet. Die WORKDIR- Direktive gibt das Arbeitsverzeichnis an, um zu verhindern, dass die ausführbare Datei verwandte Ressourcen findet.

2. Nachdem die Docker-Datei geschrieben wurde, führen Sie den Befehl docker build -t golang:test aus. Erstellen Sie ein Image.

Mehrstufiger Dockerfile-Build

Die mehrstufige Dockerfile-Konstruktion ist eine Methode zur Optimierung der Docker-Image-Konstruktion, die die Größe von Docker-Images und den Ressourcenverbrauch zur Laufzeit reduzieren kann. Im folgenden Beispiel werden in der ersten Phase der kopierbare Quellcode und die ausführbare Datei-App kompiliert, und in der zweiten Phase wird nur die ausführbare Datei-App in das Image kopiert. Spart unnötigen Platz während der Laufzeit (Go-Quellcode oder andere Pakete, auf die beim Kompilieren zurückgegriffen wird)

# 第一阶段下载相关依赖编译出可执行文件app
FROM golang:1.9-alpine
RUN apk --no-cache add git
WORKDIR /go/src/github.com/go/helloworld/
RUN go get -d -v github.com/go-sql-driver/mysql
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

# 第二阶段只将可执行文件app复制到镜像中,运行的容器中并不需要下载git和mysql驱动包
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /go/src/github.com/go/helloworld/app .
CMD ["./app"]

Speichern und laden

Docker bietet außerdem die Befehle „Docker Load“ und „Docker Save“, um das Image als TAR-Datei zu speichern, es dann an einen anderen Speicherort zu übertragen und dann dort zu laden. Dies ist der Ansatz, wenn keine Docker-Registrierung vorhanden ist. Er wird nicht mehr empfohlen. Docker Registry sollte direkt für die Image-Migration verwendet werden, unabhängig davon, ob Docker Hub direkt oder eine private Intranet-Registrierung verwendet wird.

Speichern Sie das Bild: docker save ubuntu:test | gzip > ubuntu-test.tar.gz. Das mit Docker Save gespeicherte Bild kann nur mit Docker Load geladen werden.

Laden Sie das Bild: Docker Load -i ubuntu-test.tar.gz

Prinzip der Spiegelimplementierung

Jedes Bild besteht aus vielen Ebenen, und Docker verwendet Union FS, um diese verschiedenen Ebenen in einem einzigen Bild zu kombinieren.

Operationscontainer

Container starten

Wenn Sie mit dem Befehl „docker run“ einen Container mit Docker Run erstellen, gehören zu den Standardvorgängen, die Docker im Hintergrund ausführt:

  • Überprüfen Sie, ob das angegebene Bild lokal vorhanden ist. Wenn es nicht vorhanden ist, laden Sie es aus dem öffentlichen Lager herunter.
  • Erstellen und starten Sie einen Container mithilfe eines Bildes
  • Ordnen Sie ein Dateisystem zu und mounten Sie eine Lese-/Schreibebene außerhalb der schreibgeschützten Image-Ebene
  • Überbrücken Sie eine virtuelle Schnittstelle von der auf dem Host-Host konfigurierten Bridge-Schnittstelle zum Container
  • Konfigurieren Sie eine IP-Adresse aus dem Adresspool für den Container
  • Benutzerdefinierte Anwendung ausführen
  • Nach der Ausführung wird der Container beendet

Im Daemon-Status ausführen: Fügen Sie den Parameter -d hinzu, wenn Sie den Docker-Run-Befehl ausführen.

Container beenden

Verwenden Sie den Docker-Stop-Befehl, um den Container zu beenden. Der beendete Container kann über den Docker-Start-Befehl neu gestartet werden.

Betreten Sie den Container

Verwenden Sie den Befehl „docker attachment“ oder „docker exec“. Der Unterschied zwischen den beiden besteht darin, dass nach der Ausführung von „attach“ das Verlassen von „stdin“ zum Anhalten des Containers führt. Nach dem Ausführen von „exec“ führt das Verlassen von „stdin“ nicht zum Anhalten des Containers. Daher wird dies empfohlen um den Docker-Exec-Befehl zu verwenden, um den Container zu betreten.

Export Import

Verwenden Sie den Docker-Export-Befehl, um einen lokalen Container-Snapshot in eine lokale Datei zu exportieren, und verwenden Sie den Docker-Import-Befehl, um ihn aus der Container-Snapshot-Datei in ein Image zu importieren, zum Beispiel:

$ docker ps -a

CONTAINER ID    IMAGE            COMMAND        CREATED        STATUS        PORTS        NAMES
7691a814370e    ubuntu:14.04     "/bin/bash"    36 hours ago   Exited(0) 21 hours ago  test

$ docker export 7691a814370e > ubuntu.tar
 

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

$ docker images
REPOSITORY    TAG    IMAGE ID      CREATED               VIRTUAL SIZE
test/ubuntu   v1.0   9d37a6082e97  About a minute ago    171.3MB

Container löschen

Wenn Sie mit dem Docker-RM-Befehl einen laufenden Container löschen möchten, können Sie den Parameter -f hinzufügen. Docker sendet das SIGKILL-Signal an den Container. Bereinigen Sie alle beendeten Container mit dem Befehl docker container prune

Besuchen Sie das Lager

Docker-Hub

Registrieren Sie ein Konto  auf der Website https://cloud.docker.com .

Anmelden und Abmelden: Docker-Anmelde- und Docker-Abmeldebefehle

Ziehen Sie das Bild: Verwenden Sie die Docker-Suche, um das Bild aus dem Lager zu finden, und verwenden Sie den Docker-Pull-Befehl, um das Bild abzurufen.

Pushen Sie das Bild: Befehl docker push username/ubuntu:17.10, username ist der Benutzername des Kontos.

Privates Lager

Verwenden Sie das offiziell bereitgestellte Tool docker-registry, um ein privates Image-Warehouse zu erstellen.

Container läuft: docker run -d -p 5000:5000 --restart=always --name Registry Registry. Standardmäßig wird das Warehouse im Verzeichnis /var/lib/registry des Containers erstellt. Sie können den Parameter -v verwenden, um die Bilddatei in einem lokal angegebenen Pfad zu speichern.

Bilder in privaten Repositories hochladen, suchen und herunterladen:

  • Verwenden Sie zunächst das Docker-Tag, um ein Bild zu markieren. Die private Warehouse-Adresse lautet beispielsweise 127.0.0.1:5000 und der Tag-Befehl lautet docker tag ubuntu:latest 127.0.0.1:5000/ubuntu:latest
  • Verwenden Sie dann Docker Push , um das getaggte Bild hochzuladen. Der Befehl lautet docker push 127.0.0.1:5000/ubuntu:latest
  • Verwenden Sie Curl , um die Bilder im Repository anzuzeigen. Der Befehl lautet curl 127.0.0.1:5000/v2/_catalog
  • Laden Sie das Image aus dem Warehouse herunter. Der Befehl lautet docker pull 127.0.0.1:5000/ubuntu:latest
  • Docker lässt standardmäßig nicht zu, dass Nicht-HTTPS-Bilder gepusht werden. Wir können diese Einschränkung durch die Docker-Konfiguration entfernen oder ein privates Repository konfigurieren, auf das über HTTPS zugegriffen werden kann. Fügen Sie der Datei /etc/docker/daemon.json den folgenden Inhalt hinzu:
{
    "registry-mirror": [
    "https://registry.docker-cn.com"
    ],
    "insecure-registries": [
    "192.168.199.100:5000"
    ]
}

Datenmanagement

Es gibt im Wesentlichen zwei Möglichkeiten, Daten innerhalb von Docker und zwischen Containern zu verwalten: Datenvolumes (Volumes) und das Mounten von Hostverzeichnissen (Bind-Mounts).

Ein spezielles Verzeichnis, in dem ein Datenvolumen von einem oder mehreren Containern genutzt werden kann. Es umgeht UFS und weist die folgenden Eigenschaften auf:

  • Datenmengen können zwischen Containern gemeinsam genutzt und wiederverwendet werden
  • Änderungen am Datenvolumen werden sofort wirksam
  • Aktualisierungen des Datenvolumens wirken sich nicht auf den Spiegel aus
  • Das Datenvolumen bleibt standardmäßig immer bestehen, auch wenn der Container gelöscht wird

Datenvolumen erstellen

docker volume create my-vol

Zeigen Sie das Datenvolumen an: Docker-Volume ls; zeigen Sie die Informationen des angegebenen Datenvolumens wie folgt an:

$ docker volume inspect my-vol
[
    {
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/my-vol/_data",
        "Name": "my-vol",
        "Options": {},
        "Scope": "local"
    }
]

Mounten Sie das Datenvolumen beim Starten des Containers: Verwenden Sie den Parameter --mount, um das Datenvolumen anzugeben, das beim Ausführen von Docker Run gemountet werden soll. Zum Beispiel:

$ docker run -d -P \
    --name web \
    # -v my-vol:/wepapp \
    --mount source=my-vol,target=/webapp \
    training/webapp \
    python app.py

Verwenden Sie den Befehl docker inspect web auf dem Host, um die Containerinformationen anzuzeigen. Die Informationen zum Datenvolumen befinden sich unter dem Schlüssel „Mounts“.

Löschen Sie das Datenvolumen: Docker-Volume rm my-vol, bereinigen Sie das Datenvolumen mit dem Befehl „Docker Volume Prune“.

Zusätzlich zum Mounten des erstellten Datenvolumens können Sie mit dem Flag --mount auch angeben, dass ein Verzeichnis auf dem lokalen Host direkt in den Container gemountet wird. Die Standardberechtigungen für das gemountete Hostverzeichnis von Docker sind Lesen und Schreiben, und Benutzer können auch schreibgeschützt angeben, indem sie schreibgeschützt hinzufügen.

Supongo que te gusta

Origin blog.csdn.net/UFOfuck/article/details/132765120
Recomendado
Clasificación