Redis
 sql >> Base de Dados >  >> NoSQL >> Redis

Executando redis na imagem do Docker do nodejs


A melhor solução seria usar o docker compose. Com isso, você criaria um contêiner redis, vincularia a ele e iniciaria seu aplicativo node.js. A primeira coisa seria instalar o docker compose detalhado aqui - (https://docs.docker.com/compose/install/).

Depois de colocá-lo em execução, você deve criar um docker-compose.yml na mesma pasta do arquivo docker do seu aplicativo. Deve conter o seguinte
version: '3'
services:
  myapp:
    build: .  
    ports:
     - "3011:3011"
    links:
     - redis:redis
  redis:
    image: "redis:alpine"

Em seguida, o redis estará acessível a partir do seu aplicativo node.js, mas em vez de localhost:6379 você usaria redis:6379 para acessar a instância do redis.

Para iniciar seu aplicativo, você deve executar docker-compose up , em seu terminal. A melhor prática seria usar uma network em vez de links mas isso foi feito para simplificar.

Isso também pode ser feito conforme desejado, tendo redis e node.js na mesma imagem, o seguinte Dockerfile deve funcionar, é baseado no que está na pergunta:
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" 

Este segundo método é uma prática muito ruim e eu usei simultaneamente em vez de supervisor ou ferramenta semelhante para simplificar. A suspensão no CMD é para permitir que o redis inicie antes que o aplicativo seja realmente iniciado, você deve ajustá-lo para o que melhor lhe convier. Espero que isso ajude e que você use o primeiro método, pois é uma prática muito melhor