Suche…


Parameter

Parameter Einzelheiten
--ziehen Stellt sicher, dass das Basisimage ( FROM ) aktuell ist, bevor der Rest der Dockerfile erstellt wird.

Erstellen eines Bildes aus einer Dockerfile

Sobald Sie eine Docker-Datei haben, können Sie mit docker build ein Image daraus docker build . Die Grundform dieses Befehls lautet:

docker build -t image-name path

Wenn Ihre Docker-Datei nicht als Dockerfile , können Sie mit dem Flag -f den Namen der zu erstellenden Docker-Datei angeben.

docker build -t image-name -f Dockerfile2 .

So erstellen Sie beispielsweise ein Image mit dem Namen dockerbuild-example:1.0.0 aus einer Dockerfile im aktuellen Arbeitsverzeichnis:

$ ls
Dockerfile Dockerfile2

$ docker build -t dockerbuild-example:1.0.0 .

$ docker build -t dockerbuild-example-2:1.0.0 -f Dockerfile2 .

Weitere docker build und Einstellungen finden Sie in der docker build Verwendungsdokumentation .

Ein häufiger Fehler ist das Erstellen einer Docker-Datei im Home-Verzeichnis des Benutzers ( ~ ). Dies ist eine schlechte Idee, weil während docker build -t mytag . Diese Meldung wird für lange Zeit angezeigt:

Kontext hochladen

Die Ursache ist der Docker-Daemon, der versucht, alle Dateien des Benutzers (sowohl das Home-Verzeichnis als auch dessen Unterverzeichnisse) zu kopieren. Vermeiden Sie dies, indem Sie immer ein Verzeichnis für die Docker-Datei angeben.

Das Hinzufügen einer .dockerignore Datei zum Build-Verzeichnis ist eine gute Vorgehensweise . Die Syntax ähnelt den .gitignore Dateien und stellt sicher, dass nur gewünschte Dateien und Verzeichnisse als Kontext des .gitignore hochgeladen werden.

Eine einfache Dockerfile

FROM node:5

Die FROM Anweisung gibt ein Bild an, von dem aus begonnen werden soll. Es kann eine beliebige gültige Bildreferenz verwendet werden.

WORKDIR /usr/src/app

Die WORKDIR Direktive legt das aktuelle Arbeitsverzeichnis innerhalb des Containers fest. WORKDIR entspricht der Ausführung von cd im Container. (Hinweis: RUN cd wird nicht das aktuelle Arbeitsverzeichnis geändert werden .)

RUN npm install cowsay knock-knock-jokes

RUN führt den angegebenen Befehl innerhalb des Containers aus.

COPY cowsay-knockknock.js ./

COPY kopiert die Datei oder das Verzeichnis in dem ersten Argumente vom Build - Kontext angegeben (der path weitergegeben docker build path ) zu dem Ort in dem Behälter durch das zweite Argument spezifiziert.

CMD node cowsay-knockknock.js

CMD gibt einen Befehl auszuführen , wenn das Bild ausgeführt und kein Befehl gegeben wird. Es kann überschrieben werden, indem ein Befehl an das docker run .

Es gibt viele andere Anweisungen und Optionen. Eine vollständige Liste finden Sie in der Dockerfile-Referenz .

Unterschied zwischen ENTRYPOINT und CMD

Es gibt zwei Dockerfile Direktiven, um anzugeben, welcher Befehl standardmäßig in erstellten Images ausgeführt werden soll. Wenn Sie nur CMD angeben, führt Docker diesen Befehl mit der Standardeinstellung ENTRYPOINT , ENTRYPOINT /bin/sh -c . Sie können entweder den Einstiegspunkt und / oder den Befehl überschreiben, wenn Sie das erstellte Image starten. Wenn Sie beides angeben, gibt ENTRYPOINT die ausführbare Datei Ihres Containerprozesses an, und CMD wird als Parameter dieser ausführbaren Datei angegeben.

Zum Beispiel, wenn Ihre Dockerfile enthält

FROM ubuntu:16.04
CMD ["/bin/date"]

Dann verwenden Sie die Standard- ENTRYPOINT Direktive von /bin/sh -c und führen /bin/date mit diesem Standard-Einstiegspunkt aus. Der Befehl Ihres Containerprozesses lautet /bin/sh -c /bin/date . Sobald Sie dieses Bild ausgeführt haben, wird standardmäßig das aktuelle Datum gedruckt

$ docker build -t test .
$ docker run test
Tue Jul 19 10:37:43 UTC 2016

Sie können CMD in der Befehlszeile überschreiben. In diesem Fall wird der von Ihnen angegebene Befehl ausgeführt.

$ docker run test /bin/hostname
bf0274ec8820

Wenn Sie eine ENTRYPOINT Direktive angeben, verwendet Docker diese ausführbare Datei, und die CMD Direktive gibt die Standardparameter des Befehls an. Wenn Ihre Dockerfile enthält:

FROM ubuntu:16.04
ENTRYPOINT ["/bin/echo"]
CMD ["Hello"]

Dann wird es laufen

