我应该在 Prefect 流程中作为任务运行的实际工作负载都打包为 docker 映像。所以一个流程基本上只是“运行这个容器,然后运行那个容器”。
但是,我找不到任何关于如何轻松启动 docker 容器作为任务的示例。基本上,我只需要docker run
一个流程。
我知道https://docs.prefect.io/api/latest/tasks/docker.htmlCreateContainer
并尝试了and的各种组合StartContainer
,但没有任何运气。
我应该在 Prefect 流程中作为任务运行的实际工作负载都打包为 docker 映像。所以一个流程基本上只是“运行这个容器,然后运行那个容器”。
但是,我找不到任何关于如何轻松启动 docker 容器作为任务的示例。基本上,我只需要docker run
一个流程。
我知道https://docs.prefect.io/api/latest/tasks/docker.htmlCreateContainer
并尝试了and的各种组合StartContainer
,但没有任何运气。
对于您的用例,使用 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