rom*_*n95 2 node.js docker dockerfile
如何在单个容器中运行所有 Node.js 文件?
Dockerfile
FROM node:latest
WORKDIR /rootfolder
COPY package.json ./
RUN npm install
COPY . .
RUN chmod +x /script.sh
RUN /script.sh
Run Code Online (Sandbox Code Playgroud)
脚本文件
#!/bin/sh
node ./app1.js
node ./app2.js
node ./app3.js
node ./app4.js
Run Code Online (Sandbox Code Playgroud)
您几乎总是在单独的容器中运行它们。您可以从同一映像运行多个容器,您可以在启动映像时覆盖映像的默认命令,并且可以在启动应用程序时重新映射应用程序使用的端口。
在 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
Run Code Online (Sandbox Code Playgroud)
(我假设所有脚本都侦听默认的 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
Run Code Online (Sandbox Code Playgroud)
Compose 将自行创建 Docker 网络,并负责命名镜像和容器。 docker-compose up将并行启动所有服务。
| 归档时间: |
|
| 查看次数: |
7128 次 |
| 最近记录: |