La meilleure solution serait d'utiliser docker compose. Avec cela, vous créez un conteneur Redis, créez un lien vers celui-ci, puis démarrez votre application node.js. La première chose serait d'installer docker compose détaillé ici - (https://docs.docker.com/compose/install/).
Une fois que vous l'avez installé et en cours d'exécution, vous devez créer un docker-compose.yml dans le même dossier que le dockerfile de votre application. Il doit contenir les éléments suivants
version: '3'
services:
myapp:
build: .
ports:
- "3011:3011"
links:
- redis:redis
redis:
image: "redis:alpine"
Redis sera alors accessible depuis votre application node.js mais au lieu de localhost:6379
vous utiliseriez redis:6379
pour accéder à l'instance redis.
Pour démarrer votre application, vous exécuteriez docker-compose up
, dans votre terminal. La meilleure pratique serait d'utiliser un network
au lieu de links
mais cela a été fait pour la simplicité.
Cela peut également être fait comme vous le souhaitez, en ayant à la fois redis et node.js sur la même image, le Dockerfile suivant devrait fonctionner, il est basé sur ce qui est dans la question :
FROM node:carbon
RUN wget http://download.redis.io/redis-stable.tar.gz && \
tar xvzf redis-stable.tar.gz && \
cd redis-stable && \
make && \
mv src/redis-server /usr/bin/ && \
cd .. && \
rm -r redis-stable && \
npm install -g concurrently
EXPOSE 6379
WORKDIR /app
COPY package.json /app
RUN npm install
COPY . /app
EXPOSE 3011
EXPOSE 6379
CMD concurrently "/usr/bin/redis-server --bind '0.0.0.0'" "sleep 5s; node /app/src/server.js"
Cette deuxième méthode est vraiment une mauvaise pratique et j'ai utilisé simultanément au lieu de superviseur ou d'un outil similaire pour plus de simplicité. Le sommeil dans le CMD permet à Redis de démarrer avant le lancement de l'application, vous devez l'ajuster à ce qui vous convient le mieux. J'espère que cela vous aidera et que vous utiliserez la première méthode car c'est une bien meilleure pratique