• J'essaie d'utiliser Docker et de mettre à jour Nginx mais la construction échoue toujours.
  • J'ai actuellement deux fichiers. J'essaie d'utiliser simplement le fichier Docker, des idées ? Au fait, j'ai vu que la partie Nginx ne s'était pas mise à jour (dans la version, affiche toujours 1.10.3)
  • l'environnement de "développement" dans Dockerfile me fait penser que c'est juste pour le local ?

docker-base/fichier Docker. Vieille. De quoi mettre à jour le nœud et Nginx.

FROM node:10.1

RUN apt-get update && apt-get install -y nginx build-essential gyp libpng-dev bzip2 autoconf libtool nasm libvips-dev --no-install-recommends && mkdir -p /usr/src/app

COPY ./package.json /usr/src/app/

WORKDIR /usr/src/app/

RUN npm install -g node-gyp

JE VEUX SUPPRIMER CECI ET L'AJOUTER JUSTE AU FICHIER DOCKER....

FROM oudatedImage 

RUN apt-get update && apt-get install -y libvips-dev --no-install-recommends

COPY package.json /usr/src/app/

WORKDIR /usr/src/app/

RUN NODE_ENV=development npm install

COPY . /usr/src/app

RUN npm run build

EXPOSE 80

CMD ["sh", "run_app.sh"]

D'après ce que je comprends, une image est créée à partir du fichier docker-base/Docker... et qui est ensuite insérée dans le fichier Docker... MAIS je n'ai pas besoin de cette image ou de ce processus... Je veux le résumer le tout dans le Dockerfile.

Des idées? J'ai essayé de mettre à jour vers une version plus récente de node stretch, mais le Nginx ne se mettait pas à jour et la construction a échoué. Avez-vous des idées pour combiner les deux dans le Dockerfile et mettre à jour le nœud et Nginx ?

answer

Compte tenu de la description actuelle, il me semble que vous aviez une configuration qui crée une image basée sur le premier fichier, la pousse dans GCR et l'utilise ensuite comme base pour le second. Donc, je suppose que vous en êtes conscient, que vous comprenez votre système/pipeline et que vous savez que la communauté n'a pas accès à votre environnement pour l'évaluer.

Maintenant, vos questions sont : Comment mettre à jour Nginx, Node et comment tout avoir dans un seul Dockerfile.

# Use the latest base image
FROM node:latest

# Adding this here bc is only relevant for your environment
ARG NODE_ENV='production'
ARG CLIENT_HOST='cdn.mysite.com'
ARG PORT='80'
ARG HOST='www.mysite.com'
ARG API_HOST='api.mysite.com'
ARG API2_HOST='api2.mysite.com'
ARG PROTOCOL='https'
ENV NODE_ENV $NODE_ENV
ENV CLIENT_HOST $CLIENT_HOST
ENV PROTOCOL $PROTOCOL
ENV API2_HOST $API2_HOST
ENV API_HOST $API_HOST
ENV HOST $HOST
ENV PORT $PORT

# Adding the new mainline package for Stretch to match the Node Docker image and adding the signing keys
RUN echo "deb http://nginx.org/packages/mainline/debian/ stretch nginx \
deb-src http://nginx.org/packages/mainline/debian/ stretch nginx" > /etc/apt/sources.list.d/nginx.list && wget -qO - https://nginx.org/keys/nginx_signing.key | apt-key add -

# Your package dependencies + latest Nginx
RUN apt update -y && apt install -y nginx build-essential gyp libpng-dev bzip2 autoconf libtool nasm libvips-dev --no-install-recommends && mkdir -p /usr/src/app

# Appending the GCR file build steps
COPY package.json /usr/src/app/

WORKDIR /usr/src/app/

RUN NODE_ENV=development npm install

COPY . /usr/src/app

RUN npm run build

EXPOSE 80

CMD ["sh", "run_app.sh"]

Explication

Fondamentalement, l'image Node est livrée avec une version Nginx obsolète, vous devez donc suivre la mise à jour officielle du référentiel Nginx .

Comme vous pouvez le voir dans le Dockerfile, je viens d'ajouter ces actions dans une RUNétape avant d'installer tous les packages.

En ce qui concerne la version Node, vous utilisez une version obsolète qui n'est même pas répertoriée dans Dockerhub , j'ai donc utilisé la dernière.

Au moment d'écrire ces lignes, il devrait avoir Nginx 1.17.10 et Node v14.3.0

À propos des ARGdirectives, celles-ci ont vos valeurs par défaut personnalisées qui semblent n'être pertinentes que dans votre contexte, je les inclus donc simplement car il est impossible pour la communauté de savoir si elles sont liées à des erreurs dans votre pipeline.

Enfin, si la construction échoue, vous devez fournir l'erreur pour obtenir une réponse plus précise ou pour clarifier l'ensemble de votre contexte et être précis sur ce dont vous avez besoin.

J'espère que cela vous aide.