Dockerfile-为multiple Node.js应用程序构建docker映像

Dockerfile-为multiple Node.js应用程序构建docker映像,node.js,docker,dockerfile,Node.js,Docker,Dockerfile,如何在单个容器中运行所有Node.js文件 在端口1001上运行的app1.js 在端口1002上运行的app2.js 在端口1003上运行的app3.js 在端口1004上运行的app4.js Dockerfile script.sh 您试图实现的目标被认为是一种反模式。 相反,在构建应用程序堆栈时牢记单一责任原则将使您能够更好地管理、监控、更改应用程序等 官方文档中的一篇文章解释了您何时可能需要这样做 如果您想作为一个整体管理多个容器,那么为每个js提供一个Dockerfile,再加上一个d

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

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

script.sh


您试图实现的目标被认为是一种反模式。 相反,在构建应用程序堆栈时牢记单一责任原则将使您能够更好地管理、监控、更改应用程序等

官方文档中的一篇文章解释了您何时可能需要这样做

如果您想作为一个整体管理多个容器,那么为每个js提供一个Dockerfile,再加上一个docker compose文件,以便在不同的端口上同时调出所有容器可能会回答您的问题。下面是一个简单的例子:

docker-compose.yml


您试图实现的目标被认为是一种反模式。 相反,在构建应用程序堆栈时牢记单一责任原则将使您能够更好地管理、监控、更改应用程序等

官方文档中的一篇文章解释了您何时可能需要这样做

如果您想作为一个整体管理多个容器,那么为每个js提供一个Dockerfile,再加上一个docker compose文件,以便在不同的端口上同时调出所有容器可能会回答您的问题。下面是一个简单的例子:

docker-compose.yml


您需要首先使用以下方法公开端口:

EXPOSE 1001
...
EXPOSE 1004
在dockerfile中,然后使用-p参数和-p 1501:1001一起运行容器 例如,公开主机的端口1501作为容器的1001端口

参考:

但是,建议尽量减少从docker容器运行的程序数量。因此,您可能希望为每个js脚本都有一个容器

然而,没有什么能阻止您使用:

docker exec -it yourDockerMachineName bash

您可以多次使用每个节点cmd。

您需要首先使用以下方法公开端口:

EXPOSE 1001
...
EXPOSE 1004
在dockerfile中,然后使用-p参数和-p 1501:1001一起运行容器 例如,公开主机的端口1501作为容器的1001端口

参考:

但是,建议尽量减少从docker容器运行的程序数量。因此,您可能希望为每个js脚本都有一个容器

然而,没有什么能阻止您使用:

docker exec -it yourDockerMachineName bash

您可以多次使用每个节点cmd。

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

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

docker构建-t myapp。树立形象 docker网络创建mynet创建docker网络 docker运行\运行第一个容器。。。 -d\在后台 -net mynet\在该网络上 -名称app1\具有已知名称 -p 1001:3000\发布端口 myapp\来自此图像 node./app1.js运行此命令 码头工人赛跑\ -d\ -我的网\ -名称app2\ -p 1002:3000\ myapp\ node./app2.js 我假设所有脚本都在默认的Express端口3000上侦听,这是-p选项中的第二个端口号

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

版本:“3.8” 服务: 附录1: 生成:。 端口: - 1001:3000 命令:node./app1.js 附录2: 生成:。 端口: - 1002:3000 命令:node./app2.js
Compose将自己创建一个Docker网络,并负责命名图像和容器。docker compose up将并行启动所有服务。

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

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

docker构建-t myapp。树立形象 docker网络创建mynet创建docker网络 docker运行\运行第一个容器。。。 -d\在后台 -net mynet\在该网络上 -名称app1\具有已知名称 -P1 001:3000\发布端口 myapp\来自此图像 node./app1.js运行此命令 码头工人赛跑\ -d\ -我的网\ -名称app2\ -p 1002:3000\ myapp\ node./app2.js 我假设所有脚本都在默认的Express端口3000上侦听,这是-p选项中的第二个端口号

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

版本:“3.8” 服务: 附录1: 生成:。 端口: - 1001:3000 命令:node./app1.js 附录2: 生成:。 端口: - 1002:3000 命令:node./app2.js
Compose将自己创建一个Docker网络,并负责命名图像和容器。docker compose up将并行启动所有服务。

问题出在哪里?问题出在哪里?我是否为所有.js文件构建单独的映像并运行它。把那个码头工人的作文贴上去?我不确定我是否理解这个问题。其想法是为每个js应用程序提供DockerFile。例如,使用docker Build-t your-js-app-1-image构建每个图像。然后创建一个docker-compose.yml文件,类似于我提供的示例。然后使用docker compose up命令打开所有容器。我是否为所有.js文件构建单独的图像并运行它。把那个码头工人的作文贴上去?我不确定我是否理解这个问题。其想法是为每个js应用程序提供DockerFile。例如,使用docker Build-t your-js-app-1-image构建每个图像。然后创建一个docker-compose.yml文件,类似于我提供的示例。然后使用docker compose up命令打开所有容器
docker exec -it yourDockerMachineName bash