当前位置: 首页 > 面试题库 >

在Node.js Docker映像上运行Redis

韦高阳
2023-03-14
问题内容

我有一个Docker映像,它是一个node.js应用程序。该应用程序从本地运行的Redis检索一些配置值。因此,
我试图在Docker映像内的同一容器内安装和运行Redis。

如何扩展Docker文件并在其中配置Redis?

到目前为止,Dockerfile如下:

从节点:碳

WORKDIR / app

COPY package.json / app

运行npm安装

复制。/ app

展览3011

CMD节点/app/src/server.js


问题答案:

最好的解决方案是使用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:6379redis来访问redis实例

要启动您的应用,您可以docker-compose up在终端中运行。最佳做法是使用a 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"

第二种方法确实是一种不好的做法,为了简化起见,我同时使用了它而不是主管或类似工具。CMD中的睡眠是为了允许Redis在实际启动应用程序之前启动,您应该对其进行调整以使其最适合您。希望这会有所帮助,并且您会使用第一种方法,因为这是更好的做法



 类似资料:
  • 我有一个Docker映像,它是一个Node.js应用程序。应用程序从本地运行的Redis检索一些配置值。因此,我试图在Docker映像的同一容器中安装和运行Redis。 我如何扩展Docker文件并在其中配置Redis? 截至目前,Dockerfile如下所示:

  • 我如何在k8s中拉私人映像并使用它? 这是我的yaml for pod 日志为:-container“privaterePo”在pod“privaterePo”正在等待启动:尝试拉映像但失败

  • 问题内容: 我已成功将docker用于Windows 10上带有Linux容器的Windows窗口-但现在我想使用新的闪亮Windows Server 2016进行该任务-但是如何呢? 我已经使用此指南安装了Docker功能:https : //msdn.microsoft.com/zh- cn/virtualization/windowscontainers/quick_start/quick_

  • 我已经设置了一个dockerfile使用php: 7-fpm图像。除了这个图像被用来运行我的网站,我想添加一个cron来执行常规任务。 我已经创建了一个cron,把它放在正确的文件夹中,并运行然后或者如果我日志文件都可以正常工作。但是当容器被创建时,我不能让它工作,显然我不想手动启动cron。 据我所知,我需要使用或在启动时运行命令,但每次我这样做它会停止我的网站工作,因为我覆盖了必要的功能的原始

  • 问题内容: 如何运行在Google Container Engine本地构建的docker映像? 问题答案: 您可以将图片推送到Google Container Registry并从pod清单中引用它们。 详细说明 假设您进行了正确的设置,则安装了运行最新版本的Kubernetes和Google Cloud SDK 的GKE集群。 设置一些环境变量 标记您的图片 推你的形象 为您的容器创建一个容器

  • 问题内容: 我使用Java创建了一个Docker映像,并将jar文件复制到该映像中。我的Dockerfile是: 执行以下命令后: 在控制台中,我看到了应用程序的输出,一切都很好。但是当我停止图像时,我不知道如何再次运行图像?当我执行以下命令时: 该应用程序再次运行,但是在我的Dockerfile中,我已经编写了此命令。如何在不使用此命令的情况下运行映像并使应用程序自动运行? 问题答案: 图像和容