gpt4 book ai didi

node.js - Dockerfile - 为多个 Node.js 应用构建 docker 镜像

转载 作者:行者123 更新时间:2023-12-02 19:16:02 25 4
gpt4 key购买 nike

如何在单个容器中运行所有 Node.js 文件?

  • 在端口 1001 上运行的 app1.js
  • 在端口 1002 上运行的 app2.js
  • 在端口 1003 上运行的 app3.js
  • 在端口 1004 上运行的 app4.js

Dockerfile

FROM node:latest
WORKDIR /rootfolder
COPY package.json ./
RUN npm install
COPY . .
RUN chmod +x /script.sh
RUN /script.sh

脚本.sh

#!/bin/sh
node ./app1.js
node ./app2.js
node ./app3.js
node ./app4.js

最佳答案

您几乎总是在单独的容器中运行它们。您可以从同一个镜像运行多个容器,可以在启动时覆盖镜像的默认命令,还可以重新映射应用程序在启动时使用的端口。

在您的 Dockerfile 中,删除末尾的 RUN/script.sh 行。 (这将尝试在镜像构建期间启动服务器,这是您不希望的。)现在您可以构建和运行容器:

docker build -t myapp .      # build the image
docker network create mynet # create a Docker network
docker run \ # run the first container...
-d \ # in the background
--net mynet \ # on that network
--name app1 \ # with a known name
-p 1001:3000 \ # publishing a port
myapp \ # from this image
node ./app1.js # running this command
docker run \
-d \
--net mynet \
--name app2 \
-p 1002:3000 \
myapp \
node ./app2.js

(我假设所有脚本都在默认的 Express 端口 3000 上监听,这是 -p 选项中的第二个端口号。)

Docker Compose 是一个非常有用的工具,可以同时运行多个容器,并且可以复制此功能。与此设置匹配的 docker-compose.yml 文件如下所示:

version: '3.8'
services:
app1:
build: .
ports:
- 1001:3000
command: node ./app1.js
app2:
build: .
ports:
- 1002:3000
command: node ./app2.js

Compose 会自己创建一个 Docker 网络,并负责命名镜像和容器。 docker-compose up 将并行启动所有服务。

关于node.js - Dockerfile - 为多个 Node.js 应用构建 docker 镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63463315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com