Recherche…


Paramètres

Paramètre Détails
--tirer S'assure que l'image de base ( FROM ) est à jour avant de construire le reste du fichier Dockerfile.

Construire une image à partir d'un fichier Dockerfile

Une fois que vous avez un fichier Docker, vous pouvez créer une image à l'aide de docker build . La forme de base de cette commande est la suivante:

docker build -t image-name path

Si votre fichier Dockerfile n'est pas nommé Dockerfile , vous pouvez utiliser l'indicateur -f pour donner le nom du fichier Dockerfile à générer.

docker build -t image-name -f Dockerfile2 .

Par exemple, pour créer une image nommée dockerbuild-example:1.0.0 partir d'un Dockerfile dans le répertoire de travail en cours:

$ ls
Dockerfile Dockerfile2

$ docker build -t dockerbuild-example:1.0.0 .

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

Reportez-vous à la documentation relative à l' utilisation de la docker build pour plus d'options et de paramètres.

Une erreur courante est de créer un fichier Dockerfile dans le répertoire personnel de l'utilisateur ( ~ ). C'est une mauvaise idée car lors de la docker build -t mytag . ce message apparaîtra longtemps:

Contexte de téléchargement

La cause est le démon docker qui tente de copier tous les fichiers de l'utilisateur (à la fois le répertoire de base et ses sous-répertoires). Évitez cela en spécifiant toujours un répertoire pour le fichier Docker.

L'ajout d'un fichier .dockerignore répertoire de construction est une bonne pratique . Sa syntaxe est similaire à .gitignore fichiers .gitignore et s'assurera que seuls les fichiers et répertoires .gitignore sont téléchargés en tant que contexte de la génération.

Un simple Dockerfile

FROM node:5

La directive FROM spécifie une image à partir de laquelle Toute référence d'image valide peut être utilisée.

WORKDIR /usr/src/app

La directive WORKDIR définit le répertoire de travail actuel dans le conteneur, ce qui équivaut à exécuter cd dans le conteneur. (Remarque: RUN cd ne changera pas le répertoire de travail en cours.)

RUN npm install cowsay knock-knock-jokes

RUN exécute la commande donnée à l'intérieur du conteneur.

COPY cowsay-knockknock.js ./

COPY copie le fichier ou le répertoire spécifié dans le premier argument à partir du contexte de génération (le path transmis au docker build path ) vers l'emplacement du conteneur spécifié par le deuxième argument.

CMD node cowsay-knockknock.js

CMD spécifie une commande à exécuter lorsque l'image est exécutée et qu'aucune commande n'est donnée. Il peut être remplacé en transmettant une commande à docker run .

Il existe de nombreuses autres instructions et options. voir la référence Dockerfile pour une liste complète.

Différence entre ENTRYPOINT et CMD

Il existe deux directives Dockerfile pour spécifier quelle commande exécuter par défaut dans les images construites. Si vous spécifiez uniquement CMD alors docker exécutera cette commande en utilisant le ENTRYPOINT par défaut, à savoir /bin/sh -c . Vous pouvez remplacer soit le point d’entrée, soit la commande lorsque vous démarrez l’image construite. Si vous spécifiez les deux, alors ENTRYPOINT spécifie l'exécutable de votre processus de conteneur et CMD sera fourni comme paramètre de cet exécutable.

Par exemple, si votre Dockerfile contient

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

Vous utilisez ensuite la directive ENTRYPOINT par défaut de /bin/sh -c et exécutez /bin/date avec /bin/date d' /bin/date par défaut. La commande de votre processus de conteneur sera /bin/sh -c /bin/date . Une fois que vous exécutez cette image, elle affichera par défaut la date actuelle

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

Vous pouvez remplacer CMD sur la ligne de commande, auquel cas il exécutera la commande que vous avez spécifiée.

$ docker run test /bin/hostname
bf0274ec8820

Si vous spécifiez une directive ENTRYPOINT , Docker utilisera cet exécutable et la directive CMD spécifie le ou les paramètres par défaut de la commande. Donc, si votre Dockerfile contient:

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

Alors en courant ça va produire

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

Vous pouvez fournir différents paramètres si vous le souhaitez, mais ils seront tous exécutés /bin/echo

$ docker run test Hi
Hi

Si vous souhaitez remplacer le point d'entrée répertorié dans votre fichier Docker (par exemple, si vous souhaitez exécuter une commande différente de echo dans ce conteneur), vous devez spécifier le paramètre --entrypoint sur la ligne de commande:

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

Généralement, vous utilisez la directive ENTRYPOINT pour pointer vers votre application principale que vous souhaitez exécuter et CMD vers les paramètres par défaut.

Exposer un port dans le fichier Dockerfile

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

De la documentation de Docker:

L'instruction EXPOSE informe Docker que le conteneur écoute les ports réseau spécifiés au moment de l'exécution. EXPOSE ne rend pas les ports du conteneur accessibles à l'hôte. Pour ce faire, vous devez utiliser l' -p pour publier une plage de ports ou l' -P pour publier tous les ports exposés. Vous pouvez exposer un numéro de port et le publier en externe sous un autre numéro.

Exemple:

À l'intérieur de votre fichier Docker:

EXPOSE 8765

Pour accéder à ce port depuis la machine hôte, incluez cet argument dans votre commande d' docker run :

-p 8765:8765

ENTRYPOINT et CMD vus sous forme de verbe et de paramètre

Supposons que vous avez un fichier Dockerfile se terminant par

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

si vous construisez cette image avec un

docker built -t inspector .

lancer l'image construite avec un tel Dockerfile avec une commande telle que

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

, nethogs surveillera l'interface nommée wlan0

Maintenant, si vous voulez surveiller l'interface eth0 (ou wlan1, ou ra1 ...), vous ferez quelque chose comme

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

ou

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

Pousser et tirer une image vers Docker Hub ou un autre registre

Les images créées localement peuvent être transférées vers Docker Hub ou tout autre hôte repo docker, appelé registre. Utilisez la docker login au docker login pour vous connecter à un compte docker hub existant.

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 registre de docker différent peut être utilisé en spécifiant un nom de serveur. Cela fonctionne également pour les registres privés ou auto-hébergés. De plus, l'utilisation d'un magasin de données d'identification externe pour la sécurité est possible.

docker login quay.io

Vous pouvez ensuite baliser et transférer des images vers le registre auquel vous êtes connecté. Votre référentiel doit être spécifié en tant que server/username/reponame:tag . Omettre le serveur par défaut est actuellement Docker Hub. (Le registre par défaut ne peut pas être remplacé par un autre fournisseur et il n'est pas prévu de l'implémenter.)

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

Différentes balises peuvent être utilisées pour représenter différentes versions, ou branches, de la même image. Une image avec plusieurs balises différentes affichera chaque balise dans le même repo.

Utilisez les docker images pour afficher la liste des images installées sur votre ordinateur local, y compris votre nouvelle image. Puis, appuyez sur pour le télécharger dans le registre et tirez pour télécharger l'image.

docker push quay.io/cjsimon/mynginx:latest

Toutes les balises d'une image peuvent être extraites en spécifiant l'option -a

docker pull quay.io/cjsimon/mynginx:latest

Construire en utilisant un proxy

Souvent , lors de la construction d' une image Docker, le Dockerfile contient des instructions qui exécute des programmes pour aller chercher des ressources de l'Internet ( wget par exemple pour tirer une version binaire de programme sur GitHub exemple).

Il est possible d'indiquer à Docker de transmettre les variables d'environnement set set afin que ces programmes effectuent ces récupérations via 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 sont des variables d'environnement disponibles uniquement au moment de la construction.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow