9

我应该在 Prefect 流程中作为任务运行的实际工作负载都打包为 docker 映像。所以一个流程基本上只是“运行这个容器,然后运行那个容器”。

但是,我找不到任何关于如何轻松启动 docker 容器作为任务的示例。基本上,我只需要docker run一个流程。

我知道https://docs.prefect.io/api/latest/tasks/docker.htmlCreateContainer并尝试了and的各种组合StartContainer,但没有任何运气。

4

1 回答 1

11

对于您的用例,使用 Prefect 任务库中的 Docker 任务可能看起来像这样:

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#module-docker.api.container

于 2020-06-22T20:32:12.297 回答