Den bästa lösningen skulle vara att använda docker compose. Med detta skulle du skapa en redis-behållare, länka till den och sedan starta din node.js-app. Det första skulle vara att installera docker compose som beskrivs här - (https://docs.docker.com/compose/install/).
När du har det igång, bör du skapa en docker-compose.yml i samma mapp som din app dockerfil. Den bör innehålla följande
version: '3'
services:
myapp:
build: .
ports:
- "3011:3011"
links:
- redis:redis
redis:
image: "redis:alpine"
Då kommer redis att vara tillgänglig från din node.js-app men istället för localhost:6379
du skulle använda redis:6379
för att komma åt redis-instansen.
För att starta din app skulle du köra docker-compose up
, i din terminal. Bästa praxis skulle vara att använda ett network
istället för links
men detta gjordes för enkelhetens skull.
Detta kan också göras efter önskemål, med både redis och node.js på samma bild, bör följande Dockerfil fungera, den är baserad på vad som står i frågan:
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"
Denna andra metod är riktigt dålig praxis och jag har använt samtidigt istället för handledare eller liknande verktyg för enkelhetens skull. Sömnen i CMD är för att tillåta redis att starta innan appen faktiskt lanseras, du bör anpassa den till det som passar dig bäst. Hoppas detta hjälper och att du använder den första metoden eftersom det är mycket bättre praxis