Open NizarSteria opened 2 years ago
Bonnes pratiques docker Partir d'une image officielle ou créer en interne Utiliser un USER nobody pour ne pas run le service avec des privilèges root Mettre des instructioins LABEL pour la traçabilité de l'image Limiter les layers pour limiter la taille de l'image et accélérer la performance de build Limiter la taille de l'image Utiliser .dockerignore dans le projet avec le Dockerfile Optimiser l'utilisation du cache en mettant les instructions qui auront le moins de changements en premier. Mettre l'instruction EXPOSE si le service est en écoute sur un port Pour copier simplement des fichiers dans l'image utiliser l'instruction COPY plutôt que ADD. N'utiliser ADD que si nécessaire. Si utilisation de ENTRYPOINT et CMD, définir l'entrée du process dans ENTRYPOINT et des paramètres de commandes par défaut dans CMD. Si l'instruction ONBUILD est utilisée, le tag de l'image doit l'indiquer. Ex: ruby:2.0-onbuild
Utiliser le USER nobody
Mettre l'instruction USER à la fin du Dockerfile pour ne pas switcher de USER si besoin du root pour les installations.
L'app doit avoir pour owner le USER nobody.
Dockerfile - docker version >= 17.09.0
FROM ....
# Install App requirements
COPY --chown=65534:65534 . /src
USER nobody
ENTRYPOINT ["..."]
Dockerfile - docker version < 17.09.0
FROM ....
# Install App requirements
COPY . /src
RUN chown -R 65534:65534 /src
USER nobody
ENTRYPOINT ["..."]
Traçabilité de l'image Pour l'exploitation, il est important d'avoir au minimum les informations suivantes sur une image :
On doit être capable de voir l'image et la version de l'image qui a produit un Layer dans l'image finale et connaitre l'équipe qui est en charge de cette image.
Pour que les labels ne soient pas remplacés par une autre valeur dans un Dockerfile "enfant", le nom du label doit contenir le nom du projet et le nom de l'image. L'image doit être composée d'au moins ces 2 labels :
Dockerfile - Labels
FROM ....
# Install App
LABEL project.app.version=1.0.2-fde2a84f \
project.app.contact=dev@docker.com
Limiter les Layers
FROM docker-scratch-intranet.registry.saas.entity.gca/npm:latest as build
WORKDIR /app
# Get project dependencies
COPY package.json package-lock.json /app/
RUN npm install
# Copy app sources
COPY . /app
# Build app
RUN npm build
FROM docker-remote.registry.saas.societe.gca/nginx:1.17-alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
Limiter la taille de l'image
Dockerfile - Get archive
FROM ...
RUN mkdir -p /usr/src/things \
&& curl -SL https://example.com/big.tar.xz | tar -xJC /usr/src/things \
&& make -C /usr/src/things
1. Créer une image docker
Build de l'image La création des images sont à faire sur un poste développeur ou sur une CI à partir d'un Dockerfile et un client docker en version minimal 18.09.5.
Ce Dockerfile peut référencer tous types d'images de base (alpine, debian, ubuntu, ...).
Ce Dockerfile doit respecter [les bonnes pratiques] (Bonnes+pratiques).
Le nom de l'image doit être de la forme
Ajouter Dockerfile : image nginx