使用Docker运行多个具有不同参数的镜像实例

7

我是一名docker新手,所以我的问题可能有点基础。

我有一个VS.Net Core2控制台应用程序,能够接受一些命令行参数并提供不同的服务。所以在普通的命令提示符中,我可以运行像这样的命令:

c:>dotnet myapplication.dll 5000 .\mydb1.db c:>dotnet myapplication.dll 5001 .\mydb2.db

这将创建2个实例,分别监听端口50005001

我现在想为这个应用程序创建一个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

我正在尝试避免为每个命令行参数组合创建多个图像。那么是否有可能实现我想要的效果呢?

1个回答

7

Docker容器是通过一个入口点和命令来启动的;当容器实际启动时,它们会被简单地连接在一起。如果Dockerfile中的ENTRYPOINT结构类似于单个命令,那么在Dockerfile的CMD或docker-compose.ymlcommand:中包含其参数。

这意味着您应该能够将您的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:规范中的第二个端口匹配,在我的示例中,我选择让两个端口都监听“正常”的HTTP端口,并在主机上使用ports:设置重新映射它。如果需要,一个容器可以通过默认的HTTP端口访问另一个容器,如http://my.app2/。)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接