0% ont trouvé ce document utile (0 vote)
7 vues18 pages

Guide complet sur le Dockerfile et ses instructions

Le document présente le processus de création d'images Docker à travers un Dockerfile, qui contient des instructions pour installer et configurer des logiciels dans des conteneurs. Il explique diverses instructions comme FROM, RUN, ADD, COPY, ENTRYPOINT, CMD, LABEL, ENV, WORKDIR, EXPOSE et ARG, chacune ayant des fonctions spécifiques dans la construction d'images. Des exemples pratiques illustrent l'utilisation de ces instructions pour construire et exécuter des conteneurs Docker.

Transféré par

Øssama Ajbli
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
7 vues18 pages

Guide complet sur le Dockerfile et ses instructions

Le document présente le processus de création d'images Docker à travers un Dockerfile, qui contient des instructions pour installer et configurer des logiciels dans des conteneurs. Il explique diverses instructions comme FROM, RUN, ADD, COPY, ENTRYPOINT, CMD, LABEL, ENV, WORKDIR, EXPOSE et ARG, chacune ayant des fonctions spécifiques dans la construction d'images. Des exemples pratiques illustrent l'utilisation de ces instructions pour construire et exécuter des conteneurs Docker.

Transféré par

Øssama Ajbli
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

M242_1 Virtualisation et conteneurisation

Dr Oussama SMIMITE
[Link]@[Link]
Le processus de build Docker
Exemple de Dockerfile

FROM debian:latest
RUN apt update && apt install -y htop
CMD ['sleep 1000']

La commande pour construire l’image est :


docker build [-t tag] [-f dockerfile] <build_context>

Exemple :
docker build -t mondebian .
Le Dockerfile est un fichier procédural qui permet de décrire
l’installation d’un logiciel (la configuration d’un container) en enchaînant
des instructions Dockerfile .
Dockerfile - les Instructions

Instruction FROM
L’image de base à partir de laquelle est construite l’image actuelle.

FROM ubuntu:22.04
FROM alpine:3.5
FROM busybox
Dockerfile - les Instructions

Instruction RUN

Permet de lancer une commande shell (installation, configuration).


RUN apt update && apt install -y htop
RUN apt-get install -y nodejs
Dockerfile - les Instructions

Instruction ADD

Permet d’ajouter des fichier depuis le contexte de build à l’intérieur du conteneur.


Généralement utilisé pour ajouter le code du logiciel en cours de développement et sa
configuration au conteneur.

ADD <src> … <dest>


ADD /source/file/path /destination/path
ADD [Link] /destination/path
ADD [Link] /temp
Dockerfile - les Instructions

Instruction COPY

Contrairement à la commande ADD , COPY n'a qu'une seule fonction assignée. Son rôle est de
dupliquer les fichiers/répertoires dans un emplacement spécifié dans leur format existant .

COPY <src> … <dest>


COPY /source/file/path /destination/path
Dockerfile - les Instructions

Instruction ENTRYPOINT et CMD

Pour faire simple ces deux mots-clés exécutent une commande lorsque que le conteneur
est lancé .
Dockerfile - les Instructions
ENTRYPOINT
FROM celtak/ubuntu-ping-ip
RUN apt-get update
RUN apt-get install -y nodejs
ENTRYPOINT ["node", "-v"]

docker build -t ubuntu_nodejs_ENT .

Maintenant, lançons le conteneur

docker run --rm ubuntu_nodejs_ENT


v8.10.0
# La version de [Link] installé.

Ajouter ENTRYPOINT ["node", "-v"] équivaut à demander à Docker de lancer la commande


node -v après la création de notre conteneur.
Dockerfile - les Instructions

CMD
Modifions le Dockerfile et remplaçons ENTRYPOINT par CMD.

FROM celtak/ubuntu-ping-ip
RUN apt-get update
RUN apt-get install -y nodejs
CMD ["node", "-v"]

Construisons l'image correspondante.

docker build -t ubuntu_nodejs_CMD .

Enfin lançons un conteneur.

docker run --rm ubuntu_nodejs_CMD

