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

Другие вопросы по тегам