Есть два простых ответа в чистом-Docker пространстве.
Первое, что вы можете сделать, это упаковать весь ваш код в одно изображение:
FROM python:3
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["./main.py"]
Вы можете переопределить часть команды в команде docker run
или в файле docker-compose.yml
, поэтому запустите несколько контейнеров из одного образа.
version: '3'
services:
crawler:
build: .
command: ./crawl.py
indexer:
build: .
command: ./indexer.py
Или вы можете иметь несколько файлов Docker в тот же каталог
version: '3'
services:
crawler:
build:
context: .
dockerfile: Dockerfile.crawler
indexer:
build:
context: .
dockerfile: Dockerfile.indexer
и эти файлы Docker могут быть более ограниченными
FROM python:3
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY common common
COPY crawler crawler
COPY crawler.py .
CMD ["./crawler.py"]
Какой подход к использованию зависит от вашей кодовой базы. Если это интерпретируемый язык, почти весь код является общим, и единственное реальное отличие - это команда, которую вы выполняете, тогда, вероятно, лучше всего иметь одно изображение. Но если зависимости библиотек существенно различаются для каждой зависимости или если вам необходимо создать отдельный двоичный файл для каждого процесса, отдельный образ для каждого имеет больший смысл.