Docker 运行 具有不同参数的图像的多个实例
Docker RUN multiple instance of a image with different parameters
我是 docker 的新手,所以这个问题听起来有点基础。
我有一个 VS.Net core2 控制台应用程序,它能够获取一些命令行参数并提供不同的服务。所以在正常的命令提示符下我可以 运行 类似
c:>dotnet myapplication.dll 5000 .\mydb1.db
c:>dotnet myapplication.dll 5001 .\mydb2.db
这会在端口 5000
和 5001
上创建此应用程序列表的 2 个实例。
我现在想为此应用程序创建一个 docker 容器,并希望 运行 该图像的多个实例,并能够将此参数作为命令行传递给 docker run
命令。但是我无法在 docker-compose.yml
或 Dockerfile
中看到如何配置它
DockerFile
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
# ignoring some of the code here
ENTRYPOINT ["dotnet", "myapplication.dll"]
docker-Compose.yml
version: '3.4'
services:
my.app:
image: ${DOCKER_REGISTRY}my/app
ports:
- 5000:80
build:
context: .
dockerfile: dir/Dockerfile
我试图避免为每个命令行参数组合创建多个图像。那么有可能实现我想要的吗?
Docker 容器以入口点和命令启动;当容器实际启动时,它们只是简单地连接在一起。如果 Dockerfile
中的 ENTRYPOINT 结构类似于单个命令,则 Dockerfile
中的 CMD 或 docker-compose.yml
中的 command:
包含它的参数。
这意味着您应该能够将 docker-compose.yml
设置为:
services:
my.app1:
image: ${DOCKER_REGISTRY}my/app
ports:
- 5000:80
command: [80, db1.db]
my.app2:
image: ${DOCKER_REGISTRY}my/app
ports:
- 5001:80
command: [80, db2.db]
(附带说明:如果程序的选项之一是要侦听的端口,则这需要匹配 ports:
规范中的第二个端口,在我的示例中我选择了让两者都监听 "normal" HTTP 端口并使用 ports:
设置将其重新映射到主机上。如果需要,一个容器可以到达另一个容器,因为默认 HTTP 上的 http://my.app2/
端口。)
我是 docker 的新手,所以这个问题听起来有点基础。
我有一个 VS.Net core2 控制台应用程序,它能够获取一些命令行参数并提供不同的服务。所以在正常的命令提示符下我可以 运行 类似
c:>dotnet myapplication.dll 5000 .\mydb1.db
c:>dotnet myapplication.dll 5001 .\mydb2.db
这会在端口 5000
和 5001
上创建此应用程序列表的 2 个实例。
我现在想为此应用程序创建一个 docker 容器,并希望 运行 该图像的多个实例,并能够将此参数作为命令行传递给 docker run
命令。但是我无法在 docker-compose.yml
或 Dockerfile
DockerFile
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80
# ignoring some of the code here
ENTRYPOINT ["dotnet", "myapplication.dll"]
docker-Compose.yml
version: '3.4'
services:
my.app:
image: ${DOCKER_REGISTRY}my/app
ports:
- 5000:80
build:
context: .
dockerfile: dir/Dockerfile
我试图避免为每个命令行参数组合创建多个图像。那么有可能实现我想要的吗?
Docker 容器以入口点和命令启动;当容器实际启动时,它们只是简单地连接在一起。如果 Dockerfile
中的 ENTRYPOINT 结构类似于单个命令,则 Dockerfile
中的 CMD 或 docker-compose.yml
中的 command:
包含它的参数。
这意味着您应该能够将 docker-compose.yml
设置为:
services:
my.app1:
image: ${DOCKER_REGISTRY}my/app
ports:
- 5000:80
command: [80, db1.db]
my.app2:
image: ${DOCKER_REGISTRY}my/app
ports:
- 5001:80
command: [80, db2.db]
(附带说明:如果程序的选项之一是要侦听的端口,则这需要匹配 ports:
规范中的第二个端口,在我的示例中我选择了让两者都监听 "normal" HTTP 端口并使用 ports:
设置将其重新映射到主机上。如果需要,一个容器可以到达另一个容器,因为默认 HTTP 上的 http://my.app2/
端口。)