sql >> Base de Datos >  >> NoSQL >> Redis

Ejecutando redis en nodejs Docker image

La mejor solución sería usar docker compose. Con esto, crearía un contenedor redis, vincularlo y luego iniciar su aplicación node.js. Lo primero sería instalar docker compose detallado aquí - (https://docs.docker.com/compose/install/).

Una vez que lo tenga en funcionamiento, debe crear un docker-compose.yml en la misma carpeta que el dockerfile de su aplicación. Debe contener lo siguiente

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

Luego se podrá acceder a redis desde su aplicación node.js, pero en lugar de localhost:6379 usarías redis:6379 para acceder a la instancia de redis.

Para iniciar su aplicación, debe ejecutar docker-compose up , en tu terminal. La mejor práctica sería usar una network en lugar de links pero esto fue hecho por simplicidad.

Esto también se puede hacer como se desee, con redis y node.js en la misma imagen, el siguiente Dockerfile debería funcionar, se basa en lo que está en la pregunta:

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 es realmente una mala práctica y lo he usado simultáneamente en lugar de supervisor o una herramienta similar por simplicidad. El sueño en el CMD es permitir que redis se inicie antes de que se inicie la aplicación, debe ajustarlo a lo que más le convenga. Espero que esto ayude y que utilices el primer método, ya que es una práctica mucho mejor