$ docker build -t test .
$ docker run test
Hello

Sie können andere Parameter angeben, wenn Sie möchten, aber alle laufen mit /bin/echo

$ docker run test Hi
Hi

Wenn Sie den in Ihrem Dockerfile aufgeführten Eingangspunkt überschreiben möchten (dh, wenn Sie einen anderen Befehl als das echo in diesem Container ausführen möchten), müssen Sie den Parameter --entrypoint in der Befehlszeile angeben:

$ docker run --entrypoint=/bin/hostname test
b2c70e74df18

Im Allgemeinen verwenden Sie die ENTRYPOINT Direktive, um auf Ihre Hauptanwendung zu zeigen, die Sie ausführen möchten, und CMD auf die Standardparameter.

Freilegen eines Ports in der Dockerfile

EXPOSE <port> [<port>...]

Aus der Dokumentation von Docker:

Die Anweisung EXPOSE informiert Docker darüber, dass der Container zur Laufzeit die angegebenen Netzwerkports abhört. EXPOSE macht die Ports des Containers für den Host nicht zugänglich. Dazu müssen Sie entweder das -p Flag zum Veröffentlichen eines -P oder das -P Flag zum Veröffentlichen aller freigelegten Ports verwenden. Sie können eine Portnummer freigeben und extern unter einer anderen Nummer veröffentlichen.

Beispiel:

In Ihrem Dockerfile:

EXPOSE 8765

Um auf diesen Port vom Host-Computer aus zuzugreifen, fügen Sie dieses Argument in Ihren docker run Befehl ein:

-p 8765:8765

ENTRYPOINT und CMD werden als Verb und Parameter betrachtet

Angenommen, Sie haben eine Dockerfile, die mit endet

ENTRYPOINT [ "nethogs"] CMD ["wlan0"]

wenn Sie dieses Bild mit einem erstellen

docker built -t inspector .

Starten Sie das mit einer solchen Docker-Datei erstellte Image mit einem Befehl wie

docker run -it --net=host --rm inspector

wird das Interface mit dem Namen wlan0 überwacht

Wenn Sie nun die Schnittstelle eth0 (oder wlan1 oder ra1 ...) überwachen möchten, müssen Sie Folgendes tun

docker run -it --net=host --rm inspector eth0

oder

docker run -it --net=host --rm inspector wlan1

Pushing und Ziehen eines Bildes an Docker Hub oder eine andere Registry

Lokal erstellte Bilder können an Docker Hub oder einen anderen Docker-Repo-Host, der als Registrierung bezeichnet wird, übertragen werden. Verwenden Sie die docker login , um sich bei einem vorhandenen Docker-Hub-Konto anzumelden.

docker login

Login with your Docker ID to push and pull images from Docker Hub.
If you don't have a Docker ID, head over to https://hub.docker.com to create one.

Username: cjsimon
Password:
Login Succeeded

Durch Angabe eines Servernamens kann eine andere Docker-Registry verwendet werden. Dies funktioniert auch für private oder selbst gehostete Registries. Darüber hinaus ist die Verwendung eines externen Speichers für Berechtigungsnachweise zur Sicherheit möglich.

docker login quay.io

Sie können dann Bilder markieren und in die Registrierung verschieben, bei der Sie angemeldet sind. Ihr Repository muss als server/username/reponame:tag . Das Auslassen des Servers ist standardmäßig auf Docker Hub festgelegt. (Die Standardregistrierung kann nicht in einen anderen Anbieter geändert werden, und es ist nicht geplant , diese Funktion zu implementieren.)

docker tag mynginx quay.io/cjsimon/mynginx:latest

Verschiedene Tags können verwendet werden, um verschiedene Versionen oder Zweige desselben Bildes darzustellen. Ein Bild mit mehreren verschiedenen Tags zeigt jedes Tag im selben Repo an.

Verwenden Sie docker images , um eine Liste installierter Images anzuzeigen, die auf Ihrem lokalen Computer installiert sind, einschließlich des neu gekennzeichneten Images. Verwenden Sie dann Push, um es in die Registry hochzuladen, und ziehen Sie, um das Bild herunterzuladen.

docker push quay.io/cjsimon/mynginx:latest

Alle Tags eines Bildes können durch Angabe der Option -a abgerufen werden

docker pull quay.io/cjsimon/mynginx:latest

Erstellen mit einem Proxy

Oft , wenn ein Bild Docker Gebäude enthält die Dockerfile Anweisungen , die Programme ausführt Ressourcen aus dem Internet zu holen ( wget zum Beispiel ein Programm binären Build auf GitHub zum Beispiel ziehen).

Es ist möglich, Docker anzuweisen, festgelegte Umgebungsvariablen zu übergeben, damit solche Programme diese Abrufe über einen Proxy durchführen:

$ docker build --build-arg http_proxy=http://myproxy.example.com:3128 \
               --build-arg https_proxy=http://myproxy.example.com:3128 \
               --build-arg no_proxy=internal.example.com \
               -t test .

build-arg sind Umgebungsvariablen, die nur zur Erstellungszeit verfügbar sind.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow