FatmaAouissaoui / ProjectAngular

0 stars 1 forks source link

Add Dockerfile #1

Open NizarSteria opened 2 years ago

NizarSteria commented 2 years ago

Ajouter Dockerfile : image nginx

From nginx:1.20.1-stable-alpine-3.14.0-1626963422

COPY build /app/list/data/installedApps/spa

EXPOSE 8443

CMD ["/bin/sh", "-c", "exec nginx -g 'daemon off;';"]

WORKDIR /app/list/data/installedApps/spa

NizarSteria commented 2 years ago

https://www.indellient.com/blog/how-to-dockerize-an-angular-application-with-nginx/

NizarSteria commented 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 ["..."]
NizarSteria commented 2 years ago

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
NizarSteria commented 2 years ago

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
NizarSteria commented 2 years ago

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
NizarSteria commented 2 years ago

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 .registry.saas.entity.group.gca//: où :

Nom du repository Artifactory A choisir parmi ceux fournis dans le mail de livraison envoyé par le triptyque. De la forme --docker-<MATURITE scratch|staging|stable>-<LOCALISATION intranet|internet>

/ (factultatif) Pour mettre l'image docker dans un sous-dossier dans le repository Artifactory Le sous-dossier n'est pas obligatoire Nom de l'image docker Version de l'image Ne pas utiliser le tag "lastest. Indiquer dans le tag le "short commit ref" pour tracer le commit qui a permit de builder l'image. La build de l'image se fait avec la commande suivante : ` docker build --pull -t .registry.saas.entity.group.gca/: -f / .`