Sök…


parametrar

Parameter detaljer
--dra Se till att basbilden ( FROM ) är uppdaterad innan du bygger resten av Dockerfile.

Bygga en bild från en Dockerfile

När du har en Dockerfile kan du bygga en bild från den med docker build . Den grundläggande formen för detta kommando är:

docker build -t image-name path

Om din Dockerfile inte heter Dockerfile , kan du använda flaggan -f att ge namnet på Dockerfile att bygga.

docker build -t image-name -f Dockerfile2 .

För att till exempel bygga en bild med namnet dockerbuild-example:1.0.0 från en Dockerfile i den aktuella arbetskatalogen:

$ ls
Dockerfile Dockerfile2

$ docker build -t dockerbuild-example:1.0.0 .

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

Se docker build användardokumentationen för fler alternativ och inställningar.

Ett vanligt misstag är att skapa en Dockerfile i användarkatalogen ( ~ ). Det här är en dålig idé eftersom under docker build -t mytag . detta meddelande kommer att visas under lång tid:

Överför sammanhang

Orsaken är dockningsdemonet som försöker kopiera alla användarens filer (både hemkatalogen och dess underkataloger). Undvik detta genom att alltid ange en katalog för Dockerfile.

Att lägga till en .dockerignore fil i build-katalogen är en bra praxis . Syntaxen liknar .gitignore filer och kommer att se till att bara önskade filer och kataloger laddas upp som sammanhanget för build.

En enkel Dockerfile

FROM node:5

FROM direktivet anger en bild att börja med. Varje giltig bildreferens kan användas.

WORKDIR /usr/src/app

WORKDIR direktivet sätter den aktuella arbetskatalogen inuti behållaren, motsvarande att köra cd inuti behållaren. (Obs: RUN cd kommer inte att ändra den aktuella arbetskatalogen.)

RUN npm install cowsay knock-knock-jokes

RUN kör det givna kommandot inne i behållaren.

COPY cowsay-knockknock.js ./

COPY kopierar den fil eller katalog som anges i det första argumentet från bygg sammanhang ( path vidare till docker build path ) till den plats i behållaren anges av det andra argumentet.

CMD node cowsay-knockknock.js

CMD anger ett kommando som ska köras när bilden körs och inget kommando ges. Det kan åsidosättas genom att skicka ett kommando till docker run .

Det finns många andra instruktioner och alternativ; se Dockerfile-referensen för en komplett lista.

Skillnaden mellan ENTRYPOINT och CMD

Det finns två Dockerfile direktiv som anger vilket kommando som ska köras som standard i inbyggda bilder. Om du bara anger CMD kommer dockaren att köra det kommandot med standard ENTRYPOINT , som är /bin/sh -c . Du kan åsidosätta antingen eller både startpunkten och / eller kommandot när du startar den inbyggda bilden. Om du anger båda, anger ENTRYPOINT körbara för din containerprocess, och CMD kommer att levereras som parametrarna för den körbara.

Till exempel om din Dockerfile innehåller

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

Sedan använder du standard ENTRYPOINT direktivet för /bin/sh -c och kör /bin/date med det standardinföringspunktet. Kommandot för din containerprocess är /bin/sh -c /bin/date . När du kör den här bilden kommer den som standard att skriva ut det aktuella datumet

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

Du kan åsidosätta CMD på kommandoraden, i vilket fall det kommer att köra det kommando du har angett.

$ docker run test /bin/hostname
bf0274ec8820

Om du anger ett ENTRYPOINT direktiv kommer Docker att använda det körbara, och CMD direktivet anger kommandans standardparameter. Så om din Dockerfile innehåller:

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

Sedan kör det kommer att producera

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

Du kan tillhandahålla olika parametrar om du vill, men alla kör /bin/echo

$ docker run test Hi
Hi

Om du vill åsidosätta startpunkten som listas i din Dockerfile (dvs. om du vill köra ett annat kommando än echo i den här behållaren) måste du ange parametern --entrypoint på kommandoraden:

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

Generellt använder du ENTRYPOINT direktivet för att peka på ditt huvudapplikation du vill köra och CMD till standardparametrarna.

Att exponera en hamn i Dockerfile

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

Från Dockers dokumentation:

EXPOSE instruktionen informerar Docker att behållaren lyssnar på de angivna nätverksportarna under körning. EXPOSE gör inte portarna i behållaren tillgängliga för värden. För att göra det måste du använda antingen -p flaggan för att publicera ett antal portar eller -P flaggan för att publicera alla exponerade portar. Du kan exponera ett portnummer och publicera det externt under ett annat nummer.

Exempel:

Inuti din Dockerfile:

EXPOSE 8765

För att komma åt denna port från värdmaskinen, inkludera detta argument i ditt docker run kommando:

-p 8765:8765

ENTRYPOINT och CMD ses som verb och parameter

Anta att du har en Dockerfile som slutar med

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

om du bygger den här bilden med en

docker built -t inspector .

starta bilden byggd med en sådan Dockerfile med ett kommando som

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

, nethogs kommer att övervaka gränssnittet som heter wlan0

Om du nu vill övervaka gränssnittet eth0 (eller wlan1 eller ra1 ...) kommer du att göra något liknande

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

eller

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

Tryck och dra en bild till Docker Hub eller ett annat register

Lokalt skapade bilder kan skjutas till Docker Hub eller någon annan dockningsrepo-värd, känd som ett register. Använd docker login att logga in på ett befintligt docker-hubkonto.

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

Ett annat dockningsregister kan användas genom att ange ett servernamn. Detta fungerar också för privata eller självhostade register. Vidare är det möjligt att använda en extern referenslager för säkerhet.

docker login quay.io

Du kan sedan tagga och skjuta bilder till det register som du är inloggad på. Ditt arkiv måste anges som server/username/reponame:tag . Att utelämna servern är för närvarande standard för Docker Hub. (Standardregistret kan inte ändras till en annan leverantör, och det finns inga planer för att implementera den här funktionen.)

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

Olika taggar kan användas för att representera olika versioner eller grenar av samma bild. En bild med flera olika taggar visar varje tagg i samma repo.

Använd docker images att se en lista över installerade bilder installerade på din lokala maskin, inklusive din ny taggade bild. Använd sedan tryck för att ladda upp den till registret och dra för att ladda ner bilden.

docker push quay.io/cjsimon/mynginx:latest

Alla taggar på bilder kan dras genom att ange alternativet -a

docker pull quay.io/cjsimon/mynginx:latest

Bygga med hjälp av en proxy

Ofta när man bygger en Docker image, Dockerfile innehåller anvisningar som kör program för att hämta resurser från Internet ( wget till exempel att dra ett program binär bygga på GitHub till exempel).

Det är möjligt att instruera Docker att passera inställda miljövariabler så att sådana program utför dessa hämtningar genom en proxy:

$ 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 är miljövariabler som endast är tillgängliga vid byggtid.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow