Den bedste løsning ville være at bruge docker compose. Med dette ville du oprette en redis-beholder, linke til den og derefter starte din node.js-app. Den første ting ville være at installere docker compose beskrevet her - (https://docs.docker.com/compose/install/).
Når du har det oppe at køre, skal du oprette en docker-compose.yml i samme mappe som din apps dockerfil. Den skal indeholde følgende
version: '3'
services:
myapp:
build: .
ports:
- "3011:3011"
links:
- redis:redis
redis:
image: "redis:alpine"
Så vil redis være tilgængelig fra din node.js-app, men i stedet for localhost:6379
du ville bruge redis:6379
for at få adgang til redis-forekomsten.
For at starte din app skal du køre docker-compose up
, i din terminal. Bedste praksis ville være at bruge et network
i stedet for links
men dette blev lavet for nemheds skyld.
Dette kan også gøres som ønsket, med både redis og node.js på det samme billede, bør følgende Dockerfile fungere, den er baseret på hvad der står i spørgsmålet:
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"
Denne anden metode er virkelig dårlig praksis, og jeg har brugt sideløbende i stedet for supervisor eller lignende værktøj for enkelhedens skyld. Søvnen i CMD'en er for at lade redis starte før appen rent faktisk lanceres, du bør justere den til det der passer dig bedst. Håber dette hjælper, og at du bruger den første metode, da det er meget bedre praksis