Ricerca…


Parametri

Parametro Dettagli
--Tirare Garantisce che l'immagine di base ( FROM ) sia aggiornata prima di creare il resto del Dockerfile.

Costruire un'immagine da un Dockerfile

Una volta che hai un Dockerfile, puoi costruirne un'immagine usando la docker build . La forma base di questo comando è:

docker build -t image-name path

Se il tuo Dockerfile non è denominato Dockerfile , puoi usare il flag -f per dare il nome del Dockerfile da compilare.

docker build -t image-name -f Dockerfile2 .

Ad esempio, per creare un'immagine denominata dockerbuild-example:1.0.0 da un Dockerfile nella directory di lavoro corrente:

$ ls
Dockerfile Dockerfile2

$ docker build -t dockerbuild-example:1.0.0 .

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

Vedere la documentazione di utilizzo della docker build per ulteriori opzioni e impostazioni.

Un errore comune è la creazione di un Dockerfile nella directory home dell'utente ( ~ ). Questa è una cattiva idea perché durante la docker build -t mytag . questo messaggio apparirà per molto tempo:

Caricamento del contesto

La causa è il daemon docker che tenta di copiare tutti i file dell'utente (sia la directory home che le sottodirectory). Evita questo specificando sempre una directory per il Dockerfile.

Aggiungere un file .dockerignore alla directory di build è una buona pratica . La sua sintassi è simile ai file .gitignore e farà in modo che solo i file e le directory desiderati vengano caricati come contesto del build.

Un semplice Dockerfile

FROM node:5

La direttiva FROM specifica un'immagine da cui iniziare. È possibile utilizzare qualsiasi riferimento di immagine valido.

WORKDIR /usr/src/app

La direttiva WORKDIR imposta la directory di lavoro corrente all'interno del contenitore, equivalente all'esecuzione di cd all'interno del contenitore. (Nota: il RUN cd non cambierà la directory di lavoro corrente).

RUN npm install cowsay knock-knock-jokes

RUN esegue il comando specificato all'interno del contenitore.

COPY cowsay-knockknock.js ./

COPY copia il file o la directory specificati nel primo argomento dal contesto di compilazione (il path passato al docker build path ) nella posizione nel contenitore specificato dal secondo argomento.

CMD node cowsay-knockknock.js

CMD specifica un comando da eseguire quando viene eseguita l'immagine e non viene dato alcun comando. Può essere sovrascritto passando un comando alla docker run .

Ci sono molte altre istruzioni e opzioni; vedere il riferimento Dockerfile per un elenco completo.

Differenza tra ENTRYPOINT e CMD

Esistono due direttive Dockerfile per specificare quale comando eseguire per impostazione predefinita nelle immagini create. Se si specifica solo CMD finestra mobile eseguirà tale comando utilizzando il comando ENTRYPOINT predefinito, che è /bin/sh -c . È possibile sovrascrivere uno o entrambi il punto di accesso e / o il comando quando si avvia l'immagine costruita. Se si specificano entrambi, ENTRYPOINT specifica l'eseguibile del processo contenitore e CMD verrà fornito come parametri di tale eseguibile.

Ad esempio se il tuo Dockerfile contiene

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

Quindi si utilizza la direttiva ENTRYPOINT predefinita di /bin/sh -c e in esecuzione /bin/date con quel punto di accesso predefinito. Il comando del processo del contenitore sarà /bin/sh -c /bin/date . Una volta eseguita questa immagine, per impostazione predefinita verrà stampata la data corrente

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

È possibile eseguire l'override di CMD sulla riga di comando, nel qual caso verrà eseguito il comando specificato.

$ docker run test /bin/hostname
bf0274ec8820

Se si specifica una direttiva ENTRYPOINT , Docker utilizzerà quell'eseguibile e la direttiva CMD specifica i parametri predefiniti del comando. Quindi se il tuo Dockerfile contiene:

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

Quindi eseguirlo produrrà

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

È possibile fornire diversi parametri se lo si desidera, ma verranno eseguiti tutti /bin/echo

$ docker run test Hi
Hi

Se si desidera sovrascrivere il punto di accesso elencato nel file Docker (ovvero se si desidera eseguire un comando diverso da echo in questo contenitore), è necessario specificare il parametro --entrypoint sulla riga di comando:

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

In genere si utilizza la direttiva ENTRYPOINT per puntare all'applicazione principale che si desidera eseguire e CMD ai parametri predefiniti.

Esporre una porta nel Dockerfile

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

Dalla documentazione di Docker:

L'istruzione EXPOSE informa Docker che il contenitore è in ascolto sulle porte di rete specificate in fase di runtime. EXPOSE non rende accessibili le porte del contenitore all'host. Per fare ciò, è necessario utilizzare il flag -p per pubblicare un intervallo di porte o il flag -P per pubblicare tutte le porte esposte. È possibile esporre un numero di porta e pubblicarlo esternamente con un altro numero.

Esempio:

Dentro il tuo Dockerfile:

EXPOSE 8765

Per accedere a questa porta dal computer host, includere questo argomento nel comando di docker run :

-p 8765:8765

ENTRYPOINT e CMD visti come verbo e parametro

Supponiamo di avere un Dockerfile che termina con

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

se costruisci questa immagine con a

docker built -t inspector .

lanciare l'immagine creata con un Dockerfile come tale con un comando come

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

, nethogs monitorerà l'interfaccia chiamata wlan0

Ora se vuoi monitorare l'interfaccia eth0 (o wlan1, o ra1 ...), farai qualcosa di simile

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

o

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

Spingendo e tirando un'immagine nell'hub Docker o in un altro registro

Le immagini create localmente possono essere trasferite su Docker Hub o su qualsiasi altro host di repository docker, noto come registro. Utilizzare l' docker login per accedere a un account hub docker esistente.

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

Un diverso registro docker può essere utilizzato specificando un nome server. Questo funziona anche per i registri privati ​​o self-hosted. Inoltre, è possibile utilizzare un archivio di credenziali esterne per la sicurezza.

docker login quay.io

È quindi possibile contrassegnare e inviare immagini al registro a cui si è effettuato l'accesso. Il tuo repository deve essere specificato come server/username/reponame:tag . L'omissione del server è attualmente impostata su Docker Hub. (Il registro predefinito non può essere cambiato con un altro provider e non ci sono piani per implementare questa funzione.)

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

Tag diversi possono essere usati per rappresentare diverse versioni, o rami, della stessa immagine. Un'immagine con più tag diversi mostrerà ogni tag nello stesso repository.

Utilizza le docker images per visualizzare un elenco di immagini installate installate sul computer locale, inclusa l'immagine appena taggata. Quindi utilizzare push per caricarlo nel registro e tirare per scaricare l'immagine.

docker push quay.io/cjsimon/mynginx:latest

Tutti i tag di un'immagine possono essere estratti specificando l'opzione -a

docker pull quay.io/cjsimon/mynginx:latest

Costruire usando un proxy

Spesso durante la creazione di un'immagine Docker, il Dockerfile contiene istruzioni che eseguono programmi per recuperare risorse da Internet (per esempio wget per estrarre un build binario del programma su GitHub).

È possibile indicare a Docker di passare le variabili di ambiente set set in modo che tali programmi eseguano tali recuperi attraverso un 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 sono variabili d'ambiente disponibili solo al momento della compilazione.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow