Zoeken…


parameters

Parameter Details
--Trekken Zorgt ervoor dat de basis afbeelding ( FROM ) is up-to-date voor de bouw van de rest van de Dockerfile.

Een afbeelding samenstellen uit een Dockerfile

Zodra u een Docker-bestand hebt, kunt u er een afbeelding van maken met behulp van docker build . De basisvorm van dit commando is:

docker build -t image-name path

Als uw Dockerfile niet de naam Dockerfile , kunt u de vlag -f gebruiken om de naam te geven van het te bouwen Dockerfile.

docker build -t image-name -f Dockerfile2 .

Om bijvoorbeeld een afbeelding met de naam dockerbuild-example:1.0.0 te bouwen dockerbuild-example:1.0.0 vanuit een Dockerfile in de huidige werkmap:

$ ls
Dockerfile Dockerfile2

$ docker build -t dockerbuild-example:1.0.0 .

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

Raadpleeg de gebruiksdocumentatie van de docker build voor meer opties en instellingen.

Een veel voorkomende fout is het maken van een Docker-bestand in de thuismap van de gebruiker ( ~ ). Dit is een slecht idee omdat tijdens het docker build -t mytag . dit bericht zal lang verschijnen:

Context uploaden

De oorzaak is dat de docker-daemon alle bestanden van de gebruiker probeert te kopiëren (zowel de thuismap als de bijbehorende submappen). Vermijd dit door altijd een map op te geven voor het Docker-bestand.

Het is een goede gewoonte om een .dockerignore bestand aan de build-directory toe te voegen. De syntaxis is vergelijkbaar met .gitignore bestanden en zorgt ervoor dat alleen gewenste bestanden en mappen worden geüpload als context van de build.

Een eenvoudige Dockerfile

FROM node:5

De FROM richtlijn specificeert een afbeelding om mee te beginnen. Elke geldige afbeeldingsreferentie kan worden gebruikt.

WORKDIR /usr/src/app

De WORKDIR richtlijn stelt de huidige werkmap in de container in, vergelijkbaar met het uitvoeren van cd in de container. (Opmerking: met RUN cd wordt de huidige werkmap niet gewijzigd.)

RUN npm install cowsay knock-knock-jokes

RUN voert de gegeven opdracht in de container uit.

COPY cowsay-knockknock.js ./

COPY kopieert het bestand of de map die in het eerste argument van de build context (de path toegevoerd aan docker build path ) om de locatie van de container die door het tweede argument.

CMD node cowsay-knockknock.js

CMD specificeert een opdracht om uit te voeren wanneer de afbeelding wordt uitgevoerd en er geen opdracht wordt gegeven. Het kan worden opgeheven door een opdracht door te geven aan docker run .

Er zijn veel andere instructies en opties; zie de Dockerfile-referentie voor een volledige lijst.

Verschil tussen ENTRYPOINT en CMD

Er zijn twee Dockerfile richtlijnen om op te geven welke opdracht standaard moet worden uitgevoerd in ingebouwde afbeeldingen. Als u alleen CMD opgeeft, voert ENTRYPOINT die opdracht uit met de standaard ENTRYPOINT , namelijk /bin/sh -c . U kunt het ingangspunt en / of het commando of beide overschrijven wanneer u de ingebouwde afbeelding start. Als u beide opgeeft, geeft ENTRYPOINT het uitvoerbare bestand van uw containerproces aan en wordt CMD geleverd als de parameters van dat uitvoerbare bestand.

Bijvoorbeeld als uw Dockerfile bevat

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

Dan gebruikt u de standaard ENTRYPOINT richtlijn van /bin/sh -c en voert u /bin/date met dat standaardinvoerpunt. Het commando van uw containerproces is /bin/sh -c /bin/date . Zodra u deze afbeelding uitvoert, wordt standaard de huidige datum afgedrukt

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

U kunt CMD op de opdrachtregel overschrijven. In dat geval wordt de opgegeven opdracht uitgevoerd.

$ docker run test /bin/hostname
bf0274ec8820

