# Dockerfile ## L'utilité Les Dockerfiles permettent de préparer la construction d'images Docker. Ainsi, c'est facile avec des Dockerfiles de partager des images et de créer plusieurs images avec les mêmes prérequis. ## Construction de l'image 1) Créez un répertoire par défault pour l'image. 2) Ouvrez Docker Quick Terminal. 3) Déplacez-vous dans le dossier que vous venez de créer. 4) Inscrivez ces commandes: 1) `docker build -t nom_image .` 2) `docker run -d -p 8080:80 --name nom_application nom_image` ## Instructions de base Les Dockerfiles contiennent des intructions pour créer une image. Voici les principales instructions: 1) `FROM` est toujours la première instruction. Elle indique l'image de base de votre Dockerfile. > `FROM alpine:3.4` 2) `COPY` sert à copier des fichiers du dossier actuel vers votre image. > `COPY . /usr/src/app` 3) `RUN` execute des commande shell pour la construction de l'image. On l'utilise alors beaucoup pour créer des images plus complexes. > `RUN apk update` 4) `CMD` indique plutôt quelles commandes seront éxecutées lorsque l'image sera éxecutée. > `CMD ["--help"]` -- Voici une bonne source pour comprendre les différentes instructions: https://takacsmark.com/dockerfile-tutorial-by-example-dockerfile-best-practices-2018/#dockerfile-key-instructions-best-practices ## Envoyer une image sur le Docker Hub 1) Allez sur le site de [Docker Hub](https://hub.docker.com/). 2) Connectez-vous avec le compte que vous avez utilisé pour installer Docker. 3) Cliquez sur "Create Repository". 4) Écrivez le nom de votre image et sa description. 5) Inscrivez ce code dans Docker Quick Terminal: `docker tag nom_image:latest nom_utilisateur/nom_image:latest` 6) Connectez-vous: `docker login -u nom_utilisateur` 7) Envoyer votre image dans Docker Hub: `docker push nom_utilisateur/nom_image:latest​` ## Recommandations * Créez le plus possible des conteneurs éphémères. * N'installez pas les paquets inutiles. * Créez plusieurs conteneurs dans une application. * Minimisez le nombre de couches d'instruction. * C'est bien de structurer les arguments multilignes en groupes, mais c'est mieux en ordre alphabétique.