在nodejs Docker镜像上运行redis

时间:2018-04-22 12:53:28

标签: docker redis dockerfile

我有一个Docker镜像,它是一个node.js应用程序。该应用程序从本地运行的Redis中检索一些配置信息。因此,我正在尝试在运行Docker镜像时安装Redis。

是否可以通过扩展node.js App的Dockerfile来设置Redis?

如果解决方案不是通过Dockerfile,我怎么能实现这个?

截至目前,Dockerfile如下:

  

FROM节点:碳

     

WORKDIR / app

     

COPY package.json / app

     

运行npm install

     

COPY。 /应用

     

EXPOSE 3011

     

CMD节点/app/src/server.js

3 个答案:

答案 0 :(得分:3)

最好的解决方案是使用docker compose。有了这个,你将创建一个redis容器,链接到它然后启动你的node.js应用程序。首先要安装详细的docker compose - (https://docs.docker.com/compose/install/)。

启动并运行后,您应该在与应用程序的dockerfile相同的文件夹中创建docker-compose.yml。它应包含以下内容

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

然后可以从您的node.js应用访问redis,但不是localhost:6379,而是使用redis:6379来访问redis实例。

要启动您的应用,您需要在终端中运行docker-compose up。最佳做法是使用network代替links,但这是为了简单起见。

这也可以根据需要完成,同时在同一个图像上同时使用redis和node.js,以下Dockerfile应该可以工作,它基于问题中的内容:

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" 

第二种方法实际上是不好的做法,为了简单起见,我同时使用了supervisor或类似的工具。 CMD中的睡眠是允许redis在应用程序实际启动之前启动,您应该将其调整为最适合您的应用程序。希望这会有所帮助,并且您使用第一种方法,因为这是更好的练习

答案 1 :(得分:2)

我的用例是在高山雄猫味中添加redis服务器:

这可行:

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

答案 2 :(得分:1)

如果您正在寻找带有nodejs和redis-server的最低限度的码头工人,那么可以这样做:

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 &

然后您可以对节点应用程序执行进一步的步骤。

相关问题