Running redis on nodejs Docker image

后端 未结 3 1462
野趣味
野趣味 2020-12-30 12:06

I have a Docker image which is a node.js application. The app retrieves some configuration value from Redis which is running locally. Because of that, I am trying to

相关标签:
3条回答
  • 2020-12-30 12:58

    The best solution would be to use docker compose. With this you would create a redis container, link to it then start your node.js app. First thing would be to install docker compose detailed here - (https://docs.docker.com/compose/install/).

    Once you have it up and running, You should create a docker-compose.yml in the same folder as your app's dockerfile. It should contain the following

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

    Then redis will be accessible from your node.js app but instead of localhost:6379 you would use redis:6379 to access the redis instance.

    To start your app you would run docker-compose up, in your terminal. Best practice would be to use a network instead of links but this was made for simplicity.

    This can also be done as desired, having both redis and node.js on the same image, the following Dockerfile should work, it is based off what is in the question:

    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" 
    

    This second method is really bad practice and I have used concurrently instead of supervisor or similar tool for simplicity. The sleep in the CMD is to allow redis to start before the app is actually launched, you should adjust it to what suits you best. Hope this helps and that you use the first method as it is much better practice

    0 讨论(0)
  • 2020-12-30 13:10

    My use case was to add redis server in alpine tomcat flavour:

    So this worked:

    FROM tomcat:8.5.40-alpine
    
    
    RUN apk add --no-cache redis  
    RUN apk add --no-cache screen 
    
    EXPOSE 6379
    
    EXPOSE 3011
    
    
    ## Run Tomcat
    CMD screen -d -m -S Redis /usr/bin/redis-server --bind '0.0.0.0' && \
    ${CATALINA_HOME}/bin/catalina.sh run
    EXPOSE 8080
    
    0 讨论(0)
  • 2020-12-30 13:11

    If you are looking for a bare minimum docker with nodejs and redis-server, this works :

    FROM nikolaik/python-nodejs:python3.5-nodejs8
    
    RUN apt-get update
    apt-get -y install redis-server
    
    COPY . /app
    WORKDIR /app
    nohup redis-server &> redis.log &
    

    and then you can have further steps for your node application.

    0 讨论(0)
提交回复
热议问题