Моя цель:
У меня есть встроенный образ докера, и я хочу запустить все свои потоки на этом образе.
В настоящее время:
У меня есть следующая задача, которая выполняется на Local Dask Executor. Сервер, на котором работает агент, отличается от той среды Python, которая необходима для выполнения my_task
, поэтому необходимо запускать образ перед сборкой.
Мой вопрос: Как мне запустить этот поток на Dask Executor, чтобы он работал на образе докера, который я предоставил (в качестве среды)?
import prefect
from prefect import task, Flow
from prefect.engine.executors import LocalDaskExecutor
from prefect.environments import LocalEnvironment
@task
def hello_task():
logger = prefect.context.get("logger")
logger.info("Hello, Docker!")
with Flow("My Flow") as flow:
results = hello_task()
flow.environment = LocalEnvironment(
labels=[], executor=LocalDaskExecutor(scheduler="threads", num_workers=2),
)
Я подумал, что мне нужно сначала запустить сервер и агент на этом образе докера (как обсуждалось здесь), но я предполагаю, что есть способ просто запустить Flow на предоставленном изображении.
Обновление 1
Следуя этому руководству, Я пробовал следующее:
import prefect
from prefect import task, Flow
from prefect.engine.executors import LocalDaskExecutor
from prefect.environments import LocalEnvironment
from prefect.environments.storage import Docker
@task
def hello_task():
logger = prefect.context.get("logger")
logger.info("Hello, Docker!")
with Flow("My Flow") as flow:
results = hello_task()
flow.storage = Docker(registry_url='registry.gitlab.com/my-repo/image-library')
flow.environment = LocalEnvironment(
labels=[], executor=LocalDaskExecutor(scheduler="threads", num_workers=2),
)
flow.register(project_name="testing")
Но это создало изображение, которое затем было загружено в предоставленный registry_url
. Впоследствии, когда я попытался запустить зарегистрированную задачу, она вытащила вновь созданный образ, и задача застряла в статусе Submitted for execution
на несколько минут.
Я не понимаю, почему он подтолкнул изображение, а затем вытащил его? Вместо этого у меня уже есть сборка образа в этом реестре, я хотел бы указать образ, который следует использовать для выполнения задачи.
registry_url
предназначен для отправки в реестр (что меня сбивает с толку). Если вы укажете URL-адрес реестра, образ будет помещен в реестр контейнеров после регистрации потока. Является лиregistry_url
URL-адресом моего изображения (тот, который я хотел бы запустить)? - person Newskooler   schedule 07.10.2020registry_url
, построенный образ будет храниться локально на машине, на которой он был собран. - person chriswhite   schedule 07.10.2020image_name
иimage_tag
в хранилищеDocker
. - person chriswhite   schedule 07.10.2020registry.gitlab.com/my-repo/image-library:v1.3
Затем я хочу запустить свой Flow внутри этого изображения. Для этого мне обычно нужно вытащить образ, затем запустить его, а затем выполнить какую-то команду. Я выполнил шаги по предложенной вами ссылке, и я не понимаю, почему он создает новый образ, который добавляется в мой реестр, а затем извлекает новый образ (вместо того, который я хочу)? Я обновлю вопрос сейчас, для ясности. - person Newskooler   schedule 07.10.2020