Redis
 sql >> Database >  >> NoSQL >> Redis

Esecuzione di redis sull'immagine Docker di nodejs

La soluzione migliore sarebbe usare la composizione mobile. Con questo creeresti un contenitore redis, colleghi ad esso e poi avvierai la tua app node.js. La prima cosa sarebbe installare Docker Compose dettagliato qui - (https://docs.docker.com/compose/install/).

Una volta che lo hai installato e funzionante, dovresti creare un docker-compose.yml nella stessa cartella del dockerfile della tua app. Dovrebbe contenere quanto segue

version: '3'
services:
  myapp:
    build: .  
    ports:
     - "3011:3011"
    links:
     - redis:redis
  redis:
    image: "redis:alpine"

Quindi redis sarà accessibile dalla tua app node.js ma invece di localhost:6379 useresti redis:6379 per accedere all'istanza redis.

Per avviare la tua app devi eseguire docker-compose up , nel tuo terminale. La migliore pratica sarebbe quella di utilizzare una network invece di links ma questo è stato fatto per semplicità.

Questo può anche essere fatto come desiderato, avendo sia redis che node.js sulla stessa immagine, il seguente Dockerfile dovrebbe funzionare, è basato su ciò che è nella domanda:

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" 

Questo secondo metodo è davvero una cattiva pratica e l'ho usato contemporaneamente al posto del supervisore o di uno strumento simile per semplicità. La sospensione nel CMD serve a consentire l'avvio di redis prima che l'app venga effettivamente avviata, dovresti adattarla a ciò che ti si addice meglio. Spero che questo ti aiuti e che tu usi il primo metodo in quanto è una pratica molto migliore