Docker RUN несколько экземпляров изображения с различными параметрами - PullRequest
0 голосов
/ 15 октября 2018

Я новичок в докере, так что это может показаться немного основным вопросом.

У меня есть консольное приложение VS.Net core2, которое может принимать некоторые параметры командной строки и предоставлять различные службы.поэтому в обычной командной строке я могу запустить что-то вроде

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

, что создает 2 экземпляра этого списка приложений на порт 5000 & 5001.

Теперь я хочу создать один док-контейнер для этого приложения и хочу запустить несколько экземпляров этого образа и иметь возможность передавать этот параметр в качестве командной строки в команду 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 Ответ

0 голосов
/ 15 октября 2018

Docker-контейнеры запускаются с точкой входа и командой;когда контейнер действительно запускается, они просто соединяются вместе.Если ENTRYPOINT в Dockerfile структурирован как одна команда, то CMD в Dockerfile или command: в docker-compose.yml содержит аргументы для него.

Это означает, что вы должны иметь возможность установитьвверх 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-порта и переназначение его на хостах с использованием параметра * 1012. * Один контейнер может связаться с другим, если потребуется, как http://my.app2/ напорт HTTP по умолчанию.)

...