v8.10.0
Dockerfile - les Instructions
Différence entre ENTRYPOINT et CMD
docker run --rm ubuntu_nodejs_ENT node -h
# ENTRYPOINT
v8.10.0
docker run --rm ubuntu_nodejs_CMD node -h
# CMD
NODE_NO_WARNINGS set to 1 to silence process warnings
NODE_NO_HTTP2 set to 1 to suppress the http2 module
NODE_OPTIONS set CLI options in the environment
via a space-separated list
NODE_PATH ':'-separated list of directories
prefixed to the module search path
NODE_PENDING_DEPRECATION set to 1 to emit pending deprecation
warnings
NODE_REPL_HISTORY path to the persistent REPL history
file
NODE_REDIRECT_WARNINGS write warnings to path instead of
stderr
OPENSSL_CONF load OpenSSL configuration from file

Documentation can be found at [Link]


Dockerfile - les Instructions

Utiliser les deux mot-clés ENTRYPOINT et CMD

FROM celtak/ubuntu-ping-ip
RUN apt-get update
RUN apt-get install -y nodejs
ENTRYPOINT ["node"]
CMD ["-v"]
Dockerfile - les Instructions

LABEL
Le LABEL ajoute des métadonnées à notre image.

L'utilisation est simple. Il suffit d'utiliser une clé et une valeur.

Nous allons modifier notre Dockefile.

FROM celtak/ubuntu-ping-ip
RUN apt-get update
RUN apt-get install -y nodejs
LABEL description="Une image pour tester"
LABEL version="1.0.0"

Pour afficher les métadonnées on utilise :docker inspect

docker build -t ubuntu_nodejs_label .


docker inspect ubuntu_nodejs_label
Dockerfile - les Instructions

ENV
L'instruction ENV permet de gérer des variables d'environnement.
Ajoutons une variable d'environnement.
FROM celtak/ubuntu-ping-ip

RUN apt-get update


RUN apt-get install -y nodejs
ENV PRENOM="Polytechnique"
Le nom de la variable est PRENOM et son contenu est Polytechnique.
Construisons notre image : docker build -t ubuntu_nodejs_ENV .

Maintenant, on va lancer un conteneur : docker run --rm -it ubuntu_nodejs_ENV


Nous sommes désormais dans le conteneur. Pour vérifier que notre variable est bien présente, utilisez la
commande printenv. : printenv PRENOM

Le résultat est le suivant : Polytechnique


Dockerfile - les Instructions

WORKDIR
Pour bien comprendre son fonctionnement, modifions le Dockerfile et ajoutons WORKDIR.
FROM celtak/ubuntu-ping-ip

RUN apt-get update


RUN apt-get install -y nodejs
WORKDIR /bin

Par conséquent, au lancement du conteneur, nous serons positionner dans le dossier /bin.
Pareillement les instructions RUN, ENTRYPOINT, COPY, ADD et CMD seront exécutées à partir de
répertoire sélectionné dans WORKDIR.
Dockerfile - les Instructions

EXPOSE
Le mot-clé EXPOSE permet d'indiquer dans quel port le conteneur écoute. Mais ce n'est
qu'une indication sous forme de documentation. Pour mapper réellement un ou plusieurs
ports, il faut utiliser l'option -p.
FROM ubuntu:14.04
RUN apt-get update

RUN apt-get -y install apache2


EXPOSE 80
ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
docker run --name myapache -d -p 80:80 apache:V1
Dockerfile - les Instructions

ARG
ARG nom=Test1
RUN echo $nom
Pour faire simple, ARG est une variable disponible dans le Dockerfile (elle ne le sera pas dans le
conteneur).
Elle est utilisée lors de la création de l'image. À ce moment plusieurs choses seront exécutés. La ligne
RUN echo $nom affichera le contenu de la variable nom grâce à l'instruction ARG nom=test1.

docker build -t ubuntu_nodejs_arg .


Nous pouvons changer le contenu de la variable lors de la création de l'image.
docker build --build-arg nom=test2 -t ubuntu_nodejs_arg .
La documentation de Docker nous encourage à ne pas à utiliser ARG pour y insérer des données
sensibles comme des mots de passes dans des variables. Car ces données seront récupérables avec
un docker history <image>.

Vous aimerez peut-être aussi