Die beste Lösung wäre die Verwendung von docker compose. Damit würden Sie einen Redis-Container erstellen, darauf verlinken und dann Ihre node.js-App starten. Als erstes müsste Docker Compose installiert werden, das hier beschrieben wird - (https://docs.docker.com/compose/install/).
Sobald Sie es eingerichtet und ausgeführt haben, sollten Sie eine Docker-Compose.yml-Datei im selben Ordner wie die Docker-Datei Ihrer App erstellen. Es sollte Folgendes enthalten
version: '3'
services:
myapp:
build: .
ports:
- "3011:3011"
links:
- redis:redis
redis:
image: "redis:alpine"
Dann ist redis von Ihrer node.js-App aus zugänglich, jedoch anstelle von localhost:6379
Sie würden redis:6379
verwenden um auf die Redis-Instanz zuzugreifen.
Um Ihre App zu starten, führen Sie docker-compose up
aus , in Ihrem Terminal. Best Practice wäre die Verwendung eines network
statt links
aber das wurde der Einfachheit halber gemacht.
Dies kann auch nach Wunsch erfolgen, da sich sowohl redis als auch node.js auf demselben Image befinden, sollte die folgende Dockerfile funktionieren, sie basiert auf der Frage:
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"
Diese zweite Methode ist wirklich schlechte Praxis und ich habe der Einfachheit halber gleichzeitig anstelle von Supervisor oder einem ähnlichen Werkzeug verwendet. Der Ruhezustand in der CMD dient dazu, dass Redis gestartet werden kann, bevor die App tatsächlich gestartet wird. Sie sollten ihn so anpassen, wie es Ihnen am besten passt. Ich hoffe, das hilft und dass Sie die erste Methode verwenden, da sie viel besser praktiziert wird