Andreas Tsangarides
10/06/2021, 12:04 PMstored_as_scriptpathAnna Geller
registry_urlbuilt_storage = flow.storage.build(push=False)
# this gives you a dictionary of flows and paths within the image
built_storage.flows
# ex. {"your-flow": "/root/.prefect/your-flow.prefect"}Andreas Tsangarides
10/06/2021, 12:17 PMAnna Geller
Anna Geller
Anna Geller
image_nameimage_tagfrom prefect import Flow, task
from prefect.storage import Docker
from prefect.run_configs import DockerRun
@task
def hello_world():
    return "hello from Docker Flow #1"
with Flow(
    "docker-flow-1",
    storage=Docker(image_name="andreas-image", image_tag="latest"),
    run_config=DockerRun()
) as flow:
    hello_world()
if __name__ == '__main__':
    flow.register("Docker_Flows")Andreas Tsangarides
10/06/2021, 1:41 PMflow.pydocker run...storage = Docker(
    # registry_url='<http://455197153980.dkr.ecr.eu-west-2.amazonaws.com/|455197153980.dkr.ecr.eu-west-2.amazonaws.com/>',
    image_name="uk-prefect-flows-dev",
    image_tag="latest",
    dockerfile='Dockerfile',
    path="src/flows/elexon_detsysprices/flow.py",
    stored_as_script=True
)Kevin Kho
Kevin Kho
Andreas Tsangarides
10/06/2021, 2:31 PMdocker run....Docker.build()S3# src/flows/elexon_detsysprices/flow.py
# imports
ENV = os.getenv("ENV", "local")
from prefect.storage import S3
storage = S3(
    bucket="<bucket-name>",
    key=f"{ENV}/elexon-detsysprices",
    stored_as_script=True,
    local_script_path=os.path.abspath(__file__)
)
with Flow("flow-name", storage=storage) as flow:
    # .......
# do attach your run_config before registering! I use DockerRun here 
# DockerRun(image="uk-prefect-flows-dev:latest", env={"ENV": "local"}, labels=["local"])
# register your flow (I do it using click elsewhere using the prefect client)# I do this in cli.py
storage = Docker(
    # registry_url=registry_url, keep as None for local dev otherwise point to your ECR/dockerhub repo
    image_name=image_name,
    image_tag=image_tag,
    dockerfile='Dockerfile'
)
storage.build(push=push) # push=False for keeping image on local machine