De beste oplossing zou zijn om Docker Compose te gebruiken. Hiermee zou je een redis-container maken, ernaar linken en vervolgens je node.js-app starten. Het eerste zou zijn om docker compose te installeren dat hier wordt beschreven - (https://docs.docker.com/compose/install/).
Als je het eenmaal in gebruik hebt, moet je een docker-compose.yml maken in dezelfde map als het dockerbestand van je app. Het moet het volgende bevatten
version: '3'
services:
myapp:
build: .
ports:
- "3011:3011"
links:
- redis:redis
redis:
image: "redis:alpine"
Dan is redis toegankelijk vanuit uw node.js-app, maar in plaats van localhost:6379
je zou redis:6379
. gebruiken om toegang te krijgen tot de redis-instantie.
Om uw app te starten, voert u docker-compose up
. uit , in uw terminal. Best practice zou zijn om een network
. te gebruiken in plaats van links
maar dit is gemaakt voor de eenvoud.
Dit kan ook naar wens worden gedaan, met zowel redis als node.js op dezelfde afbeelding, het volgende Dockerfile zou moeten werken, het is gebaseerd op wat er in de vraag staat:
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"
Deze tweede methode is echt een slechte gewoonte en ik heb voor de eenvoud gelijktijdig gebruikt in plaats van supervisor of soortgelijke tool. De slaapstand in de CMD is om redis te laten starten voordat de app daadwerkelijk wordt gelanceerd, je moet deze aanpassen aan wat het beste bij je past. Ik hoop dat dit helpt en dat je de eerste methode gebruikt, omdat dit veel beter is