Skip to content

Multi-target Build

Sometimes you need build different images for development, serving or other purposes. This guide shows how envd build supports multi-target build.

A build.envd can have multiple build targets. The default build target in build.envd is build:

py
def build():
    # ...

Create a new build target

New build targets can be defined as functions in build.envd:

py
def build():
    # ...
def serve():
    # ...

Example

envd build -f :<target> executes the build for the given target. Here is an example.

py
def build():
    base(os="ubuntu20.04", language="python3")
    install.vscode_extensions([
        "ms-python.python",
    ])

    configure_mnist()
    # Configure jupyter notebooks.
    config.jupyter()
    # Configure zsh.
    shell("zsh")

def serve():
    base(os="ubuntu20.04", language="python3")
    configure_streamlit(8501)
    configure_mnist()

def configure_streamlit(port):
    install.python_packages([
        "streamlit",
        "streamlit_drawable_canvas",
    ])
    runtime.expose(envd_port=port, host_port=port, service="streamlit")
    runtime.daemon(commands=[
        ["streamlit", "run", "~/streamlit-mnist/app.py"]
    ])

def configure_mnist():
    # config.pip_index(url = "https://pypi.tuna.tsinghua.edu.cn/simple")
    install.apt_packages([
        "libgl1",
    ])
    install.python_packages([
        "tensorflow",
        "numpy",
        "opencv-python",
        "matplotlib",
    ])

This demo contains two parts: training a simple digit recognition model using mnist dataset and a webapp to live demo that model.

Released under the Apache-2.0 License. Built with VitePress.