docker run как задача Prefect
Мои фактические рабочие нагрузки, которые следует запускать как задачи в потоке Prefect, упакованы как образы докеров. Таким образом, поток в основном просто "запустите этот контейнер, затем запустите этот контейнер".
Однако я не могу найти никаких примеров того, как я могу легко запустить контейнер докера как задачу. В основном мне просто нужноdocker run
из потока.
Я знаю https://docs.prefect.io/api/latest/tasks/docker.html и пробовал различные комбинацииCreateContainer
а также StartContainer
, но безуспешно.
1 ответ
Использование задач Docker из библиотеки задач Prefect в вашем случае может выглядеть примерно так:
from prefect import task, Flow
from prefect.tasks.docker import (
CreateContainer,
StartContainer,
GetContainerLogs,
WaitOnContainer,
)
create = CreateContainer(image_name="prefecthq/prefect", command="echo 12345")
start = StartContainer()
wait = WaitOnContainer()
logs = GetContainerLogs()
@task
def see_output(out):
print(out)
with Flow("docker-flow") as flow:
container_id = create()
s = start(container_id=container_id)
w = wait(container_id=container_id)
l = logs(container_id=container_id)
l.set_upstream(w)
see_output(l)
flow.run()
Этот фрагмент выше создаст контейнер, запустит его, дождется завершения, получит журналы и затем распечатает вывод echo 12345
в командную строку.
В качестве альтернативы вы также можете использовать клиент Docker Python непосредственно в своих задачах https://docker-py.readthedocs.io/en/stable/api.html