Als u een ENTRYPOINT instructie opgeeft, gebruikt Docker dat uitvoerbare bestand en geeft de CMD richtlijn de standaardparameter (s) van de opdracht op. Dus als uw Dockerfile bevat:

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

Dan zal het produceren

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

U kunt desgewenst verschillende parameters opgeven, maar deze worden allemaal uitgevoerd /bin/echo

$ docker run test Hi
Hi

Als u het in uw Dockerfile vermelde ingangspunt wilt overschrijven (dwz als u een andere opdracht dan echo in deze container wilt uitvoeren), moet u de parameter --entrypoint op de opdrachtregel opgeven:

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

Over het algemeen gebruikt u de ENTRYPOINT richtlijn om te verwijzen naar uw hoofdtoepassing die u wilt uitvoeren en CMD naar de standaardparameters.

Een poort in het Docker-bestand weergeven

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

Uit de documentatie van Docker:

De instructie EXPOSE informeert Docker dat de container tijdens runtime naar de opgegeven netwerkpoorten luistert. EXPOSE maakt de poorten van de container niet toegankelijk voor de host. Om dat te doen, moet u de vlag -p gebruiken om een reeks poorten te publiceren of de vlag -P om alle zichtbare poorten te publiceren. U kunt het ene poortnummer vrijgeven en extern publiceren onder een ander nummer.

Voorbeeld:

In uw Docker-bestand:

EXPOSE 8765

Om toegang te krijgen tot deze poort vanaf de hostmachine, neemt u dit argument op in uw docker run opdracht:

-p 8765:8765

ENTRYPOINT en CMD gezien als werkwoord en parameter

Stel dat u een Docker-bestand hebt dat eindigt op

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

als je deze afbeelding bouwt met een

docker built -t inspector .

start de afbeelding gebouwd met zo'n Dockerfile met een commando zoals

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

, zal nethogs de interface met de naam wlan0 bewaken

Als u nu de interface eth0 (of wlan1 of ra1 ...) wilt controleren, doet u zoiets

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

of

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

Een afbeelding naar een Docker Hub of een ander register duwen en trekken

Lokaal gemaakte afbeeldingen kunnen worden gepusht naar Docker Hub of een andere docker repo-host, bekend als een register. Gebruik docker login om u aan te melden bij een bestaand Docker Hub-account.

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

Een ander docker-register kan worden gebruikt door een servernaam op te geven. Dit werkt ook voor particuliere of zelf gehoste registers. Verder is het voor de veiligheid mogelijk om een externe referentieopslag te gebruiken.

docker login quay.io

U kunt vervolgens afbeeldingen taggen en pushen naar het register waarbij u bent aangemeld. Je repository moet worden opgegeven als server/username/reponame:tag . Het weglaten van de server is standaard de Docker Hub. (Het standaardregister kan niet worden gewijzigd in een andere provider en er zijn geen plannen om deze functie te implementeren.)

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

Verschillende tags kunnen worden gebruikt om verschillende versies of takken van dezelfde afbeelding weer te geven. Een afbeelding met meerdere verschillende tags zal elke tag in dezelfde repo weergeven.

Gebruik docker images om een lijst met geïnstalleerde afbeeldingen te zien die op uw lokale computer zijn geïnstalleerd, inclusief uw nieuw getagde afbeelding. Gebruik vervolgens push om het naar het register te uploaden en trek om de afbeelding te downloaden.

docker push quay.io/cjsimon/mynginx:latest

Alle tags van een afbeelding kunnen worden getrokken door de optie -a

docker pull quay.io/cjsimon/mynginx:latest

Bouwen met behulp van een proxy

Vaak als beeld Docker gebouw, de Dockerfile bevat instructies die loopt programma's om middelen te halen uit het Internet ( wget bijvoorbeeld om een programma binaire build trekken GitHub bijvoorbeeld).

Het is mogelijk om Docker te instrueren om ingestelde set omgevingsvariabelen door te geven, zodat dergelijke programma's die ophaalacties uitvoeren via een 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 zijn omgevingsvariabelen die alleen tijdens de build beschikbaar zijn